Seite aktualisieren
Hallo,
ich arbeite noch nicht lange mit PHP und habe wahrscheinlich ein Problem
mit dem Funktionsprinzip von PHP:
ich habe ein QuizFormular enwurfen, das die Daten einwandfrei aus einer
Datenbank ausliest. Beim Laden des Formulars erscheint die erste Frage. Der
Nutzer kann die Frage (z.B. über Check-Boxen) beantworten.
Nun soll die Antwort über einen Submit-Button geprüft und das Formular
vollständig neu (mit der zweiten Frage) angezeigt werden.
Problem: Das Prüfen der Antwort funktioniert, das Formular wird aber erst
beim zweiten Klick neu geladen. Dann wird aber auch schon die zweite Antwort
überprüft, obwohl die zweite Frage ja noch gar nicht dasteht.
Die Reaktion auf den Button habe ich mit
if isset($_POST['send'])....
organisiert. Das Formular, bzw. das Auslesen der Daten aus der Datenbank ist
alles in PHP programmiert.
Warum wird die Formularseite erst nach dem zweiten Button-Klick neu geladen.
Bin übe jede Hilfe dankbar.
Gruß Arndt
Re: Seite aktualisieren
Arndt Kaden schrieb:
> Warum wird die Formularseite erst nach dem zweiten Button-Klick neu geladen.
<crystalball> Weil Du einen Fehler in Deinem Script gemacht hast, und
zwar hast Du in Zeile 9 3/4 ... Mist, jetzt versagt dieses blöde Ding
schon wieder :-( </crystalball>
Gruß. Claus
Re: Seite aktualisieren
Claus Reibenstein schrieb:
> <crystalball> Weil Du einen Fehler in Deinem Script gemacht hast, und
> zwar hast Du in Zeile 9 3/4 ... Mist, jetzt versagt dieses blöde Ding
> schon wieder :-( </crystalball>
Claus weißt dich hiermit auf Art deiner Fragestellung hin, und die ist
schlecht. Bitte beschreibe dein Problem doch ausführlicher und gebe alle
vorhandenen Fehlermeldungen Preis (Stichwort error_reporting(E_ALL)) und
falls es keine gibt poste wenigstens alle relevanten Code-Snippets. Dann
wäre dein Problem innerhalb der zwei Tage seitdem du gefragt hast
sicherlich gelöst worden.
Je nachdem, was die Snippets hergeben wird sich eventuell auch zeigen,
dass du hier in der Falschen NG bist.
Gruß,
Habbo
Re: Seite aktualisieren
Hallo,
es ist mir schon klar, das man ohne Script keine Aussage zu möglichen
Fehlern machen kann. Es ging mir in meiner Anfrage erst mal um eine einfache
Auskunft, ob ich evtl.einen Denkfehler bei meiner Herangehensweise habe.
Nun habe ich das Script mal hier etwas "verkürzt":
<?php
session_start();
include ('config.php');
$pnr=$_SESSION["pnr"];
echo "<html>";
echo "<head>";
echo "<title>test8</title>";
echo "</head>";
echo "<body>";
echo "<Form action='test8.php' method='POST'>";
//Auslesen des aktuellen Standes, z.B. beantwortete Fragen=FNr und
Punktzahl=BE
//zu Beginn ist beides=0
$conn=mysql_connect($server,$user,$pwd);
$sql="SELECT * FROM quiz WHERE PNr='$pnr' and Klasse='8'";
$result=mysql_db_query($db,$sql,$conn);
$row=mysql_num_rows($result);
if ($row==1)
{
$qnr=mysql_result($result,0,"QNr");
$fnr=mysql_result($result,0,"FNr");
$be=mysql_result($result,0,"BE");
}
//Frage bereitstellen
$sql="SELECT * FROM fragen";
$result=mysql_db_query($db,$sql,$conn);
$dsz=$fnr;
$ftyp=mysql_result($result,$dsz,"Ftyp");
$frage=mysql_result($result,$dsz,"Frage");
$antwort=mysql_result($result,$dsz,'Antwort');
$vorA=mysql_result($result,$dsz,"Vorschlag_A");
$vorB=mysql_result($result,$dsz,"Vorschlag_B");
$vorC=mysql_result($result,$dsz,"Vorschlag_C");
$auswA=mysql_result($result,$dsz,"Auswahl_A");
$auswB=mysql_result($result,$dsz,"Auswahl_B");
$auswC=mysql_result($result,$dsz,"Auswahl_C");
echo "<table align='center' border='0' width='80%'>";
echo "<tr>";
echo "<td colspan='2'><b>Frage $fnr: $frage</b></td>";
echo "</tr>";
echo "<tr>";
echo "<td colspan='2'> </td>";
echo "</tr>";
echo "<tr>";
echo "<td align='center'><input type='checkbox' name='antw_a'></td>";
echo "<td><b>A: </b>$vorA</td>";
echo "</tr>";
echo "<tr>";
echo "<td align='center'><input type='checkbox' name='antw_b'></td>";
echo "<td><b>B: </b>$vorB</td>";
echo "</tr>";
echo "<tr>";
echo "<td align='center'><input type='checkbox' name='antw_c'></td>";
echo "<td><b>C: </b>$vorC</td>";
echo "</tr>";
echo "</table>";
//Antwort prüfen
if (ISSET($_POST['pruefen']))
{
if (isset($_POST['antw_a'])) $a1=1; else $a1=0;
if (isset($_POST['antw_b'])) $b1=1; else $b1=0;
if (isset($_POST['antw_c'])) $c1=1; else $c1=0;
if (($auswA==$a1) and ($auswB==$b1) and ($auswC==$c1))
{
echo "richig";
$be++;
}
else
{
echo "Falsch";
}
$fnr++;
$sql="UPDATE quiz SET FNr='$fnr',BE='$be' WHERE PNr='$pnr' and
Klasse='8'";
$result=mysql_db_query($db,$sql,$conn);
}
echo "<input type='submit' name='pruefen' value='Antwort prüfen' ></input>";
echo "</form>";
echo "</body>";
echo "</html>";
mysql_close($conn);
?>
Nach erstem Klick auf den Button wird die gegebenen Antwort, d.h. die
gewählten Check-Boxen richtig ausgewertet. Es erscheint "richtig" oder
"falsch". Erst nach dem zweiten Click erscheint die zweite Frage, wobei auch
sofort eine Auswertung bezüglich der zweiten Frage erfolgt. Beim dritten
Klick erscheint die dritte Frage ebenfalls sofort mit der Auswertung.
Normal sollte nach einem Klick die Auswertung der Antwort und die neue Frage
erscheinen.
Ich hoffe, dass nun meine Fragestellung nicht zu lang geworden ist.
Gruß Arndt
Re: Seite aktualisieren
Hallo
Arndt Kaden schrieb:
> Hallo,
>
> es ist mir schon klar, das man ohne Script keine Aussage zu möglichen
> Fehlern machen kann. Es ging mir in meiner Anfrage erst mal um eine einfache
> Auskunft, ob ich evtl.einen Denkfehler bei meiner Herangehensweise habe.
>
> Nun habe ich das Script mal hier etwas "verkürzt":
> <?php
> echo "<Form action='test8.php' method='POST'>";
>
> //Auslesen des aktuellen Standes, z.B. beantwortete Fragen=FNr und
> Punktzahl=BE
> //zu Beginn ist beides=0
> //Frage bereitstellen
Frage ausgeben
> //Antwort prüfen
Du prüfst die Antwort auf die vorherige Frage!
>
> Nach erstem Klick auf den Button wird die gegebenen Antwort, d.h. die
> gewählten Check-Boxen richtig ausgewertet. Es erscheint "richtig" oder
> "falsch". Erst nach dem zweiten Click erscheint die zweite Frage, wobei auch
> sofort eine Auswertung bezüglich der zweiten Frage erfolgt. Beim dritten
> Klick erscheint die dritte Frage ebenfalls sofort mit der Auswertung.
>
> Normal sollte nach einem Klick die Auswertung der Antwort und die neue Frage
> erscheinen.
Dann mußt Du *zuerst* die Antwort auf die Frage prüfen und dann
entscheiden, was Du ausgibst.
Ein PHP- script wird jedesmal hintereinanderweg von oben nach unten
abgearbeitet.
Wenn Du erst auf den Bildschirm ausgibst kannst Du danach nicht mehr
prüfen, was Du eigentlich ausgeben wolltest, denn das ist schon weg.
Sessionmanagement, Verbindung, Auswertung wird am Anfang des scriptes
abgearbeitet und danach erfolgt die Ausgabe.
Wenns geht, nicht mit zig echo "<td>";
schau Dir mal die heredoc-Syntax an.
http://de.php.net/manual/de/language.types.string.php
Gruß
Irmgard
Re: Seite aktualisieren
On Mon, 6 Aug 2007 22:13:17 +0200, Arndt Kaden wrote:
> Ich hoffe, dass nun meine Fragestellung nicht zu lang geworden ist.
Der Fehler fällt zumindest auf: Dir ist die Arbeitsweise von PHP im
Zusammenspiel mit Webseiten nicht klar. Lies mal folgendes:
27.2. Von HTML zu PHP: Schreibe Formularverarbeitungen in Normalform
http://www.php-faq.de/q/q-stil-normalform.html
Gruß,
Matthias
Re: Seite aktualisieren
> Lies mal folgendes:
>
> 27.2. Von HTML zu PHP: Schreibe Formularverarbeitungen in Normalform
> http://www.php-faq.de/q/q-stil-normalform.html
Danke, habe ich gelesen,
soll das heißen, ich muss alles, was mit dem Formular zu tun hat, in HTML
schreiben und die Verarbeitung in PHP?
Wenn ja, das hatte ich auch erst so da stehen. Leider konnte ich aber die
Checkboxen nicht auswerten. Nach dem ich alles so umgeschrieben hatte, ging
das zumindest.
Gruß Arndt
Re: Seite aktualisieren
Hallo,
Problem hat sich erledigt! Es fehlten gerade mal zwei Zeilen Code siehe:
> <?php
>
> session_start();
> include ('config.php');
> $pnr=$_SESSION["pnr"];
if (ISSET($_POST['pruefen']))
{ header("location: test8.php"); }
> echo "<html>";
> echo "<head>";
> echo "<title>test8</title>";
> echo "</head>";
> echo "<body>";
....
-> hatte demnach kein Denkproblem! Es musste nur das "vollständige"
Aktualisieren der Seite erzwungen werden.
Dank allen Beteiligten.
Gruß Arndt
Re: Seite aktualisieren
..oO(Arndt Kaden)
>if (ISSET($_POST['pruefen']))
> { header("location: test8.php"); }
Die URL in einem Location-Header _muß_ absolut sein und nach den
header()-Aufruf gehört ein exit;, um die Scriptausführung an dieser
Stelle zu beenden und unerwünschte Nebeneffekte zu vermeiden.
Micha