2014-12-29 2 views
0

Я пытаюсь сделать регистрационную форму для моего сайта заданий, он должен проверить, указан ли указанный адрес электронной почты в базе данных, и если он не вставляет информацию, а затем возвращает идентификатор клиента , Если он находится внутри базы данных, он должен вернуть идентификатор клиента как «существует», который устанавливает сообщение об ошибке переднего конца. Проблема в том, что кажется, что вставлять информацию, прежде чем она проверяет, существует ли она или нет, и поэтому каждая новая запись возвращает «существует» вместо идентификатора пользователей. Мой PHP-код приведен ниже.PHP: запрос Myqli в запросе Mysqli

<?php 
$regemail = $_POST['regemail']; 
$regfirst = $_POST['regfirst']; 
$reglast = $_POST['reglast']; 
$regcontact = $_POST['regcontact']; 
$regline1 = $_POST['regline1']; 
$regline2 = $_POST['regline2']; 
$regline3 = $_POST['regline3']; 
$regcity = $_POST['regcity']; 
$regcounty = $_POST['regcounty']; 
$regpost = $_POST['regpost']; 
$regpass = $_POST['regpass']; 
$customernumber = ""; 

//Open a new connection to the MySQL server 
$mysqli = new mysqli('127.0.0.1','root','','u221062567_esl'); 
$results = $mysqli->query("SELECT * FROM customers WHERE `Email Address` = '$regemail'"); 
if($results ->num_rows > 0){ 
    $customernumber = "exists"; 
} 
else{ 
    $regpass = md5($regpass); 
    $insertrow = $mysqli->query("INSERT INTO customers(`Email Address`, Password, `First Name`, `Last Name`, `Contact Number`, `Address Line 1`, `Address Line 2`, `Address Line 3`, `City/Town`, County, `Post Code`)VALUES('$regemail', '$regpass', '$regfirst', '$reglast', '$regcontact', '$regline1', '$regline2', '$regline3', '$regcity', '$regcounty', '$regpost');"); 
    if($insertrow){ 
     $results2 = $mysqli->query("SELECT * FROM customers WHERE `Email Address` = '$regemail'"); 
      while($row2 = $results2->fetch_array()) { 
      $customernumber = $row2["Customer ID"]; 
      } 
    } 
    else{ 
    } 
} 
print json_encode($customernumber); 

//Output any connection error 
if ($mysqli->connect_error) { 
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error); 
} 

// close connection 
$mysqli->close(); 

?> 

Пожалуйста, помогите, поскольку я изо всех сил пытаюсь понять, почему его запуск скрипта происходит некорректно. Большое спасибо.

+2

Try фиксируя опечатку здесь: '$ Результаты -> num_rows' –

+1

На всякий случай вы не знаете, этот код *** очень опасен ***. Использование MySQLi не магически предотвращает SQL-инъекцию. Вам нужно использовать подготовленные заявления. Do ** не ** добавлять (пользовательские) переменные в ваши SQL-запросы. –

+0

* ... плюс, * MD5 может быть началом конца вашего сайта. * Shocking! * –

ответ

0

Вы должны использовать подготовленные заявления, чтобы избежать инъекции SQL, в любом случае попробуйте следующий код

function checkEmail($email){ 
    $stmt = $db->prepare("SELECT email from `customers` where email_address = ?"); 
    $stmt->bind_param('s', $email); 
    $stmt->execute(); 
    $stmt->store_result(); 
    if($stmt->num_rows < 1){ 
     return true; 
    } 
    return false; 
} 

function addCustomer($regemail, regfirst, reglast....){ 
    $stmt = $db->prepare("insert into `customers` (email_address, password, first_name, last_name...)" values(?,?,?,?...)); 
    $stmt->bind_param('ssss', $regemaail, $hash, $regfirst, $reglast....); 
    $stmt->execute(); 
    if($stmt->afffected_rows > 0){ 
     return $stmt->insert_id; 
    } 
    return false; 
} 

Затем вызовите функции

if(checkEmail($_POST['email'])){ 
    $customer_number = addCustomer($regemail,...);//this will give you id of the insert, you can do another query using this number I guess since I don't understand why you need it. 
    if($customer_number){ 
     //another query 
    } 

} 
else{ 
    //email exists 
} 
Смежные вопросы