Seite aktualisieren

Seite aktualisieren

am 04.08.2007 00:19:14 von Arndt Kaden

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

am 04.08.2007 11:13:34 von Claus Reibenstein

Arndt Kaden schrieb:

> Warum wird die Formularseite erst nach dem zweiten Button-Klick neu geladen.

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 :-(


Gruß. Claus

Re: Seite aktualisieren

am 06.08.2007 08:23:20 von bruening

Claus Reibenstein schrieb:
> 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 :-(


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

am 06.08.2007 22:13:17 von Arndt Kaden

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":

session_start();
include ('config.php');
$pnr=$_SESSION["pnr"];
echo "";
echo "";
echo "test8";
echo "";
echo "";

echo "

";

//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 "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "
Frage $fnr: $frage
 
A: $vorA
B: $vorB
C: $vorC
";


//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 "";
echo "
";
echo "";
echo "";

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

am 07.08.2007 09:32:54 von Irmgard Schwenteck

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":
> > echo "

";
>
> //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 "";
schau Dir mal die heredoc-Syntax an.
http://de.php.net/manual/de/language.types.string.php

Gruß
Irmgard

Re: Seite aktualisieren

am 07.08.2007 20:32:11 von Matthias Esken

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

am 10.08.2007 17:15:26 von Arndt Kaden

> 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

am 11.08.2007 19:53:56 von Arndt Kaden

Hallo,

Problem hat sich erledigt! Es fehlten gerade mal zwei Zeilen Code siehe:


> >
> session_start();
> include ('config.php');
> $pnr=$_SESSION["pnr"];

if (ISSET($_POST['pruefen']))
{ header("location: test8.php"); }

> echo "";
> echo "";
> echo "test8";
> echo "";
> echo "";
....

-> hatte demnach kein Denkproblem! Es musste nur das "vollständige"
Aktualisieren der Seite erzwungen werden.

Dank allen Beteiligten.

Gruß Arndt

Re: Seite aktualisieren

am 11.08.2007 20:31:20 von Michael Fesser

..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