2016-07-15 39 views
2

我有以下注册php脚本。我想要得到一个json响应 {“result”:“success”,“message”:“123”}在我的json响应中获得null值。

其中123是注册用户的id。我想要这个ID,以便稍后用户可以将数据发布到其他表。

但是我明白了。

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

这是我的脚本。

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

请问downvoter请注意评论。 – Oli

回答

5

变化

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

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

$帖[ '身份证']总是空的行不插入到数据库中。删除该代码。

+0

谢谢你。它正在工作:) – Theo

1

变化

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

要:

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

的问题是,你指的$posts['id']这始终是null您尝试在这里设置:

​​

请注意,如果$result不包含任何行,我们只能达到while。因此,mysqli_fetch_array($result)是错误的,并且此循环从不执行。事实上,这个循环在这个脚本中是无用的,应该被删除。

这超出了你的问题的范围,但你应该考虑以下几点:

  1. 什么的$confirmPass点?你永远不会检查密码和确认通过匹配。
  2. 鉴于两者应该相同,您为什么要存储密码和确认密码?
  3. 不应该在SQL查询中使用用户提供的值而不用转义它们,或者甚至更好,不使用预处理语句。您的SELECT查询至少会转义值,但您的INSERT查询不会。这让您打开SQL注入攻击。
  4. sha1($user_pass)不是散列pwd存储的好方法。改用PHP的password_hashpassword_verify函数。 See the guide
-1

您不需要以下行,因此请删除它们,因为您在选择查询之前使用它们。

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

} 

您可以

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

更换

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

无需会议的为好。

+0

如果您要检查他的代码,他在选择查询之前提取行。该代码是没用的。 – Deep