Problem in for-Schleife
Marc
- php
Hallo,
ich habe ein Problem.
Ich möchte mit einem kleinen PHP-Script ein Formular auswerten.
Das formular liefert 14 werte (q1 - q14) zurück, die entweder den Wert "f" oder "r" haben. Wenn "r" zurückgeliefert wird, soll ein zähler um eins erhöht werden, wenn "f" geliefert wird, soll nichts geschehen.
Ich dachte mir am einfachsten (kürzesten) ist das mit einer for-Schleife zu machen, aber ich habe noch einen Fehler drin. In der If-Abfrage inerhalb der for-Schleife habe ich $q$z verwendet. Das soll eigentlich für $q1 - q14 stehen. Irgendwei klappt das aber nicht so wie ich mir das vorstelle.
Ich versthe das Problem denke ich schon., verstehe aber nicht wie ich es anderst machen kann. habt ihr eine ahnung?
Hier noch der Auszug aus dem Quelltext des Scripts
if (isset($_POST["form_submitted"]))
{
// übergebene Variablen ermitteln:
$q1 = $_POST['q1'];
$q2 = $_POST['q2'];
$q3 = $_POST['q3'];
$q4 = $_POST['q4'];
$q5 = $_POST['q5'];
$q6 = $_POST['q6'];
$q7 = $_POST['q7'];
$q8 = $_POST['q8'];
$q9 = $_POST['q9'];
$q10 = $_POST['q10'];
$q11 = $_POST['q11'];
$q12 = $_POST['q12'];
$q13 = $_POST['q13'];
$q14 = $_POST['q14'];
$zähler=0;
for ($z=1 ; $z < 15 ; $z++)
{
if ($q$z==r)
{
$zähler=$zähler+1;
}
}
echo $zähler;
}
Danke für eure Mühe.
mfg Marc
Nabend,
inerhalb der for-Schleife habe ich $q$z verwendet
Hast du dir auch einmal angesehen, was dabei ausgegeben wird, sprich ein "echo $q$z;" gemacht?
Irgendwei klappt das aber nicht so wie ich mir das vorstelle.
Was meinst du mit "klappt nicht" und "wie ich mir das vorstelle"?
Und schau einmal:
$hallo = "Bert";
$a = "hallo";
echo ${$a};
Bis denne,
Morgen,
$hallo = "Bert";
$a = "hallo";
echo ${$a};
schon kappiert
$q{$z} so klappts. Das hat mir nur gefehlt.
Danke schön.
mfg Marc
Hallo,
$q1 = $_POST['q1'];
[...]
$q14 = $_POST['q14'];
Wozu die Mühe?
if ($q$z==r)
Tja, was steht denn in der Konstante r? Oder wolltest du vielleicht auf den String 'r' prüfen?
if($_POST['q'.(string)$z] == 'r'){
gruß,
Severin
Hallo,
Mein Problem ist doch noch nicht gelöst. Ich habe es vorhin anscheinend auch schlecht erklärt.
Also es geht um die auswertung eines Tests. Dazu gibt es die Fragen q1 bis q14 die jeweils ein <select> feld mit verschiedenen Antwortmöglichkeiten haben. Es ist immer eine Antwort richtig (value=r) und der rest falsch (value=f).
Mit der Forschleife möchte ich jetzt einfach rausfinden, wieviele antworten insgesammt richtig sind.
Ich hoffe ich habe mich diesemal deutlicher ausgedrückt.
Danke an alle die bisher schon geantwortet haben für eure Mühe.
mfg Marc
<form name=quizform method="post" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>">
Wieviele Geburtstage hat ein Mensch im Durchschnitt?
<SELECT name=q1 size=1>
<OPTION value=f selected>weiß ich nicht
<OPTION value=r>1
<OPTION value=f>2
<OPTION value=f>über 5
<OPTION value=f>über 55
<OPTION value=f>über 75
</SELECT>
...
3 Katzen fressen 3 Mäuse in 3 Minuten. 100 Katzen fressen 100 Mäuse in...
<SELECT name="q14">
<OPTION value=f selected>weiß ich nicht
<OPTION value=r>3
<OPTION value=f>100
<OPTION value=f>0,3
</SELECT>
<input type="submit" name="form_submitted" value="Test auswerten">
</form>
<?PHP
if (isset($_POST["form_submitted"]))
{
$zaehler = 0;
for ($z=1 ; $z < 15 ; $z++)
{
if ($_POST['q$z'] == 'r')
{
$zaehler++;
}
}
echo $zaehler;
}
?>
Nabend,
<SELECT name=q1 size=1>
<OPTION value=f selected>weiß ich nicht
<OPTION value=r>1
<OPTION value=f>2
<OPTION value=f>über 5
<OPTION value=f>über 55
<OPTION value=f>über 75
</SELECT>
Wenn du schon einen solchen Test machst, dann würde es mich nicht wundern, wenn alle 100% richtig haben, schließlich ist die Antwort vor dem Beantworten der Frage schon ersichtlich. Führe daher die Überprüfung ebenfalls serverseitig durch.
if ($_POST['q$z'] == 'r')
Probiere einmal:
$a = "Hallo";
echo $a."<br>";
echo "$a<br>";
echo '$a<br>';
Du hast in diesem Posting allerdings noch nicht gesagt, was genau nicht funktioniert. Ich denke aber einmal, es mag der gerade genannte Fehler sein.
Bis denne,
Hallo, Marc,
2 Denkfehler:
1. So ($q$z) kann man keinen Feldnamen zusammenbauen
2. Du willst mit der Konstanten "r" vergleichen. Was ist r (ein Feldname ?)
Vorsicht mit Sonderzeichen in Feldnamen (äöüß usw.)
for-Schleifen eignen sich gut für indizierte Felder, z.B.
$q = array();
$q[1] = $_POST['q1'];
$q[2] = $_POST['q2'];
...
$zaehler = 0;
for ($z=1 ; $z < 15 ; $z++)
{
if ($q[$z] == "r" )
{
$zaehler++;
}
}
Gruß aus Worms, Kalle
echo $zähler;
Hello,
du machst Dir das Leben extra schwer. Benenne Deine Variablen im Formular anders:
<input type="text" name="_auswahl[1]">
<input type="text" name="_auswahl[2]">
<input type="text" name="_auswahl[3]">
dann kannst Du nämlich im Script einfach schreiben:
$_control = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
$count = 0;
if (isset($_POST["_auswahl"][1])
foreach($_POST["_auswahl"] as $key => $val)
{
if (!in_array($key,$_control)) die ("Fakeversuch!");
$count += ($val == "r");
}
Ich habs nicht getestet, aber erfahrungsgemäß steckt noch irgendwo ein Tippfehler. ;-)
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
ich habe dir das nochmal anders zusammengebaut und auch getestet.
So funktioniert das, und die Antworten sind nur dem Server bekannt und nicht dem Script und damit dem User...
Vom Control-Array werden bisher natürlich nur Frage 1 und Frage 2 benutzt. Die anderen Werte sind nur Blindwerte.
----------------------------------------------------------------
<?php ### auswerten.php ###
if ($_POST["btn"]["auswerten"])
{
$_control = array(1=>2,
2=>4,
3=>3,
4=>7,
5=>2,
6=>5,
7=>3,
8=>5,
9=>1,
10=>1,
11=>4,
12=>3,
13=>1,
14=>3);
$count = 0;
if (isset($_POST["_auswahl"][1]))
foreach($_POST["_auswahl"] as $key => $val)
{
if (!isset($key,$_control)) die ("Fakeversuch!");
$count += ($val == $_control[$key]);
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/transitional.dtd">
<html>
<head>
<title>Titel</title>
<META NAME="Author" CONTENT="?">
<META NAME="Keywords" CONTENT="?">
<META NAME="Description" CONTENT="?">
</head>
<body>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
<p>
<select name="_auswahl[1]" size="3">
<option value="1">Katzen haben Hörner</option>
<option value="2">Katzen haben einen Schwanz</option>
<option value="2">Katzen haben drei Augen</option>
</select>
</p>
<p>
<select name="_auswahl[2]" size="4">
<option value="1">Hunde können reden</option>
<option value="2">Hunde sind immer lieb</option>
<option value="3">Hunde haben Rüssel</option>
<option value="4">Hunde bellen oft</option>
</select>
</p>
<!-- und so weiter mit den Fragen-Blöcken -->
<p><input type="submit" name="btn[auswerten]" value="auswerten"></p>
</form>
<?php echo "<p>richtige Lösungen: $count</p>"; ?>
</body>
</html>
------------------------------------------------------------------
Viel Spaß beim Fragen bauen.
Etwas komplizierter wird es erst, wenn auch Multiple-Choice möglich ist.
Liebe Grüße aus http://www.braunschweig.de
Tom