2015-05-12 2 views
0

У меня есть регистрационная форма, в которую пользователь вводит данные. Затем после того, как он отправлен на ту же страницу и проверен на наличие пустых полей, переменные помещаются в массив $_SESSION, и пользователь перенаправляется в другую форму для ввода другого набора данных в таблицу.
После публикации этих переменных переменные из предыдущей страницы извлекаются из $_SESSION, а новые значения проверяются на нулевые записи. После того, как они проверены в цикле for, скрипт php загадочно останавливается (die("<h1> GOT HERE! </h1>") больше не отображается на экране), и страница продолжает загружаться. Подождав некоторое время, страница перезагрузится.
Я использовал die() какое-то время, чтобы найти ошибку, но она просто не отражается между инструкцией for-loop и if, и нет никаких очевидных причин, почему это не должно. Вот посмотрите:
Ошибка скрипта PHP Script

<?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>"; 
      } 

    } 
} 
?> 

Я уверен, что это не ошибка синтаксиса. Любая помощь приветствуется!

+1

Вы не проверяете ошибки в своих запросах. –

+0

Почему вы подключаетесь не один раз? –

+0

@JayBlanchard верен. поместите некоторые сообщения об ошибках на свою страницу, чтобы получить реальную ошибку. –

ответ

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 

Sidenote: Сообщения об ошибках не должно быть сделано только в постановке, и никогда производства.

+2

ах, [сообщение об ошибках] (http://php.net/manual/en/function.error-reporting.php) сигнализировали бы об уведомлении 'undefined constant i', если бы они использовали это в первую очередь;) –

+0

Есть ли причина, по которой отчет об ошибках не показывал это? Я установил E_ALL – Brainiac

+1

@Brainiac, вам нужно отобразить их 'error_reporting (E_ALL); ini_set ('display_errors', 1); ' –

Смежные вопросы