2012-04-03 3 views
1

Ich habe ein paar Seiten in meiner Anwendung. Auf der ersten Seite (create_session.php), die sich unten befindet, übergibt der Benutzer das Formular und geht auf die nächste Seite (QandATable.php). Jetzt

<form action="QandATable.php" method="post" id="sessionForm"> 

<p> 
    <strong> 
     Your Session ID: 
    </strong> 
    <span id="idFont"> 
     <?php echo $id; ?> 
    </span> 
</p> 
<input type="hidden" name="id" value="<?php echo $id; ?>" /> 

<p> 
    <strong> 
     Date: 
    </strong> 
    <input type="text" id="datepicker" name="dateChosen" readonly="readonly" /> 
<p> 
    <strong> 
     Start Time: 
    </strong> 
    <input type="text" id="timepicker" name="timeChosen" readonly="readonly" /> 

<p> 
    <input class="questionBtn" type="submit" value="Prepare Questions" name="prequestion"/> 
</p> 

</form> 

wenn $ _POST [ ‚id‘] gleich 1 ist, dann ist es nur 1-Prüfung, aber wenn es mehr als 1 ist, dann gibt es mehrere Untersuchungen, die ist, wo das Problem auftritt.

Sagen wir, ich wollte 2 Prüfungen und ich schicke das Formular an die QandATable.php, dann hat die erste Prüfung keine Probleme, aber nachdem ich die erste Prüfung abgeschlossen habe und dann das Formular abschicken (Dieses Formular würde sich selbst vorlegen), Dann bekomme ich für die zweite Prüfung plötzlich Benachrichtigungen für alle $ _POST, die ich im Code unten habe.

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

Also, was ich wissen will, ist, dass, wenn ich mehrere Prüfungen haben, warum bin ich Hinweise auf alle die $ _POST ist nach der ersten Prüfung immer abgeschlossen ist? Alle Benachrichtigungen sind nicht definierte Indizes für alle Posts.

+1

Welche "Hinweise" erhalten Sie? – Bono

+0

@Bono Dies sind alles undefinierte Indizes für alle $ _POST. Also undefined Index 'id', 'timeChoose' und 'dateChoose' aber das passiert erst, wenn die erste Prüfung abgeschlossen ist und ich auf der Seite bin, um die zweite Prüfung zu erstellen. – user1304948

+0

Kannst du uns die komplette Warnung geben, die php dir gibt? Ein weiterer Punkt: Sie haben Leerzeichen vor all Ihren Werten: "'". mysql_real ... Ich denke, du willst sie nicht in deiner Datenbank haben. –

Antwort

1

Sie erhalten undefined index Fehler, weil die $_POST Daten, die Sie suchen, nicht existiert, wenn Sie die Seite anzeigen, ohne ein Formular zu senden.

Überprüfen Sie, ob die Post-Daten vorhanden ist, bevor Sie versuchen, es zu benutzen:

if(isset($_POST['sessionNum'], $_POST['id'], $_POST['timeChosen'], $_POST['dateChosen'])) 
{ 

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

} 

Oder if($_SERVER['REQUEST_METHOD'] == 'POST') verwenden, wenn Sie wissen, dass die richtigen Post-Daten werden immer auf eine POST-Anfrage vorliegen.

+0

Ich werde das in etwa 20 Minuten testen und zurück zu Ihnen, um Ihnen zu sagen, wenn es funktioniert oder nicht, habe ich eine schnelle Besorgung zu tun :) – user1304948

+0

Hat das dein Problem gelöst? – MrCode

Verwandte Themen