我有非常简单的PHP脚本,但它让我感到困惑。这是我的脚本
<?php
for($j=0; $j < $muter; $j++)
{
if(($_SESSION[KODE]) == ($acak[$j]))
{
$sql_update = "UPDATE unik SET kota = '$kota',
hadiah = '$hadiah',
nama = '$nama',
email = '$email',
status = 'menang'
WHERE unik_id = '$_SESSION[KODE]'";
$data_update = mysql_query($sql_update);
echo "<script>window.location='menang.php';</script>";
}//end if
else
{
$sql_update = "UPDATE unik SET kota = '$kota',
nama = '$nama',
email = '$email',
status = 'kalah'
WHERE unik_id = '$_SESSION[KODE]'";
$data_update = mysql_query($sql_update);
echo "<script>window.location='kalah.php';</script>";
}//end of else if
}//end for
?>
问题是:如果我评论这个脚本,代码运行良好
echo "<script>
window.location='kalah.php';
</script>";
但是,如果不要评论JS窗口.location,脚本总是转到else部分(永远不要转到第一个条件(。 而我需要JS窗口.位置脚本。
我该如何解决这个问题?
我非常感谢你的回答。
谢谢
您正在使用循环进行重定向。这是完全错误的。因为有些时间if
执行,有些时间else
执行。所以浏览器感到困惑。
因此,您必须在循环结束时重定向到任何特定页面。
尝试运行此代码,它将显示您将处于 if/else 条件的次数,在此基础上,您可以在循环完成后添加重定向逻辑。
<?php
for($j=0; $j < $muter; $j++)
{
if($_SESSION['KODE'] == $acak[$j])
{
$sql_update = "UPDATE unik SET kota = '$kota',
hadiah = '$hadiah',
nama = '$nama',
email = '$email',
status = 'menang'
WHERE unik_id = '$_SESSION[KODE]'";
$data_update = mysql_query($sql_update);
echo "Inside if <br>";
}//end if
else
{
$sql_update = "UPDATE unik SET kota = '$kota',
nama = '$nama',
email = '$email',
status = 'kalah'
WHERE unik_id = '$_SESSION[KODE]'";
$data_update = mysql_query($sql_update);
echo "Inside else <br>";
}//end of else if
}//end for
?>
非常奇怪的尝试。基本上,您正在循环浏览某些内容并检查循环中的条件。但无论如何,你回显一个window.location change javascript。所以这是每次迭代都会输出的。这似乎不对。
最后,您应该获得零或多个javascript位置更改,这至少可以说是一个非常奇怪的解决方案。
您的问题就在这里WHERE unik_id = '$_SESSION[KODE]'";
您需要访问 $_SESSION 值作为WHERE unik_id = '$_SESSION['KODE']'";
<?php
for($j=0; $j < $muter; $j++)
{
if(($_SESSION['KODE']) == ($acak[$j]))
{
$sql_update = "UPDATE unik SET kota = '$kota', hadiah = '$hadiah',
nama = '$nama',
email = '$email',
status = 'menang'
WHERE unik_id = '$_SESSION['KODE']'";
$data_update = mysql_query($sql_update);
echo "<script>
window.location='menang.php';
</script>";
}//end if
else
{
$sql_update = "UPDATE unik SET kota = '$kota',
nama = '$nama',
email = '$email',
status = 'kalah'
WHERE unik_id = '$_SESSION['KODE']'";
$data_update = mysql_query($sql_update);
echo "<script>
window.location='kalah.php';
</script>";
}//end of else if
}//end for
?>
好吧,你的代码有很多问题:
-
$_SESSION[KODE]
.您是否定义了一个名为KODE
的常量?如果没有,那么您可能需要将其放在引号中,即$_SESSION['KODE']
. -
与前一个相关,在内插数组项时,您需要将其括在大括号中:
$sql = "... WHERE `unik_id` = '{$_SESSION['KODE']}'";
-
然后是Javascript...您应该使用重定向:
header('Location: /menang.php'); die;
-
如果不打算使用它,为什么要创建
$data_update
变量? -
mysql_*
扩展已弃用(它已被更新更好的扩展所取代(。 -
你有很多变量没有在任何地方定义。此文件是否包含在其他文件中?
3 个原因可能无法正确重定向
1(在header("Location: ")
语句之后,您应该立即输入die();
否则PHP将继续执行。例如:
header("Location: kalah.php");
die();
2(您不得向屏幕输出任何内容(例如,echo
语句(,否则它不会重定向。你可以看看ob_start((
3(最后,您可能没有到达代码中的正确位置。伊格纳西奥·奥坎波(Ignacio Ocampo(在上面有一些很好的建议。在其中放置一些带有die('here')
语句的调试代码,以确保您最终到达您认为应该在的位置。
最后,确保你有 php 的顶部
if (!isset($_SESSION)){
session_start();
}