1

私は、ユーザーが許可を申請するシステムを持っています...ユーザーが退職したい許可を選択すると、私のシステムは、スパムを防ぐために、基準を満たしているかどうか、または以前にその許可を申請したことがあるかどうかを確認できるはずです。

しかし、私には大きな問題があります。私が入れheader('Location:s_success.php');た場合、アラートは表示されません。たとえば、ユーザーは 1 つまたは 2 つ以上の許可を選択できるため、.

シナリオ

申請する資格のある許可証と、まだ資格がない別の許可証を選択するとします。

期待される結果

この場合、何が起こるべきかというと、システムは彼らに成功ページを表示させ、同時に彼らが資格を持たない他の許可が成功しなかったことを警告するべきです.

しかし、予期しない結果:

システムは、資格のない許可が成功しなかったことをユーザーに警告せずに、成功ページに移動します。

これは私のコードです:

<?php
session_start();
include'Connections/database.php';
$conn = dbConnect ();
    if (! $conn)
    die("Couldn't connect to MySQL");
    
    $user = $_SESSION['eid'];
    $selectedPermit=$_POST['cat'];
    $_SESSION['selectedPermit']=$selectedPermit;
    
    foreach($selectedPermit as $permit)
    {
        $query="SELECT t.PREREQ1, t.PREREQ2, (CASE WHEN (t.PREREQ1 IS NOT NULL) AND (p1.PTYPE IS NULL) THEN 1 ELSE 0 END) AS missing1, (CASE WHEN (t.PREREQ2 IS NOT NULL) AND (p2.PTYPE IS NULL) THEN 1 ELSE 0 END) AS missing2 FROM type AS t LEFT JOIN permit AS p1 ON (t.PREREQ1=p1.ptype) AND ( p1.EID = '$user' ) AND (p1.STATUS='approved') LEFT JOIN permit AS p2 ON (t.PREREQ2=p2.ptype) AND ( p2.EID = '$user' ) AND (p2.STATUS='approved') WHERE t.PTYPE = '$permit' ";
        $result=mysql_query($query,$conn);
        $row=mysql_fetch_assoc($result);
        $missing1=$row['missing1'];
        $missing2=$row['missing2'];
        
        if($missing1=='1' or $missing2=='1')
        {
            $message='You have not met the pre-requisites for '. $permit .' \n';
//              echo "You did have not met the Pre-Requisites for." .$permit;
            echo "<script>alert(\"$message\");";
//              header('Location:s_apply2.php');
            echo "location.href='s_apply2.php';</script>";
        }
        elseif($missing1 =='0' and $missing2 =='0')
        {
            $query="SELECT PTYPE FROM permit WHERE EID='$user'";
            $result=mysql_query($query);
            
            if(mysql_num_rows($result)==0)
            {
                $query="SELECT MED FROM emp WHERE EID='$user'";
                    $result=mysql_query($query);
                    $row=mysql_fetch_assoc($result);
                    $med=$row['MED'];
                
                    if($med == 'yes')
                    {
//                          echo "You are Fine.";
                        $query = "INSERT INTO permit (EID, PTYPE) VALUES ('$user','$permit' )";
                        mysql_query($query);
                        header('Location:s_apply_success.php');
                    }
                    else
                    {
//                          echo "Go do Medical form";
                        header('Location:medical_question.php');
                    }
            }
            else
            {
                while($row=mysql_fetch_assoc($result))
                {
                    $appliedPermit[]=$row['PTYPE'];
                }
            
                if(in_array($permit,$appliedPermit))
                {
                        $message1='You have already applied '. $permit .' before. \n';
//                          echo"You have already applied for ".$permit ." before <br/>";
                        echo "<script>alert(\"$message1\");";
//                          header('Location:s_apply2.php');
                        echo "location.href='s_apply2.php';</script>";
                }
                else
                {
                    $query="SELECT MED FROM emp WHERE EID='$user'";
                    $result=mysql_query($query);
                    $row=mysql_fetch_assoc($result);
                    $med=$row['MED'];
                
                    if($med == 'yes')
                    {
                    //  echo "You are Fine.";
                        $query = "INSERT INTO permit (EID, PTYPE) VALUES ('$user','$permit' )";
                        mysql_query($query);
                        header('Location:s_apply_success.php');
                    }
                    else
                    {
                        echo "Go do Medical form";
                    //  header('Location:medical_question.php');
                    }
                }
            }
        }
    }
    
    dbDisconnect($conn);
  
?>

疑わしいエラー:

私のコードでは、header('Location:s_apply_success.php');したがって使用しているため、予期しない結果が発生すると思われます。しかし、これが間違いかどうかは確認できません。

疑わしいエラーをデバッグするために私がやろうとしたこと:

しかし、echo "You are Fine.";代わりに使用しようとしましたがheader('Location:s_apply_success.php');、機能します。それはエコーとポップアップを靴に入れました。

4

3 に答える 3

0

PHPマニュアルから:

http://php.net/manual/en/function.header.php

実際の出力が送信される前に、通常の HTML タグ、ファイル内の空白行、または PHP から header() を呼び出す必要があることに注意してください。include 関数、require 関数、または別のファイル アクセス関数を含むコードを読み取り、header() が呼び出される前に出力されるスペースまたは空の行があることは、非常に一般的なエラーです。単一の PHP/HTML ファイルを使用する場合にも、同じ問題が存在します。

于 2012-04-06T01:13:56.370 に答える
0

要約すると、header() の前に何も表示または表示できず、メッセージを次のページに渡します。

于 2012-04-06T01:15:04.747 に答える
0

出力バッファリングは、呼び出す前に出力のエコーを補正しますheader():

<?php
session_start();
ob_start();
include'Connections/database.php';
$conn = dbConnect ();
    if (! $conn)
    die("Couldn't connect to MySQL");

    $user = $_SESSION['eid'];
    $selectedPermit=$_POST['cat'];
    $_SESSION['selectedPermit']=$selectedPermit;

    foreach($selectedPermit as $permit)
    {
        $query="SELECT t.PREREQ1, t.PREREQ2, (CASE WHEN (t.PREREQ1 IS NOT NULL) AND (p1.PTYPE IS NULL) THEN 1 ELSE 0 END) AS missing1, (CASE WHEN (t.PREREQ2 IS NOT NULL) AND (p2.PTYPE IS NULL) THEN 1 ELSE 0 END) AS missing2 FROM type AS t LEFT JOIN permit AS p1 ON (t.PREREQ1=p1.ptype) AND ( p1.EID = '$user' ) AND (p1.STATUS='approved') LEFT JOIN permit AS p2 ON (t.PREREQ2=p2.ptype) AND ( p2.EID = '$user' ) AND (p2.STATUS='approved') WHERE t.PTYPE = '$permit' ";
        $result=mysql_query($query,$conn);
        $row=mysql_fetch_assoc($result);
        $missing1=$row['missing1'];
        $missing2=$row['missing2'];

        if($missing1=='1' or $missing2=='1')
        {
            $message='You have not met the pre-requisites for '. $permit .' \n';
//              echo "You did have not met the Pre-Requisites for." .$permit;
            echo "<script>alert(\"$message\");";
//              header('Location:s_apply2.php');
            echo "location.href='s_apply2.php';</script>";
        }
        elseif($missing1 =='0' and $missing2 =='0')
        {
            $query="SELECT PTYPE FROM permit WHERE EID='$user'";
            $result=mysql_query($query);

            if(mysql_num_rows($result)==0)
            {
                $query="SELECT MED FROM emp WHERE EID='$user'";
                    $result=mysql_query($query);
                    $row=mysql_fetch_assoc($result);
                    $med=$row['MED'];

                    if($med == 'yes')
                    {
//                          echo "You are Fine.";
                        $query = "INSERT INTO permit (EID, PTYPE) VALUES ('$user','$permit' )";
                        mysql_query($query);
                        header('Location:s_apply_success.php');
                    }
                    else
                    {
//                          echo "Go do Medical form";
                        header('Location:medical_question.php');
                    }
            }
            else
            {
                while($row=mysql_fetch_assoc($result))
                {
                    $appliedPermit[]=$row['PTYPE'];
                }

                if(in_array($permit,$appliedPermit))
                {
                        $message1='You have already applied '. $permit .' before. \n';
//                          echo"You have already applied for ".$permit ." before <br/>";
                        echo "<script>alert(\"$message1\");";
//                          header('Location:s_apply2.php');
                        echo "location.href='s_apply2.php';</script>";
                }
                else
                {
                    $query="SELECT MED FROM emp WHERE EID='$user'";
                    $result=mysql_query($query);
                    $row=mysql_fetch_assoc($result);
                    $med=$row['MED'];

                    if($med == 'yes')
                    {
                    //  echo "You are Fine.";
                        $query = "INSERT INTO permit (EID, PTYPE) VALUES ('$user','$permit' )";
                        mysql_query($query);
                        header('Location:s_apply_success.php');
                    }
                    else
                    {
                        echo "Go do Medical form";
                    //  header('Location:medical_question.php');
                    }
                }
            }
        }
    }

    dbDisconnect($conn);
    ob_end_flush();
?>
于 2012-04-06T01:15:41.690 に答える