2017-02-07 13 views
0

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

+2

В нескольких местах, 'Username = $ uName;' <- удалить ползунки и поместить кавычки вокруг '$ uName', если это не число. Кроме того, вы очень восприимчивы к SQL-инъекции. См. Http://stackoverflow.com/q/60174/2191572 и удачи – MonkeyZeus

+0

Вы широко открыты для SQL-инъекций. Поскольку вы используете mysqli, воспользуйтесь [подготовленными утверждениями] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и [bind_param] (http://php.net/ ручной/EN/MySQLi-stmt.bind-param.php). – aynber

+0

Вместо выполнения инструкции select-inside-the-insert вы можете [получить идентификатор insert] (http://php.net/manual/en/mysqli.insert-id.php) вашего первого запроса на вставку. – aynber

ответ

0

Джесси Fender,

Я видел, что вы должны написать оператор выбора ID, но его просто просто запрос в виде строки, вы не делает его формат запроса путем добавления mysql_query ($ выберите)

код будет отлично работать в mysql, coz есть нет необходимости использовать mysql_query, так как он действует как свой запрос, но с PHP вы должны преобразовать строку запрос, так оно действует как запрос ..

Попробуйте это:

$select="(SELECT userID FROM users WHERE Username = $uName)"; 
$lasid = mysqli_query($db,$select); 

//sub query to return a user ID 
$insert="INSERT INTO roles (userID , isAdmin , isMod , isFormerStaff , isUser , isBanned) VALUES ($lasid , 0 , 0 , 0 , 1 , 0);"; 
mysqli_query($db,$insert); 
if (!mysqli_query($db,$insert)){ 
    echo "User role not created - please add user manually."; 
} 
+1

'WHERE Username = $ uName' - если это (скорее всего) строка; он потерпит неудачу. –

 Смежные вопросы

  • Нет связанных вопросов^_^