2012-04-06 2 views
1

Ich habe ein System für Benutzer um Erlaubnis zu beantragen ... wenn sie ihre Genehmigungen auswählen, die sie zurückziehen wollen, sollte mein System prüfen können, ob die Kriterien erfüllt sind oder ob sie diese Genehmigung vorher beantragt haben, um Spam zu verhindern.Wie und wo kann ich meine header() platzieren, damit meine if else-Bedingung mehrmals ausgeführt werden kann?

Allerdings habe ich ein großes Problem. Wenn ich header('Location:s_success.php'); setze, würde der Alarm nicht erscheinen. Zum Beispiel, weil der Benutzer 1 oder 2 oder mehr Genehmigungen wählen kann,.

Szenario

Lasst uns die eine Erlaubnis wählen sagen, die sie haben Anspruch auf und eine weitere Genehmigung beantragen, die sie noch nicht in Betracht kommen.

Erwartetes Ergebnis

In diesem Fall geschehen, was sollte ist, dass System sollte sie zum Erfolg Seite und zugleich warnen sie brink, dass die anderen erlauben, die sie für nicht förderfähig sind nicht erfolgreich ist.

Aber unerwartetes Ergebnis:

Sie System zum Erfolg Seite gehen Sie einfach, ohne den Benutzer warnt, dass die nicht qualifizierte Genehmigung nicht erfolgreich ist.

Das ist mein Code:

<?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); 

?> 

Vermuten Fehler:

In meinem Code, ich vermute, dass, weil ich header('Location:s_apply_success.php'); verwende daher das unerwartete Ergebnis verursacht passieren. Aber ich kann nicht bestätigen, ob das der Fehler ist.

Was ich versucht habe zu tun, um die vermuteten Fehler zu debuggen:

Aber ich habe versucht echo "You are Fine."; zu verwenden, anstatt header('Location:s_apply_success.php'); und es funktioniert. Es schuhte das Echo und das Pop-Up.

+0

Welche Fehler bekommen Sie? – Chibuzo

+0

@Chibuzo kein Fehler, aber die Warnung wurde gerade nicht angezeigt, es geht nur um den Header. – Hubert

Antwort

0

Von der PHP-Handbuch:

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

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

+0

hmm ... heißt es, dass ich 'header()' nicht vor das Schleifenende setzen kann ?? nachdem ich es gelesen habe, bin ich nicht sicher, ob ich richtig interpretiere ... danke – Hubert

+0

, aber wenn ich Header vor dem Ende nicht setzen kann, wo sollte ich es setzen? Danke für die Führung # – Hubert

0

Um es zusammenzufassen, können Sie nicht oder irgendetwas vor Header zeigen display(), eine Nachricht an die nächste Seite übergeben.

+0

Nein, ich kann in den Header gehen, aber die Warnung kann nicht erscheinen – Hubert

0

Output buffering für Ihre Echo der Ausgabe kompensieren vor header() Aufruf:

<?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(); 
?> 
+0

Ich habe Ihr Skript versucht ... aber das Problem immer noch bestehen – Hubert

+0

gibt es andere Methoden? Ich habe noch nie gesehen, dass die Ausgabe schon mal gelaufen ist ... neues Ding, um es zu lernen – Hubert

Verwandte Themen