Ok Im sorry - Я провел последние несколько дней, работая над этим, и я застрял ... и поэтому я прошу совета или свежий взгляд помогите мне здесь ...Mysql в PHP запускает один запрос, а затем неудачи на втором,
Код здесь либо работал, либо был протестирован в разделе sql phpMyAdmin ... некоторый фон, у меня есть db с двумя таблицами, пользователями и ролями. Я пытаюсь вставить пользователя в db пользователей (работает 99% времени ...), а затем после создания пользователя до тех пор, пока не было никаких ошибок, затем создайте строку в таблице ролей и установите роли, основанные на пользователе .... Кажется простым, но даже если запросы работают в phpmyadmin и не вызывают проблемы, php-код терпит неудачу при каждом запуске ... пользователь создан ... и не может получить доступ к остальной части сайт, если я вручную добавить их в таблицу ролей ... Я уверен, что вы можете понять, почему я хочу, чтобы это происходит, когда пользователь создает логин ...
@ $query = "INSERT INTO users
(
Username , Password , pwsecret , emailAddress , Fname , Lname , Joined_Date
)
VALUES
(
'$uName' , '$encoded', '$salt' , '$email' , '$firstName' , '$lastName', CURRENT_TIMESTAMP
)";
ini_set('display_errors', 'On');
if (!mysqli_query($db,$query)){
$error_message = "There was a problem when attempting to add you as a user, please try again and if the issue persists please contact the webadmin.";
//clear vars for reuse::
$_POST = array(); //should stop data from persisting.
$uName = "";
$pw1 = "";
$pw2 = "";
$encoded = "";
$email = "";
$firstName = "";
$lastName = "";
include("partial/user/_register.php");
exit(); //jic something goes wrong we do not want to have the script resume.
}else{
//the following should add a newly generated user to the roles table.
$select="(SELECT userID FROM users WHERE Username = $uName)"; //sub query to return a user ID
$insert="INSERT INTO roles (userID , isAdmin , isMod , isFormerStaff , isUser , isBanned) VALUES ((SELECT userID FROM users WHERE Username = $uName;) , 0 , 0 , 0 , 1 , 0);"; //insert query to add user to roles table
//I tested this code in mysql phpmyAdmin and it worked with out error...
if (!mysqli_query($db,$insert)){
echo "User role not created - please add user manually.";
}
Во втором запросе есть select в поле userID, это было сделано, так как мне нужно, чтобы получить идентификатор пользователя последнего человека для регистрации. Помните также, что это выполняется сразу после создания пользователя, и предположим, что таблицы чисты.
Любая помощь вы, ребята, можете показать или источник этот вопрос будет весьма признателен .... Я знаю его, вероятно, то, что я пропустил ... но я не могу видеть это ..
Джесси Fender
В нескольких местах, 'Username = $ uName;' <- удалить ползунки и поместить кавычки вокруг '$ uName', если это не число. Кроме того, вы очень восприимчивы к SQL-инъекции. См. Http://stackoverflow.com/q/60174/2191572 и удачи – MonkeyZeus
Вы широко открыты для SQL-инъекций. Поскольку вы используете mysqli, воспользуйтесь [подготовленными утверждениями] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и [bind_param] (http://php.net/ ручной/EN/MySQLi-stmt.bind-param.php). – aynber
Вместо выполнения инструкции select-inside-the-insert вы можете [получить идентификатор insert] (http://php.net/manual/en/mysqli.insert-id.php) вашего первого запроса на вставку. – aynber