否则如果在PHP上无法正常运行

时间:2013-12-17 06:38:38

标签: 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 window.location脚本总是转到else部分(永远不会转到第一个条件)。而我需要JS window.location脚本。

我该如何解决这个问题?

我非常感谢你的回答。

由于

5 个答案:

答案 0 :(得分:1)

您正在使用循环进行重定向。这是完全错误的。因为执行了一段时间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
?>

答案 1 :(得分:0)

您的问题在WHERE unik_id = '$_SESSION[KODE]'";,您需要{$ 1}}访问$ _SESSION值

WHERE unik_id = '$_SESSION['KODE']'";

答案 2 :(得分:0)

非常奇怪的尝试。基本上你在循环中循环并检查循环中的条件。但无论如何你回应一个window.location改变javascript。所以每次迭代都会输出。这看起来不对。

最后,您应该获得零个或多个javascript位置更改,这至少可以说是一个非常奇怪的解决方案。

答案 3 :(得分:0)

嗯,你的代码有很多问题:

  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. 您有很多未在任何地方定义的变量。这个文件是否包含在其他文件中?

答案 4 :(得分:0)

您可能无法正确重定向有三个原因

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