2017-08-01 14 views
-1

私はアンケートのウェブページを作成して、データを送信します(他のページの$_SESSIONとして)、私は自分のステータスを0に変更しますそれ以降は、ログイン情報でアンケートを行うことはできません)。PDOでデータを送信した後、空白のページにリダイレクト

これらはすべてPDOで行われています。しかし、なぜそのページは常に白い空白のページにリダイレクトされますか?ここで

は、私が行方不明です何私のコード

<?php 
session_start(); 
if (!isset($_SESSION['user'])) 
{ 
header("location:index.php"); 
} 
?> 

<?php 
require_once "condb.php"; 
?> 

<?php 
if (isset($_POST['BTN_P2'])) 
{ 
    $_SESSION['problem'] = $_POST['problem']; 
    if ($_SESSION['problem'] == "yes"){header("location:survey_3.php");} 
else 
{ 
    $sql="INSERT INTO data(time,suggest,phone,eat,problem) VALUES(?,?,?,?,?)"; 
    $stm=$cn->prepare($sql); 
    $stm->bindParam("1",$_SESSION['time']); 
    $stm->bindParam("2",$_SESSION['suggest']); 
    $stm->bindParam("3",$_SESSION['phone']); 
    $stm->bindParam("4",$_SESSION['eat']); 
    $stm->bindParam("5",$_SESSION['problem']); 

    try 
    { 
    $stm->execute(); 
     try 
     { 
     $sqlstatus="INSERT INTO login(status) VALUES(0)"; 
     $stmt=$cn->prepare($sqlstatus); 
     $stmt->execute(); 
     echo "Finish!"; 
     header('location:finish.php'); 
     } 
     catch (Exception $error) 
     { 
     echo $error->getTraceAsString(); 
     } 
    } 
    catch (Exception $e) 
    { 
    echo $e->getTraceAsString(); 
    } 
} 
} 
?> 

のですか?

編集#1:どのように$_SESSION['user']が由来するか確認してください。

<?php 
if (isset($_POST['BTN_ENTER'])) 
{ 
    $username=$_POST['username']; 
    $password=$_POST['password']; 
    $hashed_password=password_hash($password,PASSWORD_DEFAULT); 
    try 
    { 
     $stmt = $cn->prepare("SELECT * FROM login WHERE username=:username LIMIT 1"); 
     $stmt->execute(array(':username'=>$username)); 
     $result=$stmt->fetch(PDO::FETCH_ASSOC); 
     if($stmt->rowCount() > 0) 
     { 
      if(password_verify($password, $result['password'])) 
      { 
      if ($result['status']==1) 
       { 
       $_SESSION['user']=$result['name']; 
       header('location:survey.php'); 
       } 
      } 
     } 
    } 
    catch(PDOException $e) 
    { 
     echo $e->getMessage(); 
    } 
} 
+0

'$ _SESSION ['user']'が設定されていない可能性が高いためです。 '$ _SESSION ['user']'を設定するコードを表示できますか? – Fredster

+1

「error_reporting(E_ALL);」を使用してエラーを表示していないため、単に空白ページにリダイレクトされ、表示されないエラーだけではないことをどのように知っていますか?表示するためにエラーをオンにしていますか? – Rasclatt

+0

@Fredster '$ _SESSION ['user']'の由来を確認するために編集しました。 – PaoPaoMC

答えて

0

あなたは機能を作るとき、あなたがそれを実装する前に、あなたは自分自身でそれを手動で試すことができるなど、再利用、読み、それが簡単で動作するようにするために関数/メソッドにあなたのスクリプトを試してみて、壊す必要があります。あなたは関数がそれ自体で働く確認したら、あなたはロジックにそれを投げると何かが失敗した場合、あなたはそれが機能しません知っている:

/functions/suggestEatingProblem.php

<?php 
function suggestEatingProblem($con,$array) 
    { 
     $sql = "INSERT INTO `data` (`time`,`suggest`,`phone`,`eat`,`problem`) VALUES(?,?,?,?,?)"; 
     $query = $con->prepare($sql); 
     # Since you are not really doing anything special with your parameters 
     # just do the array into the execute function, it's more straight forward 
     $query->execute($array); 
    } 

/機能/addLoginStatus.php

<?php 
function addLoginStatus($con,$val) 
    { 
     # Don't need to prepare, just query 
     $con->query("INSERT INTO login (`status`) VALUES({$val})"); 
    } 

/functions/verifyUser.php

<?php 
function verifyUser($con,$username,$password) 
    { 
     $stmt = $con->prepare("SELECT `password`,`name` FROM login WHERE username = ? LIMIT 1"); 
     $stmt->execute(array($username)); 
     $result = $stmt->fetch(PDO::FETCH_ASSOC); 
     if(empty($result['password'])) 
      return false; 

     $isValid = password_verify($password, $result['password']); 
     return ($isValid)? $result['name'] : false; 
    } 

/config.php

<?php 
# Create some helpful constants 
define('DS',DIRECTORY_SEPARATOR); 
define('ROOT_DIR',__DIR__); 
define('FUNCTIONS',ROOT_DIR.DS.'functions'); 
# Start session 
session_start(); 
# Start database 
require_once(ROOT_DIR.DS."condb.php"); 

/whatever.php

<?php 
# Add config at top 
require_once(__DIR__.DIRECTORY_SEPARATOR.'config.php'); 
# Add our functions to be used 
require_once(FUNCTIONS.DS.'suggestEatingProblem.php'); 
require_once(FUNCTIONS.DS.'addLoginStatus.php'); 
# If no session, redirect 
if (!isset($_SESSION['user'])) { 
    header("Location: index.php"); 
    # Make sure to stop your script if you are done with the page 
    exit; 
} 
# Check if submission 
if(isset($_POST['BTN_P2'])) { 
    # Assign problem (trim it) 
    $_SESSION['problem'] = trim($_POST['problem']); 
    # If yes 
    if($_SESSION['problem'] == "yes") { 
     # Redirect and stop the script execution 
     header("Location: survey_3.php"); 
     exit; 
    } 
    else { 
     # Just do one "try" here... 
     try { 
      # Run your function here 
      suggestEatingProblem($cn,array(
       $_SESSION['time'], 
       $_SESSION['suggest'], 
       $_SESSION['phone'], 
       $_SESSION['eat'], 
       $_SESSION['problem'] 
      )); 
      # Run your second function here 
      addLoginStatus($cn,'0'); 
      # Redirect. You can not put content before you redirect, so 
      # remove the "Finished" echo 
      header('Location: finish.php'); 
      exit; 
     } 
     catch (PDOException $e){ 
      echo 'Error occurred: '.$e->getTraceAsString(); 
     } 
    } 
} 
else { 
    echo 'No request sent.'; 
} 

検証部:

# Add function (see the other example to add the config) 
require_once(FUNCTIONS.DS.'verifyUser.php'); 
# If there is a submission 
if(isset($_POST['BTN_ENTER'])) { 
    try { 
     # Fetch the name (or false) 
     $user = verifyUser($cn,trim($_POST['username']),trim($_POST['password'])); 
     # If not false 
     if($user) { 
      # Assign the value 
      $_SESSION['user'] = $user; 
      # Redirect and stop execution of script 
      header('Location: survey.php'); 
      exit; 
     } 
    } 
    catch(PDOException $d) { 
     echo $e->getMessage(); 
    } 
} 
関連する問題