0

如果它发现 fname 和 lname 不存在,我怎么能把这个脚本放到哪里,它会弹出一条消息说他们从未登录过。

<?php
session_start();
include_once("connect.php");
date_default_timezone_set("America/Winnipeg");
$date = ("m-d-Y");
$timeout = date("g:i:s a");
if ("SELECT EXISTS(
        SELECT *
        FROM signin_out
        WHERE   
            lname='" . $_POST['lastname'] . "'
            AND fname='" . $_POST['firstname'] . "'  
            AND date='" . $date . "')"
) {
    mysql_query("
        UPDATE signin_out
            SET timeout='" . $timeout . "' 
        WHERE
            lname='" . $_POST['lastname'] . "'
            AND fname='" . $_POST['firstname'] . "'
            AND timeout=''
    ");
    header("Location: ../index.html");
} else {
    echo "<script type='text/javascript>'";
    echo "alert('<p>Oops! You never signed in!</p><br><p>Please contact a
                    Librarian</p>');'";
    echo "</script>'";
    header('Location: ../index.php?notsignedin');
}
?>

这是一个高中的内部网站。

4

3 回答 3

2
$sql = "SELECT COUNT(*) signedin FROM signin_out
        WHERE lname = '" . mysql_real_escape_string($_POST['lastname']) . "'
        AND fname = '" . mysql_real_escape_string($_POST['lastname']) . "'
        AND date = '$date'";
$result mysql_query($sql) or die(myqsl_error());
$row = mysql_fetch_assoc($result);
if ($row['signedin'])) {
    // update table
} else {
    // Report not signed in
}

但是,您确实应该切换到 mysqli 或 PDO,以便可以使用参数化查询而不是连接字符串,因此您不必担心转义它们。

于 2013-09-01T02:16:07.363 回答
0

这只是答案的一部分,@Barmar 告诉你如何处理查询本身。

改变

echo "<script type='text/javascript>'";
echo "alert('<p>Oops! You never signed in!</p><br><p>Please contact a
        Librarian</p>');'";
    echo "</script>'";
header('Location: ../index.php?notsignedin');

echo "<script type='text/javascript>'";
echo "alert('Oops!\nYou never signed in!\nPlease contact a
        Librarian');'";
echo "window.location.href='../index.php?notsignedin';";
echo "</script>'";

echo原因:在作为包发送到浏览器之前进入 Web 服务器缓冲区的字符串。
这可能会导致您的代码到达并执行header命令,然后您将立即重定向,或者在“...输出后无法发送标头...”行中收到错误消息

并认真考虑大家对 PDO/Mysqli 的建议,并使用更集中/抽象的方式来使用数据库。

于 2013-09-01T02:19:17.933 回答
0

检查查询返回了多少行,如果大于 1fname并且lname存在于数据库中,您也可以使用count(*)但我不会更改您的查询:

  $result = mysql_query("SELECT * FROM signin_out WHERE lname='".$_POST['lastname']."' AND fname='".$_POST['firstname']."' AND date='".$date);
  $num_rows = mysql_num_rows($result);//count number of rows returned by query
  if($num_rows >=1) { 

     //Update here

   }
  else {
    //alert and redirect here
  }

我了解您的网站仅供 Intranet 使用,但我建议使用PDOMysqli

于 2013-09-01T02:45:46.583 回答