首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP无序执行

PHP无序执行
EN

Stack Overflow用户
提问于 2015-08-10 20:14:37
回答 1查看 198关注 0票数 2

我正在编写一个PHP脚本,看起来我在执行无序的过程中遇到了问题。我有一个for循环,它检查表中是否存在记录,并在表后面插入。如果for循环找到了一个现有的记录,那么这个想法就是防止插入发生。但是,当我运行以下脚本时,我的insert语句似乎是在for循环期间或之前执行的,因为即使在应该停止执行的reservations中存在匹配的记录时,我仍然会将记录插入到reservedTickets中。处理这件事最好的方法是什么?

PHP:

代码语言:javascript
复制
for ($i=1; $i<=$_POST['numTickets']; $i++)
{
    $checkTID = $_POST["tid".$i];
    if (mysql_fetch_assoc(mysql_query("SELECT EXISTS(SELECT 1 FROM reservedTickets WHERE tid=".$checkTID.") AS 'exists';"))['exists'] == 1)
    {
        header("Location: http://10.12.76.201/reservations/");
    }
}

mysql_query("INSERT INTO reservations (aid, approval) VALUES (".$_POST['aid'].", 0);");
$reservationID = mysql_insert_id(); 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-10 20:24:32

执行是在循环之后进行的,因为单独调用header()函数不会停止执行。相反,它告诉PHP在请求完成时追加响应头,但不会阻止下面的任何代码运行。

您应该使用下列结构之一:

代码语言:javascript
复制
for ($i=1; $i<=$_POST['numTickets']; $i++)
{
    $checkTID = $_POST["tid".$i];
    if (mysql_fetch_assoc(mysql_query("SELECT EXISTS(SELECT 1 FROM reservedTickets WHERE tid=".$checkTID.") AS 'exists';"))['exists'] == 1)
    {
        header("Location: http://10.12.76.201/reservations/");
        exit;  // STOP script execution, and send the header
    }
}

代码语言:javascript
复制
$found = false;
for ($i=1; $i<=$_POST['numTickets']; $i++)
{
    $checkTID = $_POST["tid".$i];
    if (mysql_fetch_assoc(mysql_query("SELECT EXISTS(SELECT 1 FROM reservedTickets WHERE tid=".$checkTID.") AS 'exists';"))['exists'] == 1)
    {
        $found = true;
        break; // exit the for loop
    }
}

if (!$found) {
    mysql_query("INSERT INTO reservations (aid, approval) VALUES (".$_POST['aid'].", 0);");
    $reservationID = mysql_insert_id();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31928332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档