2014-10-23 3 views
1

У меня возникли некоторые проблемы с получением моей базы данных для вставки данных из формы в мою базу данных. Я получаю ошибку ENCAPSED STRING, но я не могу найти ошибку. Может ли кто-нибудь показать мне, где строка является ошибкой?Неисправность вставки данных в базу данных

$insert = "INSERT INTO `$user_table`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role "', '" .$logged_in ."', '" .$registered ."')"; 

не МЕНЯЕТ

$insert = "INSERT INTO '" .$user_table ."'(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role ."', '" .$logged_in ."', '" .$registered ."')"; 

Теперь я больше не получаю ошибку (спасибо всем), но данные не вводятся в базу данных, и я не получаю сообщение об ошибке , Вот полный скрипт.

if($_SERVER["REQUEST_METHOD"] == "POST"){ 
     $p_num = $_POST["p_number"]; 
     $first_name = $_POST["first_name"]; 
     $last_name = $_POST["last_name"]; 
     $email = $_POST["email"]; 
     $password = $_POST["pw"]; 
     $verify_password = $_POST["pw_verify"]; 
     $program = $_POST["program"]; 
     $role = $_POST["role"]; 
     $logged_in = 0; 
     $registered = 0; 

     $query = "SELECT * FROM `$user_table` WHERE `user_id` = '$p_num'"; 
     $result = mysqli_query($connect, $query); 
     while($row = mysqli_fetch_assoc($result)){ 
      $user_id = "{$row['user_id']}"; 

      if($user_id == $p_num){ 
       echo "User already exists."; 
      } 
      else{ 
       $registered = 1; 
       $insert = "INSERT INTO '" .$user_table ."'(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role ."', '" .$logged_in ."', '" .$registered ."')"; 
       $success = mysqli_query($connect, $insert); 
       if($success){ 
        echo "Done"; 
       } 
       else{ 
        echo "Error"; 
       } 
      } 
     } 
    } 
+0

«" $ p_num. "'Должен использоваться без кавычек, потому что это идентификатор пользователя – dyachenko

+0

$ user_table должен быть". $ User_table. " –

+0

На данный момент я просто пытаюсь заставить скрипт работать. –

ответ

-1

вы должны изменить это:

$insert = "INSERT INTO `$user_table`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role "', '" .$logged_in ."', '" .$registered ."')"; 

к этому:

$insert = "INSERT INTO `".$user_table."`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role "', '" .$logged_in ."', '" .$registered ."')"; 

, а также изменить:

'" .$p_num ."' 

для этого (удалить простые кавычки):

". $p_num ." 
0

Хорошо, как и другие ответы широко открыты для SQL инъекций, я бросить ответ в шляпу ... Попробуйте что-то вроде этого

$SQL = "INSERT INTO `".$user_table."`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES(?,?,?,?,?,?,?,?,?)"; 

$MySQLI = new mysqli($connect); 

$Statement = $MySQLI->prepare($SQL); 

$Statement->bind_param("sssssssss", $p_num, $first_name, $last_name, $password, $email, $program, $role, $logged_in, $registered); 

$Statement->execute(); 

printf("Error: %s.\n", $Statement->error); 
-1

Если у вас плохое время на написав ошибку SQL-запрос, просто используйте PHPmyadmin для вставки данных, затем скопируйте оператор SQL, сгенерированный phpmyadmin, затем отредактируйте значения с вашими переменными в ВАШЕМ php-файле.

0

Я сам это понял. По-видимому, в цикле while существовал конфликт, поскольку он был связан на основе инструкции SELECT. Вот решение.

$insert = "INSERT INTO `$user_table`(`user_id`, `first_name`, `last_name`, `password`, `email`, `program`, `role`, `logged_in`, `registered`) VALUES('" .$p_num ."', '" .$first_name ."', '" .$last_name ."', '" .$password ."', '" .$email ."', '" .$program ."', '" .$role ."', '" .$logged_in ."', '" .$registered ."')"; 
$success = mysqli_query($connect, $insert); 
if($success){ 
    $registered = 1; 
    mysqli_query($connect, "UPDATE `$user_table` SET `registered` = 1 WHERE `user_id` = '$p_num'"); 
    echo "Done"; 
} 
else{ 
    $registered = 0; 
    echo "This user already exists."; 
} 

И для записи, да, я понимаю, что это уязвимо для SQL инъекций, но это то, что до сих пор работает на (вопросы безопасности включены), он не живет, это не в производстве.

+0

Это почти то же самое, но мой оригинальный синтаксис правильный (как и ваш, я его протестировал), но, как я уже сказал, проблема была в том, что он был внутри цикла while. В вашем ответе не было ничего плохого, проблема заключалась в том, что я все еще включал ваш ответ в этот цикл. Не уверен, почему вы так проголосовали. –

+0

Да, я тоже смущен. Если вы найдете что-нибудь, дайте мне знать. –

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