1

私のメインページでは、誰かがサインインするときに、AJAXを使用してPHPファイルと「対話」するjQueryがあり、サインアウトするときも同じです。ただし、サインアウトすると、残りの時間でデータベースインデックスが更新されることになっています。姓のデータベースエントリが存在しない場合(つまり、サインインしなかった場合)、エラーが返されるはずです。代わりに、PHPファイルは、存在しないデータベースインデックスを更新していると言っています。私はこれを達成するためにIFステートメントを使用しています。そして、何らかの理由で、インデックスが存在すると考えています。書き込み先のデータベースを確認しましたが、更新するはずのインデックスが存在しません。

これが私のコードです:

if ($Type == 1)
{
$mysqli = new mysqli("localhost","----","----", "----");
if (!$mysqli)
    $Type = 3;


$Select = $mysqli->query("SELECT Time_Out FROM " . $Date . " WHERE Last_Name = '" . $LName . "'");
$Row = $Select->fetch_assoc();
$Row2 = $Row['Time_Out'];
if ($Row2 !== "-1") $Type = 4;


if ($Type == 1)
    {if ($mysqli->query("UPDATE " . $Date . " SET Time_Out='" . $Time . "' WHERE Last_Name='" . $LName . "'"))
        {}
     else
        {$Type = 5;}
    }

$Select = $mysqli->query("SELECT Time_In FROM " . $Date . " WHERE Last_Name='" . $LName . "'");
$Row = $Select->fetch_assoc();
$Row2 = $Row['Time_In'];
$Time2 = explode(":",$Row2);
$Hour2 =  $Hour - $Time2[0];

if ($mysqli->query("SELECT Hours FROM Names WHERE Last_Name='" . $LName . "'"))
    {$Select = $mysqli->query("SELECT Hours FROM Names WHERE Last_Name='" . $LName . "'");
     $Row = $Select->fetch_assoc();
     $Row3 = $Row['Hours'];
     $Auto += 1;}

$Time3 = 60-$Time2[1];
if ($Hour != 21) $Time4 = $Min;
$Time5 = $Time3+$Time4;
if ($Time2[0]+1 != $Hour)
    {$Time5 = $Time5+60;}
$Total = $Time5+intval($Row3);

if ($Type == 1)
{
if ($mysqli->query("UPDATE Names SET Hours = '" . $Total . "' WHERE Last_Name = '" . $LName . "'"))
    {$Auto += 1;}
else
    {$mysqli->query("INSERT INTO Names (Last_Name, First_Name, Hours) VALUES ('" . $LName . "', '" . $FName . "', '" . $Total . "')");}
}


$mysqli->close();
}

if ($Type == 1) echo "Thank you " . $FName . " " . $LName . " for signing out! See you next time!";
if ($Type == 2) echo "The entered Student ID# is invalid. Please try again!";
if ($Type == 3) echo "An unexpected error has occured. Please try again!";
if ($Type == 4) echo "You have already signed out today!" . $Auto;
if ($Type == 5) echo "You didn't sign in today.";
4

1 に答える 1

0

UPDATE sqlステートメントは、一致するものが見つからない場合でもtrueを返します(それでも正しく実行され、0行を更新するだけです)。

これを変える:

if ($Type == 1)
{if ($mysqli->query("UPDATE " . $Date . " SET Time_Out='" . $Time . "' WHERE Last_Name='" . $LName . "'"))
    {}
else
    {$Type = 5;}
}

これに:

if ($Type == 1) {
    if ($mysqli->query("SELECT * FROM " . $Date . " WHERE Last_Name='" . $LName . "'")->num_rows > 0)
        $mysqli->query("UPDATE " . $Date . " SET Time_Out='" . $Time . "' WHERE Last_Name='" . $LName . "'");
    else
        $Type = 5;
}

selectクエリを実行して、最初にレコードが存在するかどうかを判断し(結果のnum_rowsプロパティが> 0の場合)、それに基づいてレコードを更新するか、戻り値を5に設定します。

于 2013-02-08T01:14:07.897 に答える