为什么mysql插入一个新行而不是更新它


Why is mysql inserting a new row instead of updating it?

我的代码应该检查数据库,看看custID是否存在,如果存在,更新信息。如果没有,则需要将客户信息添加到数据库中。

目前,当我使用我现有的代码时,每次在网站上下单时,都会向数据库中添加一个新的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);
}

session_start应该在if子句之前调用。

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");

只要您正确创建了会话并在上一页上设置了fname会话变量,这将继续您的会话。

如果您正确地设置了值,并将If子句更改为上面的子句,那么它应该可以工作。

你能试试这个吗,把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);
        }   

?>