2012-04-03 4 views
0

Ich habe eine Seite hier, wo es alle Details von einer vorherigen Seite erhält und es in der Datenbank auf dieser Seite veröffentlicht. Nun sagen wir, ich habe mehrere Prüfungen (sagen wir 2 Prüfungen). Wenn ich mit der Erstellung der ersten Prüfung fertig bin und das Formular an mich selbst absende, erhalte ich plötzlich Hinweise für alle $ _POSTs im folgenden Code. Warum bekomme ich diese Hinweise auf alle meine $ _POST nach meiner ersten Prüfung? Alle Nachrichten haben angegeben, dass all diese Indizes mit einem $ _POST davor undefiniert sind.

Unten ist mein Code:

<?php 
session_start(); 

if (isset($_POST['id'])) { 

$_SESSION['id'] = $_POST['id']; 

} 


if (isset($_POST['dateChosen'])) { 

$_SESSION['dateChosen'] = $_POST['dateChosen']; 

} 

if (isset($_POST['timeChosen'])) { 

$_SESSION['timeChosen'] = $_POST['timeChosen']; 

} 


$username="xxx"; 
$password="xxx"; 
$database="xxx"; 

mysql_connect('localhost',$username,$password); 

mysql_select_db($database) or die("Unable to select database"); 

    $insert = array(); 

    for ($i = 1, $n = $_POST['sessionNum']; $i <= $n; ++$i) 
    { 
    $insert[] = "' ". mysql_real_escape_string($_POST['id']) . ($n == 1 ? '' : $i) . "',' ". mysql_real_escape_string($_POST['timeChosen']) . "',' ". mysql_real_escape_string(date("Y-m-d", strtotime($_POST['dateChosen']))) . "'"; 
    } 

    $sql = "INSERT INTO Session (SessionId, SessionTime, SessionDate) 
    VALUES (" . implode('), (', $insert) . ")"; 


    mysql_query($sql); 

mysql_close(); 



?> 
+0

zeigen Sie bitte Ihre HTML. Damit '$ _POST' funktioniert, müssen Sie ein Formular mit' method = "post" ' –

+0

senden, um die erste Seite zu posten? –

+0

Wenige Leute machen das, aber es ist der "richtige" Weg - um zu überprüfen, ob eine Seite an einen POST gesendet wurde, schauen Sie sich $ _SERVER ['REQUEST_METHOD'] an und stellen Sie sicher, dass sie gleich "POST" ist. –

Antwort

3

Auch wenn Sie isset($_POST[variable]) früher DO überprüfen, Sie sind nicht in der Zukunft Teilen des Codes zu überprüfen.

Sie wissen nicht, ob die frühere Prüfung (auf Erfolg nur Sie Ihre Sitzung schreiben) bestanden hat oder nicht - sollten Sie vielleicht Ihren Code mit

umhüllen
if(isset($_POST['id']) { 

    mysql_connect('localhost',$username,$password); 

    mysql_select_db($database) or die("Unable to select database"); 

     $insert = array(); 

     for ($i = 1, $n = $_POST['sessionNum']; $i <= $n; ++$i) 
     { 
     $insert[] = "' ". mysql_real_escape_string($_POST['id']) . ($n == 1 ? '' : $i) . "',' ". mysql_real_escape_string($_POST['timeChosen']) . "',' ". mysql_real_escape_string(date("Y-m-d", strtotime($_POST['dateChosen']))) . "'"; 
     } 

     $sql = "INSERT INTO Session (SessionId, SessionTime, SessionDate) VALUES (" . implode('), (', $insert) . ")"; 


     mysql_query($sql); 

    mysql_close(); 


} else { 
    //build the form which sends in ID 
} 

wie Sie versuchen, $ _POST zu packen ['id'] ohne sicher zu sein, dass es existiert? Sinn ergeben?

Verwandte Themen