如果存在变量则更新否则回显错误消息?

时间:2013-09-01 02:05:57

标签: php mysql

如果我发现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');
}
?>

这是高中的内部网站。

3 个答案:

答案 0 :(得分: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,这样您就可以使用参数化查询而不是连接字符串,因此您不必担心转义它们。

答案 1 :(得分: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命令,然后您将立即重定向,或者在“...输出后无法发送标题...”的行中收到错误消息/ p>

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

答案 2 :(得分:0)

检查查询返回的行数,如果大于1,然后数据库中存在fnamelname,您也可以使用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
  }

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