2013-12-09 3 views
0

Мой код должен проверять базу данных, чтобы узнать, существует ли custID, и если да, то для обновления информации. Это не так, нужно добавить информацию о клиенте в базу данных.Почему mysql вставляет новую строку вместо ее обновления?

В настоящее время, когда я использую код, который у меня есть, каждый раз, когда на сайте создается заказ, в базу данных добавляется новый custID.

Эти ошибки происходят:

  • Когда новый клиент заказывает, новая строка вставляется. Ни одна из информации из полей не помещается в базу данных, а только пустую строку.
  • Когда возвращающиеся заказы клиентов, их информация берется из базы данных на предыдущей странице, но на этой странице она вставляет новую строку, а новые поля остаются пустыми.

Если этого недостаточно, или ясен, я с радостью предложим больше кода и объяснений.

//The information is passed through a session object from a previous page. 

if (ISSET($_SESSION['fname'])) { 
session_start(); 
$email = $_SESSION['email']; 
$fname = $_SESSION['fname']; 
$lname = $_SESSION['lname']; 
$street = $_SESSION['street']; 
$city = $_SESSION['city']; 
$state = $_SESSION['state']; 
$zip = $_SESSION['zip']; 
$safeID = $_SESSION['safeID']; 
$custID = $safeID/507921; 
} 
include_once("Connection.php"); 
include_once("header.html"); 

//check if customer is already in database 

$sql = "SELECT * 
     FROM bookcustomers 
     where custID = '$custID'"; 

$result = mysqli_query($link, $sql) 
    or die('SQL syntax error: ' . mysqli_error($link)); 

if (mysqli_num_rows($result) > 0) { 
$sql = "UPDATE bookcustomers 
     set fname = '$fname', 
      lname = '$lname', 
      email = '$email', 
      street = '$street', 
      city = '$city', 
      state = '$state', 
      zip = '$zip' 
     WHERE custID = '$custID'"; 


$result = mysqli_query($link, $sql) 
    or die('SQL syntax error: ' . mysqli_error($link)); 
} 
else { 
    $sql = "INSERT into bookcustomers (fname, 
      lname, 
      email, 
      street, 
      city, 
      state, 
      zip) 
      VALUES ('$fname', 
      '$lname', 
      '$email', 
      '$street', 
      '$city', 
      '$state', 
      '$zip')"; 

    $result = mysqli_query($link, $sql) 
    or die('SQL syntax error: ' . mysqli_error($link)); 

    $custID = mysqli_insert_id($link); 
} 
+0

затем эхо mysqli_num_rows ($ result) и проверьте, что он возвращает – gvgvgvijayan

+0

Это делает это *. Отредактировано для удобства. – McGinger

+1

Это не так, если запрос SELECT не возвращает строк. Похоже, вы предполагаете, что код идет по определенному пути. Проверьте свои предположения. – duffymo

ответ

0

session_start следует назвать, прежде чем ваш, если п.

session_start() создает сеанс или возобновляет текущий на основе идентификатора сеанса, переданного через запрос GET или POST, или передается через файл cookie.

Если вы измените верх, если в вашем файл PHP

session_start(); 

if (ISSET($_SESSION['fname'])) { 
    $email = $_SESSION['email']; 
    $fname = $_SESSION['fname']; 
    $lname = $_SESSION['lname']; 
    $street = $_SESSION['street']; 
    $city = $_SESSION['city']; 
    $state = $_SESSION['state']; 
    $zip = $_SESSION['zip']; 
    $safeID = $_SESSION['safeID']; 
    $custID = $safeID/507921; 
} 
include_once("Connection.php"); 
include_once("header.html"); 

Это возобновит свою сессию, до тех пор, как вы создали сессию правильно и установить переменный имя_файл сеанс на предыдущей странице.

Если вы правильно установили значения и изменили предложение if выше, оно должно работать.

+0

Это была большая ошибка, но я не должен правильно устанавливать значения. Это не решило мою проблему, если вставить новую строку. – McGinger

+0

@McGinger Это, вероятно, означает, что ваша переменная сеанса не установлена. Если ваша переменная сеанса не установлена, ваш выбор возвращает 0 результатов, и именно поэтому он вставляет вместо нее обновление. Проверьте предыдущую страницу, на которой вы устанавливаете переменные сеанса, и не забудьте указать session_start в верхней части страницы перед любым выходом в браузер. –

+0

Так оно и было. Я предположил, что могу начать сеанс на текущей странице, но установить переменные сеанса на предыдущей странице. 3 AM кодирование ... Спасибо! – McGinger

0

Вы можете попробовать это, переехал session_start(); вершины if (ISSET($_SESSION['fname'])) {.

<?php 
    session_start(); 
    if (ISSET($_SESSION['fname'])) { 

    $email = $_SESSION['email']; 
    $fname = $_SESSION['fname']; 
    $lname = $_SESSION['lname']; 
    $street = $_SESSION['street']; 
    $city = $_SESSION['city']; 
    $state = $_SESSION['state']; 
    $zip = $_SESSION['zip']; 
    $safeID = $_SESSION['safeID']; 
    $custID = $safeID/507921; 
    } 
    include_once("Connection.php"); 
    include_once("header.html"); 

     //check if customer is already in database 

     $sql = "SELECT * 
       FROM bookcustomers 
       where custID = '$custID'"; 

     $result = mysqli_query($link, $sql) 
      or die('SQL syntax error: ' . mysqli_error($link)); 

     if (mysqli_num_rows($result) > 0) { 
     $sql = "UPDATE bookcustomers 
       set fname = '$fname', 
        lname = '$lname', 
        email = '$email', 
        street = '$street', 
        city = '$city', 
        state = '$state', 
        zip = '$zip' 
       WHERE custID = '$custID'"; 


     $result = mysqli_query($link, $sql) 
      or die('SQL syntax error: ' . mysqli_error($link)); 
     } 
     else { 
      $sql = "INSERT into bookcustomers (fname, 
        lname, 
        email, 
        street, 
        city, 
        state, 
        zip) 
        VALUES ('$fname', 
        '$lname', 
        '$email', 
        '$street', 
        '$city', 
        '$state', 
        '$zip')"; 

      $result = mysqli_query($link, $sql) 
      or die('SQL syntax error: ' . mysqli_error($link)); 

      $custID = mysqli_insert_id($link); 
     } 



?> 
+0

Я попытался это сделать, я начал получать ошибки о некорректных целых числах для custID в строке 1 – McGinger

+0

А, у меня действительно начался сеанс. – McGinger

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