Logic Probleme bei Foreach
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
aufgabe
code
datum
fehler
halbjahr
jahr
montag
not
null
problem
re
sache
schleife
stunde
tabelle
tag
test
text
url
-
So da binn ich wieder habe mal wieder ein tag/re">ref="/tag/problem">Problem bei PHP und drehe mich immer weiter im Kreis.
Das Folgende Schnipsel an Code soll eigentlich nur folgendes machen.
Es gibt 2 Arrays und die arbeite ich mit 2 foreach Schleifen durch
Die eine Schleife soll einen bestimmte Wert für jeden Wert im Array ermitteln und speichern die Zweite foreach Schleif ist in die erste Verschachtelt, diese Schleife soll auch werte aus der DB ermitteln, diese speichern und dann mit den anderen Zusammen in die DB schreiben.
So einmal der Code
(Es momentan ist kein Insert enthalt, weil ich mein DB nicht mit falschen und oder Läastigen Einträgen belasten will. Sobal alle Daten Korreckt vorhanden sind, ist es ein leichtes die Daten in die DB zu bringen. )
<?php include "connect.php"; $Stunde = array("1","2"); $klasse = array("8-a","10-a"); $Tag = "Montag"; $ID = "1"; $Aufgabe = "Test"; foreach($klasse as $klas) { $kla = strtok($klas,"-"); $klaZ = strtok("-"); $sql = "SELECT KlasseID FROM dbo_Klassen WHERE Klasse = '".$kla."' AND KlasseZusatz = '".$klaZ."'"; $result = mysql_query($sql) OR die (mysql_error()); $row = mysql_fetch_object($result); $KlasseID = $row->KlasseID; //Tag ID Bestimmung $sql = "SELECT TagID FROM dbo_Tage WHERE NameLang = '".$Tag."'"; $result = mysql_query($sql); $res = mysql_fetch_object($result); $TagID = $res->TagID; //echo "TagID"." ".$TagID."<br>"; $i= 0; foreach($Stunde as $va) { //Vertretungs ID $sql5 = 'SELECT LehrerID as ID FROM dbo_VertretungsLehrer' . ' WHERE ' . ' dbo_VertretungsLehrer.Stunde = "'.$va.'"' . ' AND ' . ' dbo_VertretungsLehrer.TagID = "'.$TagID.'"' .' LIMIT 0, 60 '; $result = mysql_query($sql5); $res = mysql_fetch_object($result); $VertID = $res->ID; $i++; //Test Ausgaben\\ echo "<br>"; echo "VertID: "." ".$VertID; echo "<br>"; echo "TagID: ".$TagID; echo "<br>"; echo "StundenID: ". $va; echo "<br>"; echo "Aufgabe: ".$Aufgabe; echo "<br>"; echo "KlasseID: ".$KlasseID; echo "<br>"; echo "Datum: ".$Tag; $sql2 = "INSERT INTO dbo_Vertretung ( Datum , LehrerID , StundenID , KlasseID , Aufgabe , VertretungsID ) VALUES ('$TagID','$ID','$va','$KlasseID','$Aufgabe','$VertID.')"; echo "<br>"; echo $sql2; echo "<br>"; if($i == 1) { break; } } }
Da ihr nicht meine DB habt, gebe ich euch mal den output.
Und ne genau beschreibung was net stimmt.
VertID: 2
TagID: 1
StundenID: 1
Aufgabe: Test
KlasseID: 1
Datum: Montag
INSERT INTO dbo_Vertretung ( Datum , LehrerID , StundenID , KlasseID , Aufgabe , VertretungsID ) VALUES ('1','1','1','1','Test','2.')
VertID: 2
TagID: 1
StundenID: 1
Aufgabe: Test
KlasseID: 2
Datum: Montag
INSERT INTO dbo_Vertretung ( Datum , LehrerID , StundenID , KlasseID , Aufgabe , VertretungsID ) VALUES ('1','1','1','2','Test','2.')
Bei VertID sollt nicht das gleiche Stehen.
Die Werte werden aus der DB ermittelt, es wird nach geschaut ob es eine VertID für genau diese Stunde gibt in der DB sind für die Erste Stunde und die zweite Stunde verschiedenen ID´s hinterlegt, doch partu was ich mache ich bekomme immer die gleich ausgegeben.
EDIT:
Fals es nötig sein sollte würde ich den Inhalt meiner DB auch zur Verfügung stellen.
Freue mich über hilfreiche Antworten.
Beitrag zuletzt geändert: 16.8.2011 21:37:48 von xxbashxx -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
nur mal so ne frage am rand:
speicherst du wirklich alle deine sachen unter einem alphanumerischem wert (varchar/string/text/...) ab? IDs sind bei mir meist integer-werte... ist einfacher auszuwerten und lässt sich besser eingrenzen...
und mehr kann man hier wirklich nciht rauslesen... hast zwar viel geschrieben aber es ist nix rüber gekommen, was verwertbar wäre...
cool wäre es -> die foreach-schleife mal zu posten... manchmal verstecken sind fehler in den banalsten sachen...
zusätzlich zum create dump -
Hallo danke für eure Antworten
1) Einmal die Sql Files zum erstellen der Notwendigen Tabellen
dbo_Lehrer
-- Tabellenstruktur für Tabelle `dbo_Lehrer` -- CREATE TABLE `dbo_Lehrer` ( `ID` int(11) NOT NULL auto_increment, `Nachname` varchar(50) default NULL, `Vorname` varchar(50) default NULL, `Anrede` varchar(50) default NULL, `Personalnummer` varchar(50) default NULL, `Username` varchar(15) NOT NULL, `Passwort` varchar(50) NOT NULL, `AdminRechte` tinyint(1) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; -- -- Daten für Tabelle `dbo_Lehrer` -- INSERT INTO `dbo_Lehrer` VALUES (1, 'Test', 'Test', 'Herr', NULL, 'Test', '098f6bcd4621d373cade4e832627b4f6', 1); INSERT INTO `dbo_Lehrer` VALUES (2, 'Peter', 'Hans', NULL, '1', 'Moin', '098f6bcd4621d373cade4e832627b4f6', 0);
dbo_VertetungsLehrer
-- -- Tabellenstruktur für Tabelle `dbo_VertretungsLehrer` -- CREATE TABLE `dbo_VertretungsLehrer` ( `Jahr` int(11) NOT NULL, `HalbJahr` int(11) NOT NULL, `TagID` int(11) default NULL, `Stunde` int(11) default NULL, `LehrerID` int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci; -- -- Daten für Tabelle `dbo_VertretungsLehrer` -- INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 1, 2); INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 2, 1); INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 3, 2); INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 4, 2); INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 5, 2);
dbo_Tage
-- -- Tabellenstruktur für Tabelle `dbo_Tage` -- CREATE TABLE `dbo_Tage` ( `TagID` int(11) NOT NULL, `NameKurz` varchar(10) collate latin1_german1_ci default NULL, `NameLang` varchar(50) collate latin1_german1_ci default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci; -- -- Daten für Tabelle `dbo_Tage` -- INSERT INTO `dbo_Tage` VALUES (2, 'Die', 'Dienstag'); INSERT INTO `dbo_Tage` VALUES (1, 'Mon', 'Montag'); INSERT INTO `dbo_Tage` VALUES (3, 'Mit', 'Mitwoch'); INSERT INTO `dbo_Tage` VALUES (4, 'Don', 'Donnerstag'); INSERT INTO `dbo_Tage` VALUES (5, 'Fre', 'Freitag'); INSERT INTO `dbo_Tage` VALUES (6, 'Sam', 'Samstag');
dbo_Klassen
-- -- Tabellenstruktur für Tabelle `dbo_Klassen` -- CREATE TABLE `dbo_Klassen` ( `KlasseID` int(8) NOT NULL auto_increment, `Jahr` int(11) NOT NULL, `HalbJahr` int(11) NOT NULL, `Klasse` int(11) default NULL, `KlasseZusatz` varchar(50) default NULL, `Text` varchar(50) default NULL, PRIMARY KEY (`KlasseID`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; -- -- Daten für Tabelle `dbo_Klassen` -- INSERT INTO `dbo_Klassen` VALUES (1, 2011, 2, 8, 'a', NULL); INSERT INTO `dbo_Klassen` VALUES (2, 2011, 2, 10, 'a', NULL); INSERT INTO `dbo_Klassen` VALUES (3, 2011, 2, 10, 'b', NULL); INSERT INTO `dbo_Klassen` VALUES (4, 2011, 2, 10, 'c', NULL);
2)
speicherst du wirklich alle deine sachen unter einem alphanumerischem wert (varchar/string/text/...) ab? IDs sind bei mir meist integer-werte... ist einfacher auszuwerten und lässt sich besser eingrenzen...
Wie kommst du darauf das ich eine ID als alphanumerischenwert Speicherer, in meiner DB sind alle ID´s integers.
3)
cool wäre es -> die foreach-schleife mal zu posten... manchmal verstecken sind fehler in den banalsten sachen...
Eigentlich dachte ich ich hätte die oben mit reingegeben, da ist nämlich mein Problem, aber gerne werde ich die hier noch mal reinstellen.
<?php include "connect.php"; $Stunde = array("1","2"); $klasse = array("8-a","10-a"); $Tag = "Montag"; $ID = "1"; $Aufgabe = "Test"; foreach($klasse as $klas) { $kla = strtok($klas,"-"); $klaZ = strtok("-"); $sql = "SELECT KlasseID FROM dbo_Klassen WHERE Klasse = '".$kla."' AND KlasseZusatz = '".$klaZ."'"; $result = mysql_query($sql) OR die (mysql_error()); $row = mysql_fetch_object($result); $KlasseID = $row->KlasseID; //Tag ID Bestimmung $sql = "SELECT TagID FROM dbo_Tage WHERE NameLang = '".$Tag."'"; $result = mysql_query($sql); $res = mysql_fetch_object($result); $TagID = $res->TagID; //echo "TagID"." ".$TagID."<br>"; $i= 0; foreach($Stunde as $va) { //Vertretungs ID $sql5 = 'SELECT LehrerID as ID FROM dbo_VertretungsLehrer' . ' WHERE ' . ' dbo_VertretungsLehrer.Stunde = "'.$va.'"' . ' AND ' . ' dbo_VertretungsLehrer.TagID = "'.$TagID.'"' .' LIMIT 0, 60 '; $result = mysql_query($sql5); $res = mysql_fetch_object($result); $VertID = $res->ID; $i++; //Test Ausgaben\\ echo "<br>"; echo "VertID: "." ".$VertID; echo "<br>"; echo "TagID: ".$TagID; echo "<br>"; echo "StundenID: ". $va; echo "<br>"; echo "Aufgabe: ".$Aufgabe; echo "<br>"; echo "KlasseID: ".$KlasseID; echo "<br>"; echo "Datum: ".$Tag; $sql2 = "INSERT INTO dbo_Vertretung ( Datum , LehrerID , StundenID , KlasseID , Aufgabe , VertretungsID ) VALUES ('$TagID','$ID','$va','$KlasseID','$Aufgabe','$VertID.')"; echo "<br>"; echo $sql2; echo "<br>"; if($i == 1) { break; } } }
-
xxbashxx schrieb:
ist das nach deinem ermessen eine akzeptable ausgabe?
... Bei VertID sollt nicht das gleiche Stehen.
$i: 0
VertID: 2
TagID: 1
StundenID: 1
Aufgabe: Test
KlasseID: 1
Datum: Montag
INSERT INTO dbo_Vertretung (Datum, LehrerID, StundenID, KlasseID, Aufgabe, VertretungsID) VALUES ('1','1','1','1','Test','2.')
$i: 1
VertID: 1
TagID: 1
StundenID: 2
Aufgabe: Test
KlasseID: 1
Datum: Montag
INSERT INTO dbo_Vertretung (Datum, LehrerID, StundenID, KlasseID, Aufgabe, VertretungsID) VALUES ('1','1','2','1','Test','1.')
$i: 0
VertID: 2
TagID: 1
StundenID: 1
Aufgabe: Test
KlasseID: 2
Datum: Montag
INSERT INTO dbo_Vertretung (Datum, LehrerID, StundenID, KlasseID, Aufgabe, VertretungsID) VALUES ('1','1','1','2','Test','2.')
$i: 1
VertID: 1
TagID: 1
StundenID: 2
Aufgabe: Test
KlasseID: 2
Datum: Montag
INSERT INTO dbo_Vertretung (Datum, LehrerID, StundenID, KlasseID, Aufgabe, VertretungsID) VALUES ('1','1','2','2','Test','1.') -
Ja genau das ist es was ich gesucht habe, vllt. könntest du mir ja sagen wo mein Fehler lag, war es ein Denkfehler oder ein syntacktische Fehler oder bin ich völlig Falsch an das Problem herangegangen?
Egal wo der Fehler lag, vielen tausend dank das du mir hilfst
Beitrag zuletzt geändert: 18.8.2011 17:01:26 von xxbashxx -
xxbashxx schrieb:
das war nix aufregendes, sondern nur ein hundsgemeiner denkfehler und natürlich kann ich die lösung mitteilen, nur ich wollte es nicht, bevor du sagst, ok, das is'es! (dein fehler lag im testen! na sowas aber auch ;o)
..., vllt. könntest du mir ja sagen wo mein Fehler lag, war es ein Denkfehler oder ein syntacktische Fehler oder bin ich völlig Falsch an das Problem herangegangen?
deine foreach-schleifen habe unwesentlich geändert, der rest von mir ist natürlich nur für mine qube relevant, kannst einfach ignoriren.<?php // bBox/dev/lima/xxbashxx/logic-probleme-bei-foreach.php #include "connect.php"; $conn = ($c = mysql_connect('bBox', 'root', 'blaaa :o)')) ? $c: exit('<pre>'.print_r(array(mysql_errno(), mysql_error()), true)); create(); $Stunde = array('1', '2'); $klasse = array('8-a', '10-a'); $Tag = 'Montag'; $ID = '1'; $Aufgabe = 'Test'; // ---- outer foreach ---------------------------------------------------------- foreach($klasse as $klas) { $kla = strtok($klas,"-"); $klaZ = strtok("-"); $sql1 = <<< EOT SELECT KlasseID FROM dbo_Klassen WHERE Klasse='$kla' AND KlasseZusatz='$klaZ' EOT; $result = mysql_query($sql1) OR die (mysql_error()); $row = mysql_fetch_object($result); $KlasseID = $row->KlasseID; //Tag ID Bestimmung $sql = <<< EOT SELECT TagID FROM dbo_Tage WHERE NameLang='$Tag' EOT; $result = mysql_query($sql); $res = mysql_fetch_object($result); $TagID = $res->TagID; //echo "TagID"." ".$TagID."<br>"; // ---- inner foreach -------------------------------------------------------- $i = 0; foreach($Stunde as $va) { //Vertretungs ID $sql5 = <<< EOT SELECT LehrerID as ID FROM dbo_VertretungsLehrer WHERE dbo_VertretungsLehrer.Stunde='$va' AND dbo_VertretungsLehrer.TagID='$TagID' LIMIT 0, 60 EOT; $result = mysql_query($sql5); $res = mysql_fetch_object($result); $VertID = $res->ID; #$i++; // und da ist der HUND!!!! siehe weiter unten. $sql2 = <<< EOT INSERT INTO dbo_Vertretung (Datum, LehrerID, StundenID, KlasseID, Aufgabe, VertretungsID) VALUES ('$TagID','$ID','$va','$KlasseID','$Aufgabe','$VertID.') EOT; //Test Ausgaben\\ echo <<< EOT <br />\$i: $i <br /><strong>VertID: $VertID</strong> <br />TagID: $TagID <br />StundenID: $va <br />Aufgabe: $Aufgabe <br />KlasseID: $KlasseID <br />Datum: $Tag <br />$sql2<br /> EOT; if($i == 1) {break;} $i++; // das ist hier kein HUND ;o) } } function create() { query('use `xxbashxx`'); return; query('CREATE DATABASE IF NOT EXISTS `xxbashxx`'); query('use `xxbashxx`'); query('CREATE TABLE IF NOT EXISTS `dbo_Lehrer` ( `ID` int NOT NULL auto_increment, `Nachname` varchar(50) default NULL, `Vorname` varchar(50) default NULL, `Anrede` varchar(50) default NULL, `Personalnummer` varchar(50) default NULL, `Username` varchar(15) NOT NULL, `Passwort` varchar(50) NOT NULL, `AdminRechte` tinyint(1) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 AUTO_INCREMENT=3;'); #query('INSERT INTO `dbo_Lehrer` VALUES (1, \'Test\', \'Test\', \'Herr\', NULL, \'Test\', \'098f6bcd4621d373cade4e832627b4f6\', 1)'); #query('INSERT INTO `dbo_Lehrer` VALUES (2, \'Peter\', \'Hans\', NULL, \'1\', \'Moin\', \'098f6bcd4621d373cade4e832627b4f6\', 0)'); query('CREATE TABLE IF NOT EXISTS `dbo_VertretungsLehrer` ( `Jahr` int(11) NOT NULL, `HalbJahr` int(11) NOT NULL, `TagID` int(11) default NULL, `Stunde` int(11) default NULL, `LehrerID` int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci'); #query('INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 1, 2)'); #query('INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 2, 1)'); #query('INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 3, 2)'); #query('INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 4, 2)'); #query('INSERT INTO `dbo_VertretungsLehrer` VALUES (2011, 2, 1, 5, 2)'); query('CREATE TABLE IF NOT EXISTS `dbo_Tage` ( `TagID` int(11) NOT NULL, `NameKurz` varchar(10) collate latin1_german1_ci default NULL, `NameLang` varchar(50) collate latin1_german1_ci default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci'); #query('INSERT INTO `dbo_Tage` VALUES (2, \'Die\', \'Dienstag\')'); #query('INSERT INTO `dbo_Tage` VALUES (1, \'Mon\', \'Montag\')'); #query('INSERT INTO `dbo_Tage` VALUES (3, \'Mit\', \'Mitwoch\')'); #query('INSERT INTO `dbo_Tage` VALUES (4, \'Don\', \'Donnerstag\')'); #query('INSERT INTO `dbo_Tage` VALUES (5, \'Fre\', \'Freitag\')'); #query('INSERT INTO `dbo_Tage` VALUES (6, \'Sam\', \'Samstag\')'); query('CREATE TABLE IF NOT EXISTS `dbo_Klassen` ( `KlasseID` int(8) NOT NULL auto_increment, `Jahr` int(11) NOT NULL, `HalbJahr` int(11) NOT NULL, `Klasse` int(11) default NULL, `KlasseZusatz` varchar(50) default NULL, `Text` varchar(50) default NULL, PRIMARY KEY (`KlasseID`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 AUTO_INCREMENT=5'); #query('INSERT INTO `dbo_Klassen` VALUES (1, 2011, 2, 8, \'a\', NULL)'); #query('INSERT INTO `dbo_Klassen` VALUES (2, 2011, 2, 10, \'a\', NULL)'); #query('INSERT INTO `dbo_Klassen` VALUES (3, 2011, 2, 10, \'b\', NULL)'); #query('INSERT INTO `dbo_Klassen` VALUES (4, 2011, 2, 10, \'c\', NULL)'); } function query($sql) { echo ($res = mysql_query($sql)) ? "<pre><h5>$sql<hr /></h5></pre>": exit('<pre>'.print_r(array(mysql_errno(), mysql_error()), true)); }
-
Mann das ist ja schon peinlich, oh mann vielen vielen Dank das hat mich sehr viel weiter gebracht.
Leider gibt es hier keinen Danke button wenn es ihn geben würde, würde ich ihn 1000 mal drücken
Edit:
So habe das mal eben alles Durchgechecht aber leider habe ich immer noch ein Problem und zwar wenn ich die daten in mein DB ein geben macht er mir problem ich nehme 4 stunden und 2 klassen dann müsste er ja eigentlich die Vertretungs ID ja trotzdem ermitteln aber leider funzt das nicht,
Das einzige was ich verändert habe ist das ich die ausgaben auskommentiert habe. und ein die query ausführe.
Mann das ist doch nen Kack da bekommt man ne muster gültige lösung und dann ist man zu dumm sie in seinen Programm code zu integrieren. Ohh man
Beitrag zuletzt geändert: 18.8.2011 20:52:41 von xxbashxx -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage