Bereits eingegebene Daten wieder anzeigen

Dommas

Erfahrenes Mitglied
Hallo Zusammen

Ich habe folgendes Problem. Ich muss eine Online-Umfrage gestalten, dies mache ich PHP und mySQL. Der Fragebogen ist soweit fertig, dass alle Daten die man eingibt in der DB gespeichert werden. Jedoch hat es da eine schöne Funktion, die einem erlaubt zur vorherigen Frage zurück zu kehren. Meine Frage ist: Wie kann ich es am einfachsten machen, dass die bereits angekreuzten Felder und eingetragenen Werte dem User wieder angezeigt werden wenn er zur vorhergehenden Frage zurückkehrt?

Danke für eure Tipps!

Liebe Grüsse
Thomas
 
Das würde ich persönlich mit Sessions machen, sodass du die eingegebenen Wert in einer Session speicherst und im Notfall wieder ausliest!
 
Ich denke das wird mir jetzt zu kompliziert... das darf leider nicht mehr zu lange dauern...

Ich weiss dass ich auch einfach mühsam für jedes Feld chacken kann, ob es in der DB schon gefüllt wurde und wenn ja, echo 'checked'; ausgeben damit das Häkchen wieder gesetzt ist. Wenn ich das aber für all meine Checkboxen und Radios machen muss wird es mühsam. Gibt's nicht noch eine einfachere Möglichkeit?
 
Wo ist denn das Problem mit den Session-Variablen? Du registrierst einfach auf der ersten Umfrageseite alle Variablen die du im Verlauf benötigst und der User füllt sie nach und nach mit seinen Eingaben und auf der letzten Seite schreibst du alles in die Datenbank.

Der Vorteil dieser Variablen ist, dass die Werte auch dann erhalten bleiben, wenn der User die nächste Seite aufruft. Und die Verwendung ist ganz einfach:

Seite1.php
PHP:
       session_start();
       session_register("variable1");
       session_register("variable2");
       //usw.

Seite2.php
PHP:
       session_start();
       $_SESSION['variable1']=$eingabe1;
       $_SESSION['variable2']=$eingabe2;
       //usw.

Seite3.php (letzte Seite)
PHP:
     session_start();
      mysql_query("INSERT INTO tbl_muster VALUE ('$_SESSION['variable1']','$_SESSION['variable2']')");
       session_unregister("variable1");
       session_unregister("variable2");
       session_destroy();
/*
 Anmerkung: Wenn du auf der letzten Seite die Session beendest (so wie ich das hier gemacht habe) kann der User von der letzten Seite aus natürlich NICHT mehr zurück weil die Werte dann verloren sind. Alternativ könntest du natürlich die Variablen auf einer späteren Seite immer noch löschen, z.B. auf einer Hauptseite.
 */
 
Zuletzt bearbeitet:
Sieht ja gar nicht so schlimm aus :) Danke für den Tipp. Ich probier das mal. Aber ich begreife das noch nicht ganz: Wie würde dann z.B. die dritte Seite aussehen?

Sagen wir mal ich habe auf der ersten Seite 5 Radiobuttons, der Name ist jeweils question1. Auf der zweiten Seite habe drei Gruppen von Radiobuttons, die Variablen heissen also question2, question3 und question4. Wie würde das dann auf der dritten Seite aussehen wo wieder nur eine Radiogruppe / Variable steht?

Danke für deine Hilfe und sorry wenn ich dich nerve, aber mit Sessions kenne ich mich ganz und gar nicht aus...

Gruss Thomas
 
Dommas hat gesagt.:
Danke für deine Hilfe und sorry wenn ich dich nerve, aber mit Sessions kenne ich mich ganz und gar nicht aus...
Mach dir mal keine Sorgen. Wir waren alle mal Anfänger.

Zu deiner Frage (ich hoffe ich habe sie richtig verstanden):
Die Radio-Buttons gehören ja zwar zu einer Gruppe, haben aber dennoch verschiedene "values". Dadurch lassen sie sich sehr leicht unterscheiden.

HTML:
Frage: Wie oft besuchst du diese Seite?<br>
     <input type="radio" name="question1" value="tag" checked>Täglich!<br>
      <input type="radio" name="question1" value="woche">Wöchentlich!<br>
      <input type="radio" name="question1" value="selten">Nicht so oft<br>

Um seine Eingabe zu machen muss der User ja den Submit-Button des Formulars drücken. Damit wird er auf die zweite Umfrage-Seite geleitet. Und genau dort, BEVOR das neue HTML-Eingabeformular präsentiert wird, musst du die Eingabe in die Variable schreiben:
PHP:
$_SESSION['variableXY']=$_POST("question1");
Also zuerst immer die Eingaben der vorherigen Seite speichern und dann das HTML-Formular für die neue Eingabe darstellen.
 
Danke für deine Erläuterungen. Sollte jetzt klar sein. Auf jeden Fall hab ich's probiert, da kommt jetzt aber noch so ein Headerfehler, den ich nicht mit ob_start() und ob_end() beheben kann. Hier der Fehler:

Code:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Inetpub\wwwroot\johnlay_test\umfrage.php:7) in C:\Inetpub\wwwroot\johnlay_test\1.php on line 10

Weisst du wie ich das wegkriege?

Gruss Thomas
 
Kannst du bitte mal deinen Quellcode, zumindest in Auszügen posten? So aus dem Zusammenhang gerissen ist es schwierig diesen Fehler zu lokalisieren.
 
Klar doch. Also ich habe so eine "Framedatei", die heisst umfrage.php, dort werden alle Fragen "includet". Hier ist mal der wichtigste Teil davon:

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Umfrage</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Stil1 {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 12px;
}
.Stil2 {color: #FFFFFF}
.Stil3 {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #FFFFFF;
	font-weight: bold;
}
.Stil6 {font-weight: bold; font-style: italic; font-family: Verdana, Arial, Helvetica, sans-serif;}
-->
</style>
</head>
<body>
<?php

      include($page.'.php');
     
?>
</body>
</html>

Dann die Datei 1.php (1. Frage) sieht so aus (wird includet in die umfrage.php):

Code:
<?php
ob_start();
session_start();
   session_register("id");
   session_register("q1");
   session_register("q2");
   session_register("q3");
ob_end_flush();
   ?>
...
...
...
<tr>
    <td width="180" height="338" valign="top" bgcolor="#FFFFFF" class="Stil1" style="background-image:url(images/qbg.jpg); background-repeat:no-repeat;"><p align="left" style="margin-left:5px; margin-top:5px; margin-right:5px; font-family: Verdana, Arial, Helvetica, sans-serif;">In welchem Bereich ist Ihre Unternehmung mehrheitlich t&auml;tig? <br>
	</p></td>
    <td width="391" valign="top" class="Stil1" style="border-left-style:solid; border-left-width:1px;"><p style="margin-left:5px; margin-top:5px; margin-right:5px;">
	<form name="form1" method="POST" action="<?php $next = $page+1; echo 'umfrage.php?page='.$next;?>">
      <input name="id" type="hidden" value="<?php echo $id; ?>">
	  <input type="radio" name="q1" value="1">
      Detailhandel Lebensmittel <br>
	  <input type="radio" name="q1" value="2">
	  Detailhandel Bekleidung / Schuhe <br>
	  <input type="radio" name="q1" value="3">
	  Detailhandel Sport <br>
	  <input type="radio" name="q1" value="4">
	  Detailhandel Elektronik / Telekom <br>
	  <input type="radio" name="q1" value="5">
	  Detailhandel Pflege / Kosmetik / Gesundheit <br>
	  <input type="radio" name="q1" value="6">
	  Detailhandel Uhren / Schmuck <br>
	  <input type="radio" name="q1" value="7">
	  Warenhaus <br>
	  <input type="radio" name="q1" value="8">
	  Einkaufszentrum
	</p></td>
    <td width="121" valign="top" bgcolor="#003399" class="Stil1" style="border-left-style:solid; border-top-style:solid; border-left-width:1px; border-top-width:1px; border-color:#000000"><p style="margin-left:5px; margin-top:10px; color: #FFFFFF;"><br>Fortschritt<br><img src="images/bar/<?php echo $page; ?>.gif" border="0"></p></td>
  </tr>

In dieser 1.php steht dann auch der Absenden-Knopf. Die Action des Forms siehst du oben, es wird einfach auf die nächste Seite geleitet.

2.php:

Code:
<?php
  session_start();
       $_SESSION['q1']=$q1;
	?>

3.php analog

4.php:

Code:
<style type="text/css">
<!--
.Stil1 {color: #000000}
.Stil2 {color: #CCCCCC}
.Stil4 {font-size: 10px}
.Stil6 {font-size: 14px}
.Stil7 {font-size: 16px}
.Stil9 {
	color: #FFFFFF;
	font-weight: bold;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 12px;
}
-->
</style>

<?php
	session_start();
	include("db_info.inc");
	mysql_connect ($host, $user, $password);
	mysql_select_db($database);
    mysql_query("INSERT INTO test VALUE ('$_SESSION['q1']','$_SESSION['q2']','$_SESSION['q3']')");
       session_unregister("q1");
       session_unregister("q2");
	   session_unregister("q3");
       session_destroy();
	?>
...
...
...

Reicht das? Ich hoffe mein System ist einigermassen klar :)

Gruss Thomas
 
Der Fehler besagt dir nur das die Session bereits gestartet wurde :)

Also Session muss immer am Anfang stehen erstmal vor jeglicher Ausgabe.

Das startest am besten in der Datei wo du alles einbindest.

Wenn du Datein einbindest ist es ja so als ob sie schon in der HauptDatei drinnen sind , somit ist die Session schon 1 mal gestartet und er versucht sie nochmal zu starten , was dann den Fehler verursacht.

Also nur in der Main Datei ganz oben zualler erst vor jeglicher Ausgabe session_start() machen.

in den Include Datei lässt es weg .

Des weiteren schau zu das Du immer die Session_ID() übergibst über die URL mittels GET , denn sonst kommt dir einer mit "ich will deine Cookies nicht" und schon funktioniert die Session nicht mehr.

Findet man auch einiges im Netz zu :) Session sind leichter als man denkt ;)
 
Zurück