否则如果不能在 PHP 上正常运行


Else If Does Not Run Correctly on PHP

我有非常简单的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
?>

好吧,你的代码有很多问题:

  1. $_SESSION[KODE] .您是否定义了一个名为 KODE 的常量?如果没有,那么您可能需要将其放在引号中,即 $_SESSION['KODE'] .

  2. 与前一个相关,在内插数组项时,您需要将其括在大括号中:

    $sql = "... WHERE `unik_id` = '{$_SESSION['KODE']}'";
    
  3. 然后是Javascript...您应该使用重定向:

    header('Location: /menang.php');
    die;
    
  4. 如果不打算使用它,为什么要创建 $data_update 变量?

  5. mysql_*扩展已弃用(它已被更新更好的扩展所取代(。

  6. 你有很多变量没有在任何地方定义。此文件是否包含在其他文件中?

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();
}