2016-08-07 21 views
0

Hallo, ich hatte gehofft, könnte Licht teilen. Ich glaube, dass ich bisher Fortschritte gemacht habe. Ich habe eine Registrierung hier:Trouble Desinfektion Formular mit vorbereiteten Anweisung

Was ich tun wollte, ist meine Daten vor dem Senden der Datenbank saniert.

<?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

Oben ist der Fehler immer ist, wenn ich die Daten eintragen.

Haben versucht mit mysqli_real_escape_string UND mysqli->real_escape_string

Kann einige Ratschläge, wenn ich noch haben satiniertem müssen auch tho die Daten binden.


Auch in meiner Datenbank habe ich created_at Feld. siehe untenstehenden Code.

 $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 immer diese Fehlermeldung:

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

Ihre Hilfe geschätzt wird. Danke

+1

Sie haben 6 Fragezeichen, aber 7 Werte zum Einfügen. – steven

Antwort

0

Problem # 1, mysqli_real_escape_string erfordert eine Verbindung Verbindung, wenn prozedural verwendet. Sie müssen beim Binden nicht entkommen. Wenn Sie es wäre, zu entkommen waren:

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

oder

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

Ausgabe # 2, haben Sie 7 Spalten aufgelistet und 7 Werte versuchen, geschrieben werden, aber nur 6 Platzhalter und 6 String-Typen haben.

So aktualisieren:

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; 
     } 

Hinweis die Anzahl der ? s, sind die Platzhalter, und die Anzahl der s s im bind_param. Wenn der fehlende Wert eine Ganzzahl und keine Zeichenfolge ist, ändern Sie die letzte s in eine i oder einen anderen Datentyp.

+0

hallo chris85, Entschuldigung für die Antwort ... das funktioniert perfekt für mich, es war mein Fehler. Sie haben erwähnt, dass, während ich prozedurale bin ich brauche nicht zu entkommen, lässt es mich variabel oder? –

+0

Nein, der Fahrer kümmert sich darum, zu entkommen und zu zitieren. Du solltest nicht entkommen. – chris85

+0

oh brilliant. Danke für deinen Beitrag. Ich wollte einen großen Gefallen bitten. Ich tue es nicht, wenn kein Körper etwas dagegen hat. zwar habe ich stmt prozedur benutzt ... aber auf meiner login-seite habe ich irgendwie darauf gestanden wie ich den code vorbereite gemacht habe einfach auf registerseite gemacht habe. –