【问题标题】:PHP Script Unknown ErrorPHP 脚本未知错误
【发布时间】:2015-05-12 16:54:12
【问题描述】:

我有一个用户在其中输入数据的注册表单。然后将其发布到同一页面并检查空字段后,将变量放入$_SESSION数组中,然后将用户定向到另一个表单输入表中的另一组数据。
发布这些变量后,从$_SESSION 中提取上一页中的变量,并检查新值是否为空条目。在 for 循环中检查它们后,php 脚本神秘地停止(die("<h1> GOT HERE! </h1>") 不再出现在屏幕上)并且页面继续加载。等待一段时间后,页面会自行重新加载。
我一直在使用die() 来查找错误,但它只是不会在 for 循环和 if 语句之间回显,并且没有明显的理由不应该这样做。这里看看:

    <?php
     session_start();
    function sanitize($data) {
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;
    } 
    if($_SESSION["registering"] != 1){
    die("This page is to be used only when registering. <a href=\"tmcgb.com\">Go to home</a> page and select the seminar you want and click Register");
    }else if($_SESSION["registered"] == 1){
    die("You have already registered. Thank you. You can no longer access this page. To view your registration report, <a href=\"registration_report.php\"> click here. </a>");

    }else{

    $id = sanitize($_SESSION["id"]);
    $attendees = sanitize($_SESSION["attendees"]);
    $ref_code = sanitize($_SESSION["Ref_Code"]);
    $email = sanitize($_SESSION["email"]);
    $prefix = sanitize($_SESSION["prefix"]);
    $first_name = sanitize($_SESSION["first_name"]);
    $last_name = sanitize($_SESSION["last_name"]);
    $company = sanitize($_SESSION["company"]);
    $address1 = sanitize($_SESSION["address1"]);
    $address2 = sanitize($_SESSION["address2"]);
    $user_city = sanitize($_SESSION["city"]);
    $phone = sanitize($_SESSION["phone"]);
    $responsibility = sanitize($_SESSION["responsibility"]);
    $who_referred = sanitize($_SESSION["who-referred"]);
    $role = sanitize($_SESSION["role"]);

    $server = "MYREAL_DATABASE_SERVER";
    $username = "CORRECT_USERNAME";
    $password = "CORRECT_PASSWORD";
    $dbname = "DB_NAME";

    $conn = new mysqli($server, $username, $password, $dbname);

    $query = "
        SELECT *
        FROM Seminar_Detail
        WHERE Detail_id = '". $id ."'
    ";

    $result = $conn->query($query);
    if($result->num_rows == 0 ){
      header("Location: ManagementSeminars.php");
    }

    $seminar = $result->fetch_assoc();
    $name = $seminar["Seminar_Name"];
    $city = $seminar["City"];
    $from = $seminar["From"];
    $to = $seminar["To"];
    $fee = '';

    $query = "SELECT Value FROM Fee WHERE Seminar_Name = '". $name ."' AND Currency = 'GBP'";
    $result = $conn->query($query);
    if($result->num_rows > 0){
        $row = $result->fetch_assoc();
        $fee = $row["Value"];
    }


    if($_SERVER["REQUEST_METHOD"] == "POST"){
        $terminate = 0;
        for($i = 1; i < ($attendees + 1); $i++){
            if(isset($_POST["prefix-".$i]) && isset($_POST["first_name-".$i]) && isset($_POST["last_name-".$i]) && isset($_POST["position-".$i])){
                $terminate = 0;
            }else{
                $terminate = 1;
            }
        }
        die("<h1>".$terminate."</h1>");
            if($terminate != 1){
                $server = "SERVER";
                $username = "USERNAME";
                $password = "PASSWORD";
                $dbname = "DBNAME";

                $conn = new mysqli($server, $username, $password, $dbname);
                $query = "
                INSERT INTO Registry (Seminar_Name, Number_Attendees, Email, Prefix, First_Name, Last_Name, Company, `Address 1`, `Address 2`, City, Phone, Responsibility, Role, Who_Referred, Ref_Code)
                VALUES ('". $name ."', '". $attendees ."', '".$email."', '".$prefix."', '".$first_name."', '".$last_name."', '".$company."', '".$address1."', '".$address2."', '".$user_city."', '".$phone."', '".$responsibility."', '".$role."', '".$who_referred."', '".$ref_code."')
                ";
                $conn->query($query);

                //ignore this part please
                /*$query = "SELECT Registry_ID FROM Registry WHERE Ref_Code = '". $_SESSION["Ref_Code"] ."'";
                $result = $conn->query($query);
                $row = $result->fetch_assoc();
                $registry_id = $row["Registry_ID"];
                $attendee_first_name = "";
                $attendee_last_name = "";
                $attendee_position = "";

                $stmt = $conn->prepare("
                INSERT INTO Attendee (First_Name, Last_Name, Position, Registry_ID)
                Values (?, ?, ?, ?)
                ");
                $stmt->bindParam("ssss", $attendee_first_name, $attendee_last_name, $attendee_position, $registry_id);
                for($i = 1; $i < $_SESSION["attendees"] + 1; $i++){
                    $attendee_first_name = sanitize($_POST["first_name-".$i]);
                    $attendee_last_name = sanitize($_POST["last_name-".$i]);
                    $attendee_position = sanitize($_POST["position-".$i]);
                    $stmt->execute();
                }*/
            }else{
                $errorMessage = "<div class='alert alert-danger alert-dismissable'>
                    <strong>Oops!</strong> You have not entered all values.
                </div>";
            }

    }
}
?>

我很肯定这不是语法错误。任何帮助表示赞赏!

【问题讨论】:

  • 您没有错误检查您的查询。
  • 你为什么连接不止一次?
  • @JayBlanchard 是正确的。在您的页面上添加一些错误报告,以便您得到真正的错误。
  • 这通常会导致错误,脚本甚至没有到达那个部分。
  • 哎呀,我得去找拉尔夫了。我自己有点饿了。 编辑的一部分不能用于“句柄”,这太糟糕了,因为有些人需要改变他们的@Fred-ii-

标签: php if-statement post for-loop


【解决方案1】:

问题可能出在这一行

for($i = 1; i < ($attendees + 1); $i++){

您错过了$ 登录i。应该是:

for($i = 1; $i < ($attendees + 1); $i++){

使用过error reporting,会发出undefined constant i 通知。

error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应该只在暂存阶段完成,而不是在生产阶段。

【讨论】:

  • 啊,error reporting 会发出 undefined constant i 通知,如果他们一开始就使用它的话 ;-)
  • 错误报告没有显示这个是有原因的吗?我把它设置为 E_ALL
  • @Brainiac 你需要显示它们error_reporting(E_ALL); ini_set('display_errors', 1);
  • 是的,原来是这样。非常感谢。花了太多时间。但我不明白 die() 语句在循环中是如何工作的。我猜这个循环会无限迭代?
  • 还有@Fred-ii- 感谢ini_set 的事情。我相信我会经常使用它。
猜你喜欢
  • 2014-04-02
  • 2011-05-13
  • 2018-11-24
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多