2016-07-15 7 views
2

Ich habe folgende Registrierung PHP-Skript. Ich möchte eine JSON-Antwort als {"Ergebnis": "Erfolg", "Nachricht": "123"}NULL-Wert in meiner JSON-Antwort erhalten.

zurückgeben, wobei 123 die ID des registrierten Benutzers ist. Ich möchte diese ID, damit der Benutzer zu einem späteren Zeitpunkt Daten an andere Tabellen senden kann.

Allerdings bekomme ich das.

{"result":"fail","message":null} 

Dies ist mein Skript.

<?php 
    session_start(); 
    require "init.php"; 
    header('Content-type: application/json'); 
    $id = $_POST['id']; 
    $email = $_POST['email']; 
    $user_name = $_POST['user_name']; 

    $user_pass = $_POST['user_pass']; 
    $passwordEncrypted = sha1($user_pass); 

    $confirmPass = $_POST['confirm_pass']; 
    $confPasswordEncrypted = sha1($confirmPass); 

    $msg = "Congratulations. You are now registered to the most amazing app 
    ever!";    

     if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 

      $don = array('result' =>"fail","message"=>"Please enter a valid email"); 

     }  

if($email && $user_name && $user_pass && $confirmPass && filter_var($email, FILTER_VALIDATE_EMAIL)){ 


    $sql_query = "select * from user_info WHERE email ='".mysqli_real_escape_string($con, $email)."' or user_name 
    ='".mysqli_real_escape_string($con, $user_name)."'"; 

    $result = mysqli_query($con, $sql_query); 

    $results = mysqli_num_rows($result); 

    if ($results){ 
     $don = array('result' =>"fail","message"=>"Email or username exists."); 

    }else{ 
     //This is where I am trying to get the id 
     while($row = mysqli_fetch_array($result)) {    
      $posts['id'] = $row['id']; 


     } 

     $sql_query = "insert into user_info values('$id','$email','$user_name','$passwordEncrypted','$confPasswordEncrypted');"; 

     if(mysqli_query($con,$sql_query)){ 
      $_SESSION['id'] = mysqli_insert_id($con); 
      //And this is the json response I was talking about 
      $don = array('result' =>"success","message"=>$posts['id']); 
      mail($email,"Well done. You are registered to my sample app!",$msg); 

     } 
    } 
}else if(!$email){ 


     $don = array('result' =>"fail","message"=>"Please enter a valid email");    


    }else if(!$user_name){ 

     $don = array('result' =>"fail","message"=>"Please enter your username"); 

    }else if(!$user_pass){ 

     $don = array('result' =>"fail","message"=>"Please enter a password"); 

    }else if(!confirmPass){ 

     $don = array('result' =>"fail","message"=>"Please confirm your  
     password"); 

    }  

    echo json_encode($don); 

?> 
+0

Könnte der downvoter bitte einen Kommentar abgeben. – Oli

Antwort

5

ändern

$don = array('result' =>"success","message"=>$posts['id']); 

zu

$don = array('result' =>"success","message"=>$_SESSION['id']); 

$ posts [ 'id'] ist immer null, wie die Zeile in die Datenbank nicht eingefügt wird. Entfernen Sie diesen Code.

+0

danke dafür. Es funktioniert :) – Theo

1

ändern

$don = array('result' =>"success","message"=>$posts['id']); 

An:

$don = array('result' =>"success","message"=>mysqli_insert_id($con)); 

Das Problem ist, dass Sie $posts['id'] sich beziehen, welche immer null Sie versuchen, es zu setzen hier:

$results = mysqli_num_rows($result); 
if ($results){ 
    $don = array('result' =>"fail","message"=>"Email or username exists."); 

}else{ 
    while($row = mysqli_fetch_array($result)) { 
     $posts['id'] = $row['id']; 
    } 
... 

Beachten Sie, dass wir nur while erreichen, wenn $result keine Zeile enthält. Daher ist mysqli_fetch_array($result) falsch und diese Schleife wird nie ausgeführt. Tatsächlich ist diese Schleife in diesem Skript nutzlos und sollte entfernt werden.

Dies geht über den Rahmen Ihrer Frage, aber man sollte über die folgenden denken: der Punkt der $confirmPass

  1. Was ist? Sie überprüfen nie, ob Passwort und Bestätigung erfolgreich sind.
  2. Vorausgesetzt, dass die beiden gleich sein sollten, warum speichern Sie beide Passwort und bestätigen pass?
  3. Sie sollten keine benutzerdefinierten Werte in SQL-Abfragen verwenden, ohne sie zu umgehen, oder sogar besser, ohne vorbereitete Anweisungen zu verwenden. Ihre SELECT Abfrage entkommt zumindest Werte, aber Ihre INSERT Abfrage nicht. Das macht Sie anfällig für SQL-Injection-Angriffe.
  4. sha1($user_pass) ist keine gute Möglichkeit, eine Pwd für den Speicher zu hash. Verwenden Sie stattdessen die Funktionen password_hash und password_verify von PHP. See the guide
-1

Sie benötigen die folgenden Zeilen nicht, also entfernen Sie sie, da Sie sie vor der Select-Abfrage verwenden.

//This is where I am trying to get the id 
while($row = mysqli_fetch_array($result)) {    
    $posts['id'] = $row['id']; 

} 

Sie können auch

$don = array('result' =>"success","message" => $posts['id']); 

mit

$don = array('result' =>"success","message"=> mysqli_insert_id($con)); 

Keine Notwendigkeit der Sitzung ersetzen.

+0

Wenn Sie seinen Code überprüfen, holt er Zeilen, bevor Abfrage auswählen. Der Code ist nutzlos. – Deep