Kleiner Denkanstoss:
Array erstellen
Aufgabennummer als Index, "Status" ob richtig oder falsch beantwortet als Wert.
So würd ich das lösen.
Hallo,
die Situation ist folgende:
Ich habe 4 Dokumente mit je einem Formular die mittels einer Session weitergegeben werden. Nach den 4 Doks mit den Forms folgen weitere 4 PHP-Programme die je die Benutzereingaben pro Seite ausgeben.
Seite 1 | Seite 2 | Seite 3 | Seite 4 | Ausgabe Seite 1 | Ausgabe Seite 2 usw.
In jedem PHP-Programm werden die Benutzereingaben mit einer foreach-Schleife durchlaufen und ausgegeben. D. h. ich habe 4 verschiedene Schleifen.
Nun zum Problem.
Es handelt sich um einen kleinen Test. In welchem man natürlich falsche Eingaben machen kann. Nun möchte ich gerne auf der neunten Seite sowas wie eine Gesamtbewertung (Punktesystem) machen. Dazu muss ich aber auf alle richtigen Antworten der vorhergegangen Schleifen zugreifen können.
Und da ist der Hacken, mir fällt nix ein wie ich das machen könnte.
Hoffe ihr habt ne Idee wie ich da ran kann. Danke, Grüsse Sascha
Das Leben ist schön -
Lehren ist die schönste Methode zu lernen.
Kleiner Denkanstoss:
Array erstellen
Aufgabennummer als Index, "Status" ob richtig oder falsch beantwortet als Wert.
So würd ich das lösen.
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
<?php start_session();
case ($_GET['navigation']) ... // z.B. eine Navi Schleife
// Fall seite 1
$_SESSION['Seiten'][0][0]=$_POST['Seite1']['wert1'];
$_SESSION['Seiten'][0][1]=$_POST['Seite1']['wert2'];
// und so weiter und so fort. Danach auf Seite 9 durchs Array durch
?>
Auf jeden Fall sollte man es Session basierend lösen, egal ob mit so einem werte Array wie hier oder wie in der Andromir vorgeschlagenen Version, daß jede Seite direkt auf "richtig/falsch" bewertet wird, weil man ansonsten nach dem Abschicken jedes Formulars die Werte der vorherigen Formulare "mit rumschleppt". Das ist Käse.
Die Array Option in der nur die Werte festgehalten werden, hat den Vorteil, daß man nochmal zurückgehen kann ( wenn man denn diese Option, die recht aufwändig ist, programmieren will ) und das Programm noch die User eingegebenen Werte hat.
Nuja, happy day und so.
Ich habe keine Signatur. Dieser Satz kein Verb.
Danke mal für die Tipps ihr beiden. Ich mach mich da gleich mal ans Werk.
Also Bisher hab ich es so gemacht das jedes Form pro Seite auch eine eigene Schleife erhalten hat und somit wird jede Seite direkt auf richtig / falsch geprüft. Das auf der letzten Seite soll ja nur nochmal eine globale Zusammenfassung sein.
Danke, sollte das nicht so richtig wollen lass ich nochmal von mir hören. Aber zuerst probiere ich es mal aus.![]()
Das Leben ist schön -
Lehren ist die schönste Methode zu lernen.
so, da bin ich wieder. Leider bekomme ich die Kurve nicht so richtig.
Es sind vorerst ma 2 Probleme die ich habe.
Für jede Seite existiert ein Session-array. Somit habe ich vier Sessions
$_SESSION['voc']
$_SESSION['vocV']
$_SESSION['antwort']
$_SESSION['text']
Habe ich denn nun die Möglichkeit diese vier Sessions zu einer zusammenzufassen damit auf der letzten Seite der Zugriff etwas leichter wird. Denn nun brauche ich ja, im gegensatz zu den vorhergegangen Seiten, alle richtigen Antworten aller Sessions in der selben foreach-Schleife.
die nächste Frage. Wie kann ich die richtigen Antworten zählen lassen damit ich einen Wert erhalte mit dem man rechnen kann. Ich habe es mit count() versucht, erhalte aber bei z. B. drei richtigen Antworten anstatt die Zahl 3, nur dreimal die 1.
Das Leben ist schön -
Lehren ist die schönste Methode zu lernen.
geht alles prima, und als Referenz belastet es nicht.PHP-Code:$voc =& $_SESSION['voc'];
$vocV =& $_SESSION['vocV'];
$antwort =& $_SESSION['antwort'];
$text =& $_SESSION['text'];
echo count($voc);
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
O.K. Ich hab das gleich mal ausprobiert. So werden alle Inhalte des arrays gezählt. Ich brauche aber ja nur die richtigen Antworten. Ich habe das mal so versucht.
Aber ich komme wieder nur bei drei richtigen auf drei Einsen anstatt eine 3.PHP-Code:<?php
error_reporting(E_ALL);
session_start();
if($_SESSION['voc'] || $_SESSION['vocV'] || $_SESSION['antwort'] || $_SESSION['text'])
{
$total = array(
0 => array('antwort' => 'Car'),
1 => array('antwort' => 'House'),
2 => array('antwort' => 'Book'),
3 => array('antwort' => 'Name'),
4 => array('antwort' => 'Window'),
5 => array('antwort' => 'Street'),
6 => array('antwort' => 'Movie'),
7 => array('antwort' => 'Time'),
8 => array('antwort' => 'Father'),
9 => array('antwort' => 'Animal'),
10 => array('antwort' => 'Mesa'),
11 => array('antwort' => 'Cabeça'),
12 => array('antwort' => 'Terra'),
13 => array('antwort' => 'Cama'),
14 => array('antwort' => 'Mulher'),
15 => array('antwort' => 'Irmão'),
16 => array('antwort' => 'Céu'),
17 => array('antwort' => 'Cabelo'),
18 => array('antwort' => 'Fogo'),
19 => array('antwort' => 'Estrela'),
20 => array('antwort' => 'go'),
21 => array('antwort' => 'see'),
22 => array('antwort' => 'have'),
23 => array('antwort' => 'do'),
24 => array('antwort' => 'can'),
25 => array('antwort' => 'run'),
26 => array('antwort' => 'come'),
27 => array('antwort' => 'fly'),
28 => array('antwort' => 'cry'),
29 => array('antwort' => 'listen'),
30 => array('antwort' => 'pegar'),
31 => array('antwort' => 'amar'),
32 => array('antwort' => 'precisar'),
33 => array('antwort' => 'fumar'),
34 => array('antwort' => 'comer'),
35 => array('antwort' => 'saber'),
36 => array('antwort' => 'esquecer'),
37 => array('antwort' => 'deixar'),
38 => array('antwort' => 'tentar'),
39 => array('antwort' => 'cortar'),
40 => array('antwort' => 'The telephone is ringing.'),
41 => array('antwort' => 'Of course can I help you.'),
42 => array('antwort' => 'No, they aren\'t.'),
43 => array('antwort' => 'I am 18 years old.'),
44 => array('antwort' => 'Yes, I\'d like to.'),
45 => array('antwort' => 'He studies in New York.'),
46 => array('antwort' => 'fife'),
47 => array('antwort' => 'No, I\'ll go there by car.'),
48 => array('antwort' => 'I\'ll'),
49 => array('antwort' => 'fiveteen'),
50 => array('antwort' => 'good'),
51 => array('antwort' => 'birthday'),
52 => array('antwort' => 'years'),
53 => array('antwort' => 'classmates'),
54 => array('antwort' => 'parents'),
55 => array('antwort' => 'bike'),
56 => array('antwort' => 'bake'),
57 => array('antwort' => 'drinking')
);
foreach($total as $key => $value)
{
$voc =& $_SESSION['voc'][$key];
$vocV =& $_SESSION['vocV'][$key];
$antwort =& $_SESSION['antwort'][$key];
$text =& $_SESSION['text'][$key];
if(isset($voc[$key]))
{
if($voc == $value['antwort'])
{
echo count($voc);
}
}
}
}
?>
Das Leben ist schön -
Lehren ist die schönste Methode zu lernen.
Also ich nerve jetzt einfach nochmal. Da ich das ca. 600 Zeilen lange Script jetzt umgeschrieben habe, aber irgendwie trozdem nicht dahinter komme.
Konkret gefragt:
Wie bekomme ich das Array [test] durch eine foreach-Schleife?
Bin echt fast schon am verzweifeln und kurz davor das ganze Ding hinzuschmeissen. Meine bisheriger Versuch sehen so aus.Code:Array ( [test] => Array ( [1] => Array ( [0] => car [1] => house [2] => book [3] => name [4] => window [5] => street [6] => movie [7] => time [8] => father [9] => animal [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => [18] => [19] => ) [2] => Array ( [20] => go [21] => see [22] => have [23] => do [24] => can [25] => run [26] => come [27] => fly [28] => cry [29] => listen [30] => [31] => [32] => [33] => [34] => [35] => [36] => [37] => [38] => [39] => ) [3] => Array ( [40] => The telephone is ringing. [41] => Of course can I help you. [42] => No, they aren\'t. [43] => I am 18 years old. [44] => Yes, I\'d like to. [45] => He studies in New York. [46] => fife [47] => No, I\'ll go there by car. [48] => I\'ll [49] => fiveteen ) ) )
Ich habe das Array $aufgaben etwas gekürzt. Das Problem ist das ich nicht weiss wie ich in der foreach-Schleife $_SESSION['test'][1], $_SESSION['test'][2] und $_SESSION['test'][3] einbinden kann.PHP-Code:<?php
session_start();
echo "<pre>" . print_r($_SESSION, true) . "</pre>";
if(isset($_SESSION['test']))
{
if(get_magic_quotes_gpc() && isset($_SESSION['test']))
{
$_SESSION['test'] = array_map('stripslashes', $_SESSION['test']);
}
// Alle Aufgaben in einem Array ($aufgaben) sammeln
// Der Wert des Arrays ($aufgaben) ist ein neues Array welches Fragen/Antworten und einen Prüfschlüssel['richtig']
$aufgaben = array(
0 => array(
'frage' => 'Carro',
'antwort' => array('Car'),
'richtig' => 0
),
1 => array(
'frage' => 'Casa',
'antwort' => array('House'),
'richtig' => 0
),
2 => array(
'frage' => 'Livro',
'antwort' => array('Book'),
'richtig' => 0
),
3 => array(
'frage' => 'Nome',
'antwort' => array('Name'),
'richtig' => 0
),
4 => array(
'frage' => 'Janela',
'antwort' => array('Window'),
'richtig' => 0
),
5 => array(
'frage' => 'Rua',
'antwort' => array('Street'),
'richtig' => 0
),
6 => array(
'frage' => 'Filme',
'antwort' => array('Movie'),
'richtig' => 0
),
7 => array(
'frage' => 'Tempo',
'antwort' => array('Time'),
'richtig' => 0
),
8 => array(
'frage' => 'Pai',
'antwort' => array('Father'),
'richtig' => 0
),
9 => array(
'frage' => 'Animal',
'antwort' => array('Animal'),
'richtig' => 0
),
10 => array(
'frage' => 'Table',
'antwort' => array('Mesa'),
'richtig' => 0
),
11 => array(
'frage' => 'Head',
'antwort' => array('Cabeça'),
'richtig' => 0
),
12 => array(
'frage' => 'Earth',
'antwort' => array('Terra'),
'richtig' => 0
),
13 => array(
'frage' => 'Bed',
'antwort' => array('Cama'),
'richtig' => 0
),
14 => array(
'frage' => 'Woman',
'antwort' => array('Mulher'),
'richtig' => 0
),
15 => array(
'frage' => 'Brother',
'antwort' => array('Irmão'),
'richtig' => 0
),
16 => array(
'frage' => 'Sky',
'antwort' => array('Céu'),
'richtig' => 0
),
17 => array(
'frage' => 'Hair',
'antwort' => array('Cabelo'),
'richtig' => 0
),
18 => array(
'frage' => 'Fire',
'antwort' => array('Fogo'),
'richtig' => 0
),
19 => array(
'frage' => 'Star',
'antwort' => array('Estrela'),
'richtig' => 0
),
);
// Nummerierung auf 0 setzten
$nr = 0;
// Foreach um das Array $aufgaben zu durchlaufen
foreach($aufgaben as $keyaufgaben => $valueaufgaben)
{
// Bei jeder Frage Nummer um eins erhöhen
// Frage Ausgeben
$nr = $nr + 1;
echo '<b>' . " $nr. " . $valueaufgaben['frage'] . '</b><br />';
// Foreach um die Arrays ( = Values von $aufgaben) zu durchlaufen
// Diese Arrays sind die Werte des Arrays $aufgaben
// $valueaufgaben['antworten'] = array_expression
foreach($valueaufgaben['antwort'] as $keyantworten => $valueantworten)
{
// Arrays ohne Inhalt, richtige Antwort ausgeben
if(empty($_SESSION['test'][$keyaufgaben]) && $valueaufgaben['richtig'] == $keyantworten)
{
echo '<font color="#ff0000">' . $valueantworten . '</font> You haven´t answered this question!<p />';
}
// Postarray auf Inhalt prüfen
// $keyaufgaben greift auf die einzelnen Aufgaben (Frage/Antwort/Vergleichswert 'richtig') zu
// $keyantworten greift auf das Array mit den einzelnen Antworten der Aufgaben zu
if(isset($_SESSION['test'][$keyaufgaben][$keyantworten]))
{
// Wenn Post dem Wert der Arrays mit dem Index 'antworten' entspricht
// und der Index 'antworten' mit dem Wert des Index 'richtig' übereinstimmt
// Richtige Antwort in grün ausgeben
if($_SESSION['test'][$keyaufgaben] == $valueantworten && $valueaufgaben['richtig'] == $keyantworten)
{
echo '<font color="#00cc00">' . $_SESSION['test'][$keyaufgaben] . "</font><p />";
}
// Wenn Post einen anderen Wert des Index 'antworten' entspricht
// Falsche Antwort in rot ausgeben
// Hier wird die falsche Antwort ausgegeben, der key['richtig'] wird nicht mit den $keyantworten verglichen
elseif($_SESSION['test'][$keyaufgaben] == $valueantworten)
{
echo '<font color="#ff0000">' . $_SESSION['test'][$keyaufgaben] . '</font><p />';
}
}
}
}
}
?>
Das Leben ist schön -
Lehren ist die schönste Methode zu lernen.
entweder direkt
oder verschachteltPHP-Code:foreach ($_SESSION['test'][1] as $key => $value) {}
PHP-Code:foreach ($_SESSION['test'] as $subarray) {
foreach ($subarray as $key => $value) {}
}
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
dann ist es kein array, also vorher abfragen:
PHP-Code:if (is_array($_SESSION['test'])) {
foreach ($_SESSION['test'] as $subarray) {
if (is_array($subarray)) {
foreach ($subarray as $key => $value) {}
}
}
}
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Also steffen, zuerst mal ein dickes Danke für die Hilfestellung. Aber ich glaube ich brauche noch etwas bis ich´s hab. Das ist gerade echt ne Herausforderung für mich.
Wenn ich es nun so schreibe.
...erhalte ich als Ausgabe dreimal das Wort Array. Nun nehme ich mal an das es sich hierbei um die $_SESSION['test'][1], [2] und [3] handelt. Alerdings erhalte ich beim $subarray keine Ausgabe. Wenn ich es richtig verstanden habe stellt $subarray nun die Arrays innerhalb der $_SESSION['test']-arrays dar, oder? Ich post mal noch ein Formular, das von der ersten Seite. Im Grunde habe ich alle gleich aufgebaut, also auf der zweiten Seite geht es dan mit name="test[20]" weiter und auf der dritten dann mit name="test[40]" usw.PHP-Code:<?php
error_reporting(E_ALL);
session_start();
if(isset($_SESSION['test']))
{
if(get_magic_quotes_gpc() && isset($_SESSION['test']))
{
$_SESSION['test'] = array_map('stripslashes', $_SESSION['test']);
}
// Alle Aufgaben in einem Array ($aufgaben) sammeln
// Der Wert des Arrays ($aufgaben) ist ein neues Array welches Fragen/Antworten und einen Prüfschlüssel['richtig']
$aufgaben = array(
0 => array(
'frage' => 'Carro',
'antwort' => array('Car'),
'richtig' => 0
),
1 => array(
'frage' => 'Casa',
'antwort' => array('House'),
'richtig' => 0
),
2 => array(
'frage' => 'Livro',
'antwort' => array('Book'),
'richtig' => 0
),
3 => array(
'frage' => 'Nome',
'antwort' => array('Name'),
'richtig' => 0
),
4 => array(
'frage' => 'Janela',
'antwort' => array('Window'),
'richtig' => 0
),
5 => array(
'frage' => 'Rua',
'antwort' => array('Street'),
'richtig' => 0
),
6 => array(
'frage' => 'Filme',
'antwort' => array('Movie'),
'richtig' => 0
),
7 => array(
'frage' => 'Tempo',
'antwort' => array('Time'),
'richtig' => 0
),
8 => array(
'frage' => 'Pai',
'antwort' => array('Father'),
'richtig' => 0
),
9 => array(
'frage' => 'Animal',
'antwort' => array('Animal'),
'richtig' => 0
),
);
if (is_array($_SESSION['test']))
{
foreach ($_SESSION['test'] as $subarray)
{
echo $_SESSION['test'] . "<br/>";
if (is_array($subarray))
{
foreach ($subarray as $key => $value)
{
echo $subarray['$key'];
}
}
}
}
}
?>
Nun muss ich auf der letzten Seite, eben auf die richtigen Antworten zugreifen und das von allen Seiten. Die Inhalte kommen ja an, hab´s ja mit print_r getestet. Ich schaffe es nur nicht auf alle zuzugreifen. In meinen bestimmt schon 30 verschiedenen versuchen, konnte ich nur das letzte Array ausgeben, weil die vorigen überschrieben wurden.PHP-Code:<?php
ini_set( 'session.use_only_cookies', '1' );
ini_set( 'session.use_trans_sid', '0' );
session_start();
if(isset($_POST['submit']))
{
for($i=0; $i < count($_POST['test']); $i++)
{
header('location: index2.php');
}
}
$_SESSION['test'][1] = $_POST['test'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Sascha Dreher" />
<title>English Test / Page 1</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<h1>Page 1 / Vocabulary / Nouns</h1>
Portuguese - Inglês<p></p>
1. Carro - <input type="text" name="test[0]" value="<?php echo $_POST['test']; ?>" /><br />
2. Casa - <input type="text" name="test[1]" value="<?php echo $_POST['test']; ?>" /><br />
3. Livro - <input type="text" name="test[2]" value="<?php echo $_POST['test']; ?>" /><br />
4. Nome - <input type="text" name="test[3]" value="<?php echo $_POST['test']; ?>" /><br />
5. Janela - <input type="text" name="test[4]" value="<?php echo $_POST['test']; ?>" /><br />
6. Rua - <input type="text" name="test[5]" value="<?php echo $_POST['test']; ?>" /><br />
7. Filme - <input type="text" name="test[6]" value="<?php echo $_POST['test']; ?>" /><br />
8. Tempo - <input type="text" name="test[7]" value="<?php echo $_POST['test']; ?>" /><br />
9. Pai - <input type="text" name="test[8]" value="<?php echo $_POST['test']; ?>" /><br />
10. Animal - <input type="text" name="test[9]" value="<?php echo $_POST['test']; ?>" /><br />
<p></p><br />
Inglês - Portuguese<p></p>
11. Table - <input type="text" name="test[10]" value="<?php echo $_POST['test']; ?>" /><br />
12. Head - <input type="text" name="test[11]" value="<?php echo $_POST['test']; ?>" /><br />
13. Earth - <input type="text" name="test[12]" value="<?php echo $_POST['test']; ?>" /><br />
14. Bed - <input type="text" name="test[13]" value="<?php echo $_POST['test']; ?>" /><br />
15. Woman - <input type="text" name="test[14]" value="<?php echo $_POST['test']; ?>" /><br />
16. Brother - <input type="text" name="test[15]" value="<?php echo $_POST['test']; ?>" /><br />
17. Sky - <input type="text" name="test[16]" value="<?php echo $_POST['test']; ?>" /><br />
18. Hair - <input type="text" name="test[17]" value="<?php echo $_POST['test']; ?>" /><br />
19. Fire - <input type="text" name="test[18]" value="<?php echo $_POST['test']; ?>" /><br />
20. Star - <input type="text" name="test[19]" value="<?php echo $_POST['test']; ?>" /><br />
<input type="submit" name="submit" value="proxima pagina" />
</form>
</body>
</html>
Sorry, ich hoff ihr habt noch ein bissle Gedult mit mir?
Das Leben ist schön -
Lehren ist die schönste Methode zu lernen.
das ist Unsinn, und der Grund des Überschreibens. Wenn schon, dannPHP-Code:$_SESSION['test'][1] = $_POST['test'];
PHP-Code:$_SESSION['test'][] = $_POST['test'];
PHP-Code:foreach ($_SESSION['test'] as $subarray)
{
#echo $_SESSION['test'] . "<br/>"; ?????
if (is_array($subarray))
{
foreach ($subarray as $key => $value)
{
#echo $subarray['$key']; ?????
echo 'Key: ' . $key . ' Wert: ' . $value . '<br />';
// oder wenn value auch wieder ein Array ist
echo 'Key: ' . $key . ' Wert: ' . print_r($value, true) . '<br />';
}
}
}
}
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Hey steffen,
also nochmals Danke für deine Mühe, aber es will einfach nicht und bevor es mir jetzt noch den letzte Nerv raubt, lege ich die Sache vorerst mal auf die Seite und versuche es dann vielleicht in ein, zwei Wochen nochmal.
Das Problem ist immernoch das, das $subarray nix ausspuckt.
Ich hab den Test hier mal hochgeladen damit ihr ihn euch mal anschauen könnt. Mein kleiner Englischtest
Ihr könnt das Form auch ohne Inhalt abschicken. Klick euch mal durch dann könnt ihr euch mal die Ausgabe wie sie bis jetzt ist anschauen.
Das ist noch das erste Script. Es beinhaltet also vier verschieden Sessions. Es ist allerdings noch nicht mit CSS bearbeitet.
Das Leben ist schön -
Lehren ist die schönste Methode zu lernen.
Es muss ja auch
sein, wenn ich mich jetzt nicht total irrePHP-Code:foreach ($_SESSION['test']['0'] as $subarray)
Ansonsten mach doch mal nach dem Abschicken ein
echo '<pre>'.$_SESSION['test'].'<>';
Um zu sehen, ob das Array korrekt aufgebaut ist..
Geändert von Adromir (22.03.2009 um 22:30 Uhr)
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)