PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Radiobutton Abfrage


project.config
31.01.2008, 10:39:33
Hallo,

Problem:

Möchte die Radiobuttons in einem Formular abfragen und dann auf einer weiteren Seite eine Variable abhängig von der Radiobuttonauswahl ausgeben lassen.


<html>
<head>
<title></title>
</head>
<body>
<form action = "test2.php" method ="POST" >

<?php

if(isset($_POST['send']))
{
if ($_POST['frage'] == 'ja')
{
session_start();
$_SESSION['test'] = "Ja, sehr!";
}
elseif ($_POST['frage'] == 'nein')
{
session_start();
$_SESSION['test'] = "Nein, Danke!";
}
}
?>

Haben Sie Hunger??
<br>
<br>
<input type="Radio" name="frage" value="ja" checked="checked"> Ja
<input type="Radio" name="frage" value="nein"> Nein

<br><br>

<input type="Submit" name="send" value="send">

</form>
</body>
</html>


Es soll halt standardmäßig ein Button von Anfang an aktiviert sein und nach dem Absenden geprüft werden, welcher Button aktiviert ist und demnach welcher ausgewählt wurde, eine Sessionvariable angelegt werden.
Danach soll auf einer weiteren Seite die Sessionvariable ausgegeben werden.


<?php
session_start();
echo $_SESSION['test'];
?>


Leider erfolgt keine ausgabe... bitte um hilfe.

defabricator
31.01.2008, 12:12:00
Schreib in die erste Datei ganz an den Anfang (Zeile #1) mal diesen Code<?php error_reporting(E_ALL); ini_set('display_errors', 1); ?>und probiere das nochmal aus.

project.config
31.01.2008, 12:36:07
<?php error_reporting(E_ALL); ini_set('display_errors', 1); ?>
<html>
<head>
<title></title>
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<form action = "test2.php" method ="POST" >

<?php

if(isset($_POST['send']))
{
if ($_POST['frage'] == 'ja')
{
session_start();
$_SESSION['test'] = "Ja, sehr!";
}
elseif ($_POST['frage'] == 'nein')
{
session_start();
$_SESSION['test'] = "Nein, Danke!";
}
}
?>

Haben Sie Hunger??
<br>
<br>
<input type="Radio" name="frage" value="ja" checked="checked"> Ja
<input type="Radio" name="frage" value="nein"> Nein

<br><br>

<input type="Submit" name="send" value="send">

</form>
</body>
</html>


ok habs so nun probiert....keine ausgabe.

defabricator
31.01.2008, 12:45:31
Auch keine Fehlermeldungen?

project.config
31.01.2008, 12:48:12
ne leider nicht

defabricator
31.01.2008, 12:52:07
test2.php ist die Datei mit dem Formular?

project.config
31.01.2008, 12:59:32
das ist in einer Datei mit dem Namen test1.php



<?php error_reporting(E_ALL); ini_set('display_errors', 1); ?>
<html>
<head>
<title></title>
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<form action = "test2.php" method ="POST" >

<?php

if(isset($_POST['send']))
{
if ($_POST['frage'] == 'ja')
{
session_start();
$_SESSION['test'] = "Ja, sehr!";
}
elseif ($_POST['frage'] == 'nein')
{
session_start();
$_SESSION['test'] = "Nein, Danke!";
}
}
?>

Haben Sie Hunger??
<br>
<br>
<input type="Radio" name="frage" value="ja" checked="checked"> Ja
<input type="Radio" name="frage" value="nein"> Nein

<br><br>

<input type="Submit" name="send" value="send">

</form>
</body>
</html>



und das steht nur in der test2.php

<?php
session_start();
echo $_SESSION['test'];
?>

defabricator
31.01.2008, 15:34:47
Dann wird dochif(isset($_POST['send']))
{
if ($_POST['frage'] == 'ja')
{
session_start();
$_SESSION['test'] = "Ja, sehr!";
}
elseif ($_POST['frage'] == 'nein')
{
session_start();
$_SESSION['test'] = "Nein, Danke!";
}
}
?>nie ausgeführt. Denn $_POST['send'] und $_POST['frage'] können nur vorhanden sein, wenn das Formular abgeschickt wurde. Aber das Formular wird an test2.php abgeschickt und nicht an test1.php. Steht jedenfalls so im action Attribut.

project.config
01.02.2008, 09:28:39
Ich will halt eine aneinderreihung meherer fragen und immer bei jeder frage sollen halt beim betätigen des Submitbutton die Radiobuttons abgefragt werden und je nach ergebnis in einer Variablen gespeichert werden die dann nach ca 10 weiteren fragen ausgegeben werden kann mit all den anderen ergebnissen.

also

Frage1
antworten
absenden
-------------> antwort abspeichern in variable
Frage 2
.
.
.
dann auswertung

würde mich über tipps freuen

defabricator
01.02.2008, 11:56:57
foo.php<?php
session_start();
if ( isset($_POST['frage'], $_POST['antwort']) ) {
$_SESSION[ $_POST['frage'] ] = $_POST['antwort'];
}eins.php<html>
<head><title>Frage 1</title></head>
<body>
<form method="post" action="zwei.php" >
<div>
Frage 1:
<input type="hidden" name="frage" value="frage1" />
<input type="radio" name="antwort" value="ja" />ja
&nbsp;
<input type="radio" name="antwort" value="nein" />nein
<input type="submit" />
</div>
</form>
</body>
</html>zwei.php<?php require 'foo.php'; ?>
<html>
<head><title>Frage 2</title></head>
<body>
<form method="post" action="auswertung.php" >
<div>
Frage 2:
<input type="hidden" name="frage" value="frage2" />
<input type="radio" name="antwort" value="ja" />ja
&nbsp;
<input type="radio" name="antwort" value="nein" />nein
<input type="submit" />
</div>
</form>
</body>
</html>auswertung.php<?php require 'foo.php'; ?>
<html>
<head><title>Auswertung</title></head>
<body>
<pre><?php print_r($_SESSION); ?></pre>
</body>
</html>

project.config
01.02.2008, 13:59:27
Vielen Dank läuft

project.config
04.02.2008, 15:51:52
nächste Frage =)

wenn ich nun den Verlauf der Fragen abhängig machen will von den Antworten also wenn der Benutzer bei Frage 1 ja ausgewählt hat dann soll man zu z.b. Frage 3 gelangen und nicht zu Frage 2.

Hatte schon überlegt ob das ginge das man schreibt:

<form action=" <?php if($_SESSION['sess_var' == 1) { echo 'frage3.php'} else ........... ?> " >

aber dies klappt nicht der Submit Button funktioniert somit nicht

woran liegts?

The Serious Sam
04.02.2008, 18:20:39
Ich würde das mit Javascript lösen da mir mit PHP erstmal so keine lösung einfällt evtl eine andere datei zwischenschalten die die antort verarbeitet und dann auf die zieldatei weiterleitet.

Aber hier mit javascript:


<script language="javascript">

function check() {
rObj = document.form.frage;
for (var i=0; i<rObj.length; i++) {
if (rObj[i].checked) {
if(rObj[i].value == 'ja') {
document.form.action = 'zwei.php'; // Wenn antwort ja zur zwei.php
} else {
document.form.action = 'drei.php'; // Wenn antwort nein zur drei.php
}
}
}
}

</script>


<form action = "zwei.php" method ="POST" id="form" name="form">

<input type="Radio" name="frage" id="frage1" value="ja" checked="checked" onClick="check();"> Ja
<input type="Radio" name="frage" id="frage2" value="nein" onClick="check();"> Nein

<br><br>

<input type="Submit" name="send" value="send">

</form>


einfach nur anpassen aber ich denke das erklärt sich halbwes von selbst ;)

The Serious Sam
04.02.2008, 18:55:51
Das ganze kann man natürlich noch schön erweitern ^^


<script language="javascript">

var start = 5;
var vortext = "Weiter (";
var nachtext = ")";

var aktiv = setInterval("Count()", 1000);

function Count()
{
start--;

if(start >= 1)
{
document.getElementById("Countdown").value = vortext + start + nachtext;
} else {
document.getElementById("Countdown").disabled = false;
document.getElementById("Countdown").value = "Weiter";
aktiv.clearInterval()
}
}

function check() {
rObj = document.form.frage;
for (var i=0; i<rObj.length; i++) {
if (rObj[i].checked) {
if(rObj[i].value == 'ja') {
document.form.action = 'zwei.php'; // Wenn antwort ja zur zwei.php
} else {
document.form.action = 'drei.php'; // Wenn antwort nein zur drei.php
}
}
}
}

function save() {
check = false;
for (i=0; i<document.form.frage.length; i++) {
if(document.form.frage[i].checked==true) {
check = true;
}
}

if(check==false)
alert('Bitte Antwort auswählen');
}

</script>


<form action="" method ="POST" id="form" name="form">

Haben sie Hunger?

<br><br>

<input type="Radio" name="frage" id="frage1" value="ja" onClick="check();"> Ja
<input type="Radio" name="frage" id="frage2" value="nein" onClick="check();"> Nein

<br><br>

<input type="Submit" name="Send" id="Countdown" value="Weiter (5)" disabled="true" onclick="save()">

</form>


Nun kann erst nach 5 Sekunden auf weiter gedrückt werden und es wird überprüft ob eine antwort gewählt wurde ^^

project.config
04.02.2008, 19:41:45
mmh wäre bissel unpraktisch weil am ende ca 10 kommen und bei jeder ca 5sec warten zu müssen ist bissel unpraktisch aber werd es mal versuchen .... aber hoffe komme um javascript rum und es gibt was in php ^^

The Serious Sam
04.02.2008, 20:21:00
Joah wie ich sagte mit zwischenschalten

Formular anpassen:

<form action="weiter1.php">

//...

</form>


die weiterleitung:


<?php

if(isset($_POST['frage']) && $_POST['frage']=='ja')
$next = "zwei.php";
else
$next = "drei.php";

header("location: $next");

?>

ansonstenm wie immer

Das mit dem countdown kannste ja einfach leicht wieder raus nehmen^^
einfach


var start = 5;
var vortext = "Weiter (";
var nachtext = ")";

var aktiv = setInterval("Count()", 1000);

function Count()
{
start--;

if(start >= 1)
{
document.getElementById("Countdown").value = vortext + start + nachtext;
} else {
document.getElementById("Countdown").disabled = false;
document.getElementById("Countdown").value = "Weiter";
aktiv.clearInterval()
}
}


entfernen und den Button unten wieder anpassen (disable raus und value ändern)

mfg

meikel (†)
05.02.2008, 10:38:51
Hatte schon überlegt ob das ginge das man schreibt:

<form action=" <?php if($_SESSION['sess_var' == 1) { echo 'frage3.php'} else ........... ?> " >

aber dies klappt nicht der Submit Button funktioniert somit nicht

woran liegts?
Am Script.

Was erwartest Du da:
echo 'frage3.php'

Selbst bei
echo "frage3.php"
noch bei
echo frage3.php <-- gibt nen Syntaxerror
dürfte sich das gewünschte Ergebnis nicht einstellen.

project.config
05.02.2008, 10:44:05
so geht nicht ganz ....



<script language="javascript">

function check() {
rObj = document.form.antwort;
for (var i=0; i<rObj.length; i++) {
if (rObj[i].checked) {
if(rObj[i].value == 'Deutschland') {
document.form.action = '5_frage.php';
} else {
document.form.action = '8_frage.php';
}
}
}
}

</script>

<form action="2_frage.php" method="post" target="" name="form" id="form">
.
.
.
echo "<input type='Radio' name='antwort' checked='checked' value='Deutschland' onClick='check();'>";

echo "<input type='Radio' name='antwort' value='Au&szlig;erhalb' onClick='check();'>";



wenn ich deutschland anklicke dann geht er zur 2_frage.php aber wenn ich außerhalb anklicke geht er zu der 8_frage.php also in den else zweig geht er nur das erste will er irgendwie nicht erfüllen .....

project.config
05.02.2008, 13:19:02
Am Script.

Was erwartest Du da:
echo 'frage3.php'

Selbst bei
echo "frage3.php"
noch bei
echo frage3.php <-- gibt nen Syntaxerror
dürfte sich das gewünschte Ergebnis nicht einstellen.

naja mal abgesehen von den syntaxfehlern bei dem beispiel wollte halt nur wissen ob es so in der richtung klappt weil wenn man schreibt ... action =' <?php echo 3_frage.php ?> ' ... dann übernimmt er das richtig und dachte halt das man das als abfrage dann schön verpacken könnte ....

The Serious Sam
06.02.2008, 18:19:07
wenn ich deutschland anklicke dann geht er zur 2_frage.php aber wenn ich außerhalb anklicke geht er zu der 8_frage.php also in den else zweig geht er nur das erste will er irgendwie nicht erfüllen .....


Das soll mal einer verstehn Oo mach mal mehere Sätze draus

Aber wenn du das mit Javascript net magst bzw verstehst kann ich dir das nochmal komplett mit PHP machen^^

project.config
07.02.2008, 09:06:15
kurz und knapp er geht nur in den else zweig.....

und wegen php : wäre super

The Serious Sam
07.02.2008, 18:56:14
Ich habe ein Skript geschrieben das aus 2 bzw 3 teilen besteht:

1_frage.php:


<form action="action.php" method="post">

Frage: Haben Sie derzeit Hunger?<p>

<input type="radio" name="antwort" value="2|Ja">Ja <input type="radio" name="antwort" value="6|Nein">Nein<p>

<input type="hidden" name="frage" value="1">
<input type="submit" value="Weiter">


</form>


Bei den Antworten sind zwei Parameter gespeichert. Hier einmal 2 + Ja und 6 +Nein. Das Trennzeichen dazwischen ist ein |.

Geschickt wird dies an action.php:


<?

session_start();

$ant = isset($_POST['antwort'])?explode('|', $_POST['antwort']):array(1, FALSE); // Nächste frage oder Frage1

$next = (int)$ant[0];

if($ant[1]) $_SESSION['antworten'][(int)$_POST['frage']] = $ant[1];

header("Location: $next"."_frage.php");

?>


hier wird per 'explode()' die Antwort aufgeteilt. das | ist hier als Trennzeichen angegeben. Die Frage und dasugehörige Antwort werden in eine Session gespeichert.
Der header gibt die nächste frage an. hierbei wird der erste Parameter der antwort genommen (1_frage.php).

und als Auswertung auswertung.php


<?

session_start();

echo "Antworten:<br>";

sort($_SESSION['antworten']);

foreach($_SESSION['antworten'] as $num=>$antwort) {

echo "Frage: $num Antwort: $antwort<br>";

}

?>


Hier könnte man für alle Fragen ein Array erstellen und diese dann mit ausgeben (mit $num als Index

zum Beispiel:


<?

session_start();

$fragen[1] = 'Haben sie Hunger?';
$fragen[2] = 'Wohnen sie in Deutschland oder außerhalb?';

echo "Antworten:<br>";

sort($_SESSION['antworten']);

foreach($_SESSION['antworten'] as $num=>$antwort) {

echo "Frage: ".$fragen[$num]." Antwort: $antwort<br>";

}

?>


Ich denke das sollte verständlich sein^^

mfg