• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Array() mit Formular übergeben

Status
Für weitere Antworten geschlossen.

Joli

Neues Mitglied
Tach zusammen,
ich bin grad am arbeiten an einem neuen Projekt und bin jetzt beim Herzstück des Projekts angekommen. Nur jetzt komm ich nicht weiter. Mein Problem:

Ich hab ein Formular, bei dem man die Übersetzung des angezeigten Worts in ein input-Feld schreibt.
Jetzt will ich, dass die ID des Wortes (aus der DB) in einem Array gespeichert wird und dann immer wieder weitergeleitet wird. Bei jedem neuen Wort wird dann im Array die neue ID hinzugefügt. Das Array wird dann am Ende gespeichert.

Jetzt das eigl. Problem:
Wie übergebe ich das komplette Array mithilfe des Formulars an die nächste Seite, so dass ich dann das komplette Array hab und die nächste ID hinzufügen kann?


Versteht ihr was ich meine?
mfg
Joli
 
Werbung:
Werbung:
verrate uns mal was du realisieren möchtest, nicht wie :wink:

ok

Also ich mache einen Vokabeltainer. Bei der Abfrage wird immer das Deutsche (bzw. englische) Wort angezeigt. Im input-Feld daneben muss man dann das dementsprechende englische (bzw. deutsche) Wort reintippen.
Nach dem Absenden wird überprüft, ob die Eingabe korrekt war und das Ergebnis statistisch in einer Datenbank festgehalten, also zum Beispiel für das Wort "Hallo" , 3 mal richtig, 3 mal falsch, Note also 3.
Zusätzlich möchte ich realisieren, dass man eine Abfrage speichern kann, also zu einem späteren Zeitpunkt fortsetzen. Dazu müsste ich die ID der schon abgefragten Wörter speichern. Diese wollte ich in einem Array speichern und immer wieder mit der nächsten ID füllen. Das Array hätte ich dann in einer .txt Datei auf dem Server gespeichert. Beim Fortsetzen wird dann einfach überprüft ob die jeweilige ID schon im Array ist.

Das Problem ist die übergabe des Arrays an die jeweilig nächste Seite...

Ich hab bislang nur die Idee mit dem Array gehabt.
 
Werbung:

PHP:
<?
session_start();
$ids = array(2,4,6,7,8,9,5);
$_SESSION['wordid'] = $ids;
?>

Auf der Nächsten seite dann

PHP:
<?
session_start();
$ids = $_SESSION['wordid'];
$ids[] = 5;
$_SESSION['wordid'] = $ids;
?>
so müsste es theoretisch gehn?

hab grad herausgefunde, dass so wie ich es machen wollte, es nicht geht.
Mit rerialize(); soll es auch noch funktioneren, doch leider werd ich aus der Beschreibung nicht schlau

// Edit:
OK, funktioniert!


thx @ all
 
Zuletzt bearbeitet:
Weiteres Problem: MySQL-Syntax

Soo hab nochmal ein Problem, ich hab mir gedacht bevor ich einen neuen Fred aufmach und das Forum mit meinen Problemen belästige, schreib ich im alten weiter:grin::grin::grin:

OK...
hier zum Problem...

Ich muss/will eine für meine Ansprüche seeeeehr komplexe Datenbankabfrage auf die Reihe bringen...
Ich sag lieber gleich was ich realisieren möchte, anstatt wie. dankö freak131 ;)

Ich hab zwei Tabellen (Tabellen sind bei jedem User anderster, werden über Funktionen in die Abfrage "gebracht"):

voc_de_en
Felder: id | lang1 | lang2 | klasse | verb
mögliche inhalte: 1 | Hallo | hello | 5. Klasse | no


stat_joli_1
Felder: id | vocid | anzahl | richtig | falsch | note
mögliche inhalte: 1 | 1 | 6 | 3 | 3 | 3,0

Kleine Erklärung:
voc_de_en enthält die Informationen zu den jeweiligen Vokabeln
stat_joli_1 enthält die Auswertung der Vokabeln, beide Tabellen sind sousagen über die vocid "verknüpft"

Der User kann über ein Suchfeld, nach bestimmen Vokabeln bzw. nach alle verfügbaren Vokabeln aus voc_de_en suchen. Zusätzlich kann er das Suchergebnis mit drei Kritierien eingrenzen, diese wären Klasse (1. -13. Klasse) Verb (jo, no, egal) und schon getestet (ja, nein, egal).
Bei der Ausgabe der Suchergebnisse sollen folgende Felder ausgegeben werden: lang1, lang2, klasse, richtig, falsch, anzahl, note. Das Problem besteht jedoch über beide Tabelle die Abfrage auszuführen und gleichzeitig alle Kriterien zu beachten...

Mit meinem Versuch bin ich kläglich gescheitert, ich hab die Kriterien mithilfle von If-Abfragen, die vor der Query gemacht werden, in eine Variable gepackt und diese dann in die Hauptquery eingesetzt.

Ich hoff ihr versteht was ich erreichen möchte *grins*

schonmal viiiielen Dank

//EDIT:
so sah einer meiner Versuche aus:

PHP:
<?
$query = "SELECT voc_de_en.*, stat_joli_1.* FROM voc_de_en, stat_joli_1 WHERE (voc_de_en.lang1 LIKE '%%' OR voc_de_en.lang2 LIKE '%%') AND stat_joli_1.anzahl != '' AND voc_de_en.verb == 'jo' ORDER BY voc_de_en.lang1 ASC";
?>

in dem Beispiel fehlt noch das Kriterium "klasse"
 
Zuletzt bearbeitet:
ich verstehe leider nicht so ganz wo genau dein problem jetzt liegt.. kommt enie fehlermeldung? wenn ja, welche?

dann würde ich für den status einer vokabel, ob diese ein verb ist oder nicht oder es egal ist keinen string wie "jo" "no" o.ä. verwenden sondern diese spalte als (int) definieren und z.B. die 0 für no, die 1 für jo udn die 2 für egal festlegen..

genauso würde ich in der spalte für die Klasse nur die Zahl speichern also 1, 2, 3 usw., das Wort Klasse kannst du ja auch nach dem auslesen hinzuschreiben, denn da wäre die abfrage einfach(er)


PHP:
<?php 
$query = "SELECT 
                       voc_de_en.*, 
                       stat_joli_1.* 
              FROM 
                       voc_de_en 
              JOIN 
                       stat_joli_1 
              ON 
                       voc_de_en.id = stat_joli_1.vocid 
              WHERE 
                       (voc_de_en.lang1 LIKE '%begriff%' 
              OR 
                       voc_de_en.lang2 LIKE '%begriff%') 
              AND 
                       stat_joli_1.anzahl != '' 
              AND 
                       voc_de_en.verb == 'jo' 
              AND 
                       voc_de_en.klasse = '5' 
             ORDER BY 
                       voc_de_en.lang1 
             ASC
"; 
?>
 
Werbung:
@asipak

danke schonmal.
Das mit den Verknüpfen hast du wohl falsch verstanden:wink:
Das Verknüpfen hat nichts mit der Query zu tun, sie ist lediglich für mich wichtig, dass ich bei der Ausgabe die Auswertung die jeweilige Vokabel zu ordnen kann.

Ich poste jetzt mal ein Teil des Codes

PHP:
	<?
	if($tested == "ja") $testadd = "AND stat_joli_1.anzahl != '' "; // Überpfrüfung ob die Vokabel schonmal getestet wurde, der dementsprechene String wird dann in die Query eingesetzt.
	elseif($tested == "nein") $testadd = "AND stat_joli_1.anzahl == '' ";
	if($verb == "ja") $verbadd = "AND voc_de_en.verb == 'jo' "; // genauso wie bei Getested
	elseif($verb == "nein") $verbadd = "AND voc_de_en.verb == 'no' ";
	if($klasse != "egal") $klasseadd ="AND voc_de_en.klasse = '$klasse' "; 
	$query = "SELECT 
                       voc_de_en.*, 
                       stat_joli_1.* 
              FROM 
                       voc_de_en 
              JOIN 
                       stat_joli_1 
              WHERE 
                       (voc_de_en.lang1 LIKE '%$begriff%' 
              OR 
                       voc_de_en.lang2 LIKE '%$begriff%') 
				$testadd
				$verbadd
                      $klasseadd
             ORDER BY 
                       voc_de_en.lang1 
             ASC
";	echo $query;
	$sql = mysql_query($query);
	while($ds = mysql_fetch_assoc($sql)) {
	$ds1 = mysql_fetch_assoc(mysql_query("SELECT richtig, falsch, note, anzahl FROM stat_joli_1 WHERE vocid = '".$ds['id']."'"));
	if($ds1 == false) unset($ds1);
	?>
	<tr onMouseOver="bg=this.style.backgroundColor;cl=this.style.color;this.style.color='black';fett=this.style.fontWeight;this.style.fontWeight='bold';this.style.backgroundColor='#CCC';"
	onMouseOut="this.style.backgroundColor=bg;this.style.fontWeight=fett;this.style.color=cl;">
		<td><input type="checkbox" name="id" value="<?= $ds['id'] ?>" /></td>
		<td><?= $ds['lang1'] ?></td>
		<td><? if($ds['verb'] == "jo") echo "to " ?><?= $ds['lang2'] ?></td>
		<td><?= $ds['klasse'] ?>. Klasse</td>
		<td class="center"><?= $ds1['richtig'] ?></td>
		<td class="center"><?= $ds1['falsch'] ?></td>
		<td class="center"><?= $ds1['anzahl'] ?></td>
		<td class="center"><?= $ds1['note'] ?></td>
	</tr>
	<?
	}
	?>

Sobald ich bei Verb oder Getestet nicht "egal" hab, dann kommt folgender Fehler:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Voctrainer\#function.php on line 838
mit folgendem Query:
PHP:
<?
$query = "SELECT voc_de_en.*, stat_joli_1.* FROM voc_de_en JOIN stat_joli_1 WHERE (voc_de_en.lang1 LIKE '%%' OR voc_de_en.lang2 LIKE '%%') AND voc_de_en.verb == 'jo' AND voc_de_en.klasse = '10' ORDER BY voc_de_en.lang1 ASC ";
?>
Wenn ich die Klasse eingrenz dann funktioniert es einwandfrei.
 
ist $klasse denn definiert und hat sie einen wert?

schreib mal statt

$sql = mysql_query($query);


lieber das

$sql = mysql_query($query) OR die (mysql_error());

und poste dann den fehler oder möglicherweise hilft dir das alleine schon weiter
 
ist $klasse denn definiert und hat sie einen wert?

ja ist sie. Wenn ich die Klasse einschränkt dann funktonier es ja auch... nur nicht wenn ich "Getestet" oder "Verb" einschränk..
schreib mal statt

$sql = mysql_query($query);


lieber das

$sql = mysql_query($query) OR die (mysql_error());

und poste dann den fehler oder möglicherweise hilft dir das alleine schon weiter
Folgender Fehler:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== 'no' AND voc_de_en.klasse = '5' ORDER BY ' at line 13
 
Werbung:
hmm kannst du mal den ganze code posten bitte, also noch zusätzlich den teil der vor deinem auszug kommt?

würde jetzt darauf spekulieren, dass die variablen $tested und $verb gar nicht oder falsch gesetzt wurden

//EDit: du lässt dir doch vorher den query ausgeben, poste den bitte auch mal
 
Zuletzt bearbeitet:
hmm kannst du mal den ganze code posten bitte, also noch zusätzlich den teil der vor deinem auszug kommt?

würde jetzt darauf spekulieren, dass die variablen $tested und $verb gar nicht oder falsch gesetzt wurden

//EDit: du lässt dir doch vorher den query ausgeben, poste den bitte auch mal

sry, hab gerade einen Denkfehler von mir entdeckt:oops::oops:
Die Verknüpfung sprich "On voc_de_en.id = stat_joli_1.vocid" brauchen wir doch. Was ich dir vergessen hab zu sagen ist, dass in der Tabelle stat_joli_1 nur die Statistik von den Vokabeln, die shcon getestet wurden, drin sind.
Der vermeintliche Fehler liegt, wohl daran, dass bei der Abfrage nur die Vokabeln ausgegeben werden, die schon getestet wurden, sprich alle Datensätze, die die gleiche Vocid haben.
Wie schaffe ich es, dass aber Vokabeln, die noch nicht abgefragt wurden, bei der Ausgabe berücksichtigt werden?



so hier der ganze Code (ist eine Funktione, die variablen $tested, $verb, $klasse und $begriff sind die Parameter)

PHP:
<?php
function search_voc_abfrage($begriff, $tested, $verb, $klasse) {
// Funktion nach einen Begriff zu suchen
if(get_vocfile($_SESSION['user']) !== "keine geladen") {
echo "Testet:".$tested;
echo "Verb:".$verb;
echo "Klasse:".$klasse;
	$ds1 = mysql_fetch_assoc(mysql_query("SELECT lang1, lang2 FROM vocfiles WHERE id = '".get_vocfile_id($_SESSION['user'])."'"));
	?>
	<table class="tbl">
	<tr>
		<td class="boldbb">&nbsp;</td>
		<td class="boldbb" style="width:170px;"><?= $ds1['lang1'] ?></td>
		<td class="boldbb" style="width:170px;"><?= $ds1['lang2'] ?></td>
		<td class="boldbb" style="width:80px;">Klasse</td>
		<td class="boldbb"><img src="pics/right.jpg" alt="Richtig" /></td>
		<td class="boldbb"><img src="pics/false.jpg" alt="Falsch" /></td>
		<td class="boldbb">Gesamt</td>
		<td class="boldbb">Ø-Note</td>
	</tr>
	<?
	if($tested == "ja") $testadd = "AND ".get_stat_tbl().".anzahl != '' ";
	elseif($tested == "nein") $testadd = "AND ".get_stat_tbl().".anzahl == '' ";
	if($verb == "ja") $verbadd = "AND ".get_vocfile($_SESSION['user']).".verb == 'jo' ";
	elseif($verb == "nein") $verbadd = "AND ".get_vocfile($_SESSION['user']).".verb == 'no' ";
	if($klasse != "egal") $klasseadd ="AND ".get_vocfile($_SESSION['user']).".klasse = '$klasse' "; 
	$query = "SELECT 
                       ".get_vocfile($_SESSION['user']).".*, 
                       ".get_stat_tbl().".* 
              FROM 
                       ".get_vocfile($_SESSION['user'])." 
              JOIN 
                       ".get_stat_tbl()." 
				ON 
                       voc_de_en.id = stat_joli_1.vocid
              WHERE 
                       (".get_vocfile($_SESSION['user']).".lang1 LIKE '%$begriff%' 
              OR 
                       ".get_vocfile($_SESSION['user']).".lang2 LIKE '%$begriff%') 
				$testadd
				$verbadd
				$klasseadd
             ORDER BY 
                       ".get_vocfile($_SESSION['user']).".lang1 
             ASC
";	echo $query;
	$sql = mysql_query($query) OR die (mysql_error());
	while($ds = mysql_fetch_assoc($sql)) {
	$ds1 = mysql_fetch_assoc(mysql_query("SELECT richtig, falsch, note, anzahl FROM ".get_stat_tbl()." WHERE vocid = '".$ds['id']."'"));
	if($ds1 == false) unset($ds1);
	?>
	<tr onMouseOver="bg=this.style.backgroundColor;cl=this.style.color;this.style.color='black';fett=this.style.fontWeight;this.style.fontWeight='bold';this.style.backgroundColor='#CCC';"
	onMouseOut="this.style.backgroundColor=bg;this.style.fontWeight=fett;this.style.color=cl;">
		<td><input type="checkbox" name="id" value="<?= $ds['id'] ?>" /></td>
		<td><?= $ds['lang1'] ?></td>
		<td><? if($ds['verb'] == "jo") echo "to " ?><?= $ds['lang2'] ?></td>
		<td><?= $ds['klasse'] ?>. Klasse</td>
		<td class="center"><?= $ds1['richtig'] ?></td>
		<td class="center"><?= $ds1['falsch'] ?></td>
		<td class="center"><?= $ds1['anzahl'] ?></td>
		<td class="center"><?= $ds1['note'] ?></td>
	</tr>
	<?
	}
	?>
	</table>
	<?
}
else error("Keine Vokabeldatei geladen.");
}

die funktion get_vocfile(); gibt die tabelle voc_de_en zurück
die Funktion get_stat_tbl(); gibt die tabelle stat_joli_1 zurück...

die Variable $tested und $verb werden richtig übergeben, weil wenn cih innerhalb der Funktion echo $verb bzw. echo $tested mache, kommt immer das richtie raus.

Wenn ich jetzt nur Testet eingrenz zum Beispiel auf "Nein" mache, dann kommt folgende Ausgabe mit folgendem Fehler:
Testet:egalVerb:neinKlasse:egal

SELECT voc_de_en.*, stat_joli_1.* FROM voc_de_en JOIN stat_joli_1 ON voc_de_en.id = stat_joli_1.vocid WHERE (voc_de_en.lang1 LIKE '%%' OR voc_de_en.lang2 LIKE '%%') AND voc_de_en.verb == 'no' ORDER BY voc_de_en.lang1 ASC

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== 'no' ORDER BY voc_de_en.lang1 ' at line 15
 
AND voc_de_en.verb == 'no' ORDER BY

ein mysql-vergleich erfolgt nur mit einem Gleichheitszeichen

AND voc_de_en.verb = 'no' ORDER BY

ein != machst du bei mysql mit <>
 
Werbung:
AND voc_de_en.verb == 'no' ORDER BY

ein mysql-vergleich erfolgt nur mit einem Gleichheitszeichen

AND voc_de_en.verb = 'no' ORDER BY

ein != machst du bei mysql mit <>


ah thx...
jetzt kommen keine Fehlermeldungen mehr.

aber wie schaffe ich es, dass auch die Vokabeln ausgegeben werden, die noch nicht abgefragt wurden? Bislang werden nämlich nur die Vokabeln, die auch einen Eintrag in der TAbelle stat_joli_1 haben, angezeigt, weil "ON voc_de_en.id = stat_joli_1" nur die auswählt, die schon da sind.
 
also ich blicke bei deiner tabellenstruktur leider nicht mehr durch, daher würde ich dir empfehlen mache eine separate mysql-abfrage nach den ungetesteten vokabeln

ein paar beispiele für deinen "ungewöhnlichen" stil:

PHP:
if($tested == "ja") $testadd = "AND ".get_stat_tbl().".anzahl != '' ";
    elseif($tested == "nein") $testadd = "AND ".get_stat_tbl().".anzahl == '' ";
eine zustandsprüfung macht man normalerweise über boolesche werte und nicht über strings wie ja oder nein.
zudem bezeichnest du variablen und funktionen in englisch und spaltennamen in deutsch. ist nicht weiter tragisch, aber etwas schwieriger zu merken. dann wie schon gesagt würde ich nicht 5. klasse in einer spalte für die klasse 5 speichern, sondern nur die 5 und bei der anzeige auf der homepage dann das *. Klasse hinzufügen.

und die art wie du den query füllst ist auch geschmacksache :)

PHP:
 OR
                       ".get_vocfile($_SESSION['user']).".lang2 LIKE '%$begriff%')
                $testadd
                $verbadd
                $klasseadd
             ORDER BY

die drei einschnitte kannst du besser so machen

beende den query an dieser stelle einfach
PHP:
$query = "SELECT
                       ".get_vocfile($_SESSION['user']).".*,
                       ".get_stat_tbl().".*
              FROM
                       ".get_vocfile($_SESSION['user'])."
              JOIN
                       ".get_stat_tbl()."
                ON
                       voc_de_en.id = stat_joli_1.vocid
              WHERE
                       (".get_vocfile($_SESSION['user']).".lang1 LIKE '%$begriff%'
              OR
                       ".get_vocfile($_SESSION['user']).".lang2 LIKE '%$begriff%') ";
und dann bau die if - verzweigungen ein

PHP:
if($klasse != "egal") {  
  $query .= "AND ".get_vocfile($_SESSION['user']).".klasse = '$klasse' ";
}

und dann das ende wieder gewöhnlich dranpappen

PHP:
$query .= " ORDER BY
                       ".get_vocfile($_SESSION['user']).".lang1
             ASC
";

ist so viel übersichtlicher finde ich :)
 
also ich blicke bei deiner tabellenstruktur leider nicht mehr durch, daher würde ich dir empfehlen mache eine separate mysql-abfrage nach den ungetesteten vokabeln

Über ne separate Abfrage hab ich mir auch schon Gedanken gemacht, werd ich wohl dann auch machen...

dann wie schon gesagt würde ich nicht 5. klasse in einer spalte für die klasse 5 speichern, sondern nur die 5 und bei der anzeige auf der homepage dann das *. Klasse hinzufügen.

hab ich schon geändert, nachdem du mir es in einem deiner letzten Posts empfholen hast. :wink::wink:

ist so viel übersichtlicher finde ich :)

ja, da muss ich dir wirklcih zzu stimmen :grin::grin:
 
Werbung:
sry, dass ich euch so belästige mit meinen Fehlern:D

mein nächstes Problem:
Ich hab eine Variable $_SESSION['ids']. Diese Variable ist ein Array, es enthält alle IDs der schon abgefragten Vokabel. Nun möchte ich, dass per Zufall ein Datensatz aus einer TAbelle abgerufen wird. Jedoch darf die ID dieses Datensatzes nicht mit einer ID, die in der Variable $_SESSION['ids'] abgespeicherten IDs übereinstimmen. Ich hab schon mehrere Sachen ausprobiiert. So sieht mein Letzer VErsuch aus:

PHP:
for($i = 0; $i < (count($_SESSION['ids']) + 1); $i++) {
	$query = "SELECT id, lang1, lang2, verb FROM ".get_vocfile($_SESSION['user'])." ORDER BY RAND() LIMIT 0,1";
	$sql = mysql_query($query);
	$abf = mysql_fetch_assoc($sql);
	echo "ID:".$abf['id']."<br />";
	for($i = 0; $i < (count($_SESSION['ids'])); $i++) {
		if($_SESSION['ids'][$i] == $abf['id']) continue;
		else {
			$break = 1;
			break;
		}
	}
	
	if($break == TRUE) break;
	else continue;
}

// Ausgabe

Kann mir da jemand helfen?
Wäre euch seehr dankbar.
 
na klar.. :)

erstmal nur die ids einlesen
PHP:
$query = "SELECT id FROM ".get_vocfile($_SESSION['user']);

$moegl_ids = array();
$result = mysql_query($sql) OR die (mysql_error());
while ($row = mysql_fetch_array($result)) {
  if (!in_array($row["id"], $_SESSION["ids"])) {
    $moegl_ids[] = $row["id"];
  }
}
$zufallsid = $moegl_ids[rand(0, count($moegl_ids)-1)];

dann die id verwenden um den datensatz auszulesen, der diese id hat ;)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben