2016-08-07 2 views
0

Здравствуйте, я надеялся, что смогу поделиться светом. Я считаю, что прогресс до сих пор. У меня есть регистрация здесь:Тревожная дезинфицирующая форма с подготовленным заявлением

Что я хотел сделать, это дезинфицировать мои данные перед отправкой базы данных.

<?php 


    session_start(); 
    if(is_file('include/connection.php')) 
    include_once('include/connection.php'); 
    else 
    exit('Database FILES MISSING:('); 


    if(isset($_POST['submit'])) { 
     $errors = array(); 
     $data = array(); 
     $name = mysqli_real_escape_string($_POST['name']); 
     $last_name = $_POST['last_name']; 
     $user_name = $_POST['user_name']; 
     $user_type = $_POST['user_type']; 
     $email = $_POST['email']; 
     $password = $_POST['password']; 
     $confirm_password = $_POST['confirm_password']; 
    // $created_at = $_POST['created_at']; 
     $password_hash = password_hash($password, PASSWORD_DEFAULT);  

     //$created_at = date('Y-m-d'); 
     if(!($stmt = $mysqli->prepare("INSERT INTO user (name, last_name, user_name, user_type, email, password) 
      VALUES (?,?,?,?,?,?)"))){ 
      echo "Prepare failed: (" . $mysqli->errno . ")" . $mysqli->error; 
     } 

     if(!$stmt->bind_param('ssssss', $name, $last_name, $user_name, $user_type, $email, $password_hash)){ 
     echo "Binding paramaters failed:(" . $stmt->errno . ")" . $stmt->error; 
     } 

     if(!$stmt->execute()){ 
     echo "Execute failed: (" . $stmt->errno .")" . $stmt->error; 
     } 

     if($stmt) { 
      $_SESSION['main_notice'] = "Successfully registered, login here!"; 
      header('Location: index.php'); 

     } 
     else{ 
      echo "Registration failed"; 
     } 

    } 

    $mysqli->close(); 

    ?> 

Execute failed: (1048)Column 'name' cannot be null

Выше ошибка я получаю, когда я отправить данные.

Пытались с помощью mysqli_real_escape_string И mysqli->real_escape_string

Может кто-нибудь совет, если я все еще нужно satinized даже то есть привязки данных.


Также в моей базе данных у меня есть поле created_at. см. ниже код.

 $created_at = $_POST['created_at']; 
     $password_hash = password_hash($password, PASSWORD_DEFAULT);  

     $created_at = date('Y-m-d'); 
     if(!($stmt = $mysqli->prepare("INSERT INTO user (name, last_name, user_name, user_type, email, password, created_at) 
      VALUES (?,?,?,?,?,?)"))){ 
      echo "Prepare failed: (" . $mysqli->errno . ")" . $mysqli->error; 
     } 

     if(!$stmt->bind_param('ssssss', $name, $last_name, $user_name, $user_type, $email, $password_hash, $created_at)){ 
     echo "Binding paramaters failed:(" . $stmt->errno . ")" . $stmt->error; 
     } 

Am получаю эту ошибку:

Prepare failed: (1136)Column count doesn't match value count at row 1 Fatal error: Call to a member function bind_param() on a non-object in /home/olami560/public_html/project/allocation/progress/register.php on line 30

Ваша помощь будет оценена. спасибо

+1

У вас есть 6 вопросительных знаков, но 7 значений для вставки. – steven

ответ

0

Проблема № 1, mysqli_real_escape_string требует использования соединения при использовании процедурно. При привязке вам не нужно бежать. Если бы вы были бежать было бы:

$name = mysqli_real_escape_string($mysqli, $_POST['name']); 

или

$name = $mysqli->real_escape_string($_POST['name']); 

Выпуск № 2, у вас есть 7 столбцов в списке и 7 значений, пытаясь записать, но только 6 заполнителей и 6 типов строк.

Так обновиться до:

if(!($stmt = $mysqli->prepare("INSERT INTO user (name, last_name, user_name, user_type, email, password, created_at) 
      VALUES (?,?,?,?,?,?,?)"))){ 
      echo "Prepare failed: (" . $mysqli->errno . ")" . $mysqli->error; 
     } 

     if(!$stmt->bind_param('sssssss', $name, $last_name, $user_name, $user_type, $email, $password_hash, $created_at)){ 
     echo "Binding paramaters failed:(" . $stmt->errno . ")" . $stmt->error; 
     } 

Примечание число ? с, те, заполнители, и число s с в bind_param. Если отсутствующее значение является целым числом, а не строка, измените последний s на i или любой другой тип данных.

+0

привет Крис85, извините за ответ ... это отлично работает для меня, это была моя ошибка. вы упомянули, что, хотя я использую процедурные, мне не нужно бежать, это оставляет меня переменным или ?? –

+0

Нет, драйвер обрабатывает экранирование и цитирование. Вы не должны убегать. – chris85

+0

oh блестящий. спасибо за ваш вклад. Я хотел попросить большую услугу. я не хочу, если нет тела. хотя я использовал stmt процедурный ... но на моей странице входа i вид застрял на том, как я собираюсь сделать готовый код, только что сделанный на странице регистрации. –

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