redsywi Geschrieben 29. Mai 2002 Teilen Geschrieben 29. Mai 2002 Hallo Leute, vielleicht hat einer von Euch eine Lösung. Folgendes Problem: Ein Datensatz wurde als Text gespeichert "Mo 27.05.2002 22:34:23" Nun soll das Datum ausgelesen werden und in ein Datumsfeld eingetragen werden. Das ich das Ganze mit explode machen kann weiß ich, leider sollen 11000 DS damit upgedated werden. Wenn ich nun eine while-Schleife nehme und ich Updatefunktion hier eintrage, dann nimmt er den letzten gefilterten DS als Wert und schreibt in alle Datumsfelder das Gleiche Datum und zwar den vom letzten DS. Setzte ich die Updatefunktion vor der Schleife erkennt er die Variable nicht und schreibt nichts rein. Hier der Code: <html> <body> <?php $db_server = " "; $db_name = " "; $db_user = " "; $db_passwort = " "; $db = @mysql_connect($db_server,$db_user,$db_passwort) or die ("Es konnte keine Verbindung zur Datenbank herstellen"); $db_check = @MYSQL_SELECT_DB($db_name); $sqlab = "Select Erhalten from Stoerungsliste"; $res = mysql_db_query("hallo", $sqlab); $num = mysql_num_rows($res); echo "$num Datensätze gefunden<p>"; $i=1; while ($i<$num) { $erh = mysql_result($res, $i, "Erhalten"); list($wtg, $dat, $uhr) = explode(" ", $erh); echo "$dat <br>"; $sqlabf = "update Stoerungsliste set ErhaltenDate = '$dat'"; mysql_db_query("hallo", $sqlabf); $i++; } mysql_close($db); ?> </body> </html> Kann mir jemand helfen!!!!! Danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
shad0w Geschrieben 29. Mai 2002 Teilen Geschrieben 29. Mai 2002 hm, fehler hab ich keinen gefunden, aber mal ein paar empfehlungen (vllt. loest sich das prob damit automatisch... ) 1. mysql_query verwenden, statt mysql_db_query 2. for( $i = 0; $i < mysql_num_rows( $query ); $i++) { ist glaub besser als while ... 3. statt dem explode substr() verwenden, und links und rechts vom string was abschneiden... dann brauchst du auch nicht mir arrays zu hantieren... hope this helps... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
redsywi Geschrieben 29. Mai 2002 Autor Teilen Geschrieben 29. Mai 2002 Vielen Dank für die Hilfe, geht aber so nicht. Mein Problem ist nicht der Datensatz selber, sonder wenn ich den Teil des DS ausgelesen habe, diesen dann zurückzuschreiben. Ich weiß nicht wo ich die Updateabfrage für die MySQL-Datenbank schreiben muss. Auch mit einer for-Schleife geht es nicht. Wie gesagt, liegt die Abfrage außerhalb der Schleife erkennt er die Variable ($dat) die mir den TeilDS ausgibt nicht und es wird nichts ins Feld geschrieben, liegt die Abfrage in der Schleife so, nimmt die Variable den Wert des letzten DS und macht damit das update. Habe das alles auch nochmal mit substr(), versucht geht aber auch nicht. :confused: Der DS wird zwar ausgelesen und richtig "abgeschnitten", aber er kann ihn nicht zurückschreiben in das neue Feld. Hat noch jemand ne Idee???? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 29. Mai 2002 Teilen Geschrieben 29. Mai 2002 Auf den ersten Blick fehlt eine WHERE-Bedingung. Es werden immer ALLE Datensätze geändert. Die SQL-Anweisung in der Schleife ist schon okay so. Am besten du lässt bei der ersten Abfrage den Primary Key mit auswählen. Mit dem kannst du dann den zu ändernden Datensatz eindeutig indentifizieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
redsywi Geschrieben 30. Mai 2002 Autor Teilen Geschrieben 30. Mai 2002 Danke für die Antwort. Das mit der where-Klausel ist im Moment unerheblich, da er beim ersten Durchlauf alle DS aktualisieren soll. In dem zusätzlichen Feld steht momentan noch nichts drin. Aber auch wenn ich die where-Klausel einbaue und mit, so nimmt er trotzdem den zuletzt gelesenen DS und schreibt ihn rein, jedenfalls beim Update. Führe ich eine Select-Anweisung aus, dann gibt er mir auch alle DS aus. Ich denke immer noch, daß es an der Variablen $dat liegt, die er vor der Schleife nicht kennt. Lege ich die Update-Anweisung in die Schleife wie gesagt nimmt er nur den zuletzt gelesenen DS und aktualisiert damit die DS. Wer hat denn noch eine Lösung, ich stehe hier echt vor einem Problem. Da ich mich mit PHP erst seit 1 1/2 Wochen befasse, kenne ich mich damit nicht so aus. Ansonsten muss ich nämlich alle 11000 DS per Hand mit dem Datum versehen und darauf habe ich echt keine Lust. Ich hoffe mir kann irgend jemand helfen????????????? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 30. Mai 2002 Teilen Geschrieben 30. Mai 2002 Auf Grund deiner ersten Formulierung müsste es aber das sein. Es werden bei jedem Durchlauf alle DS geändert. Da der letzte (wie schon der Name sagt) zuletzt durchlaufen wird, kann es in meinen Augen nur daran liegen. Dein Script ist ja richtig, es fehlt halt nur die Einschränkung auf einen DS. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
redsywi Geschrieben 31. Mai 2002 Autor Teilen Geschrieben 31. Mai 2002 Hallo E-T, danke für's Helfen. Ich habe es natürlich auch mit einer where-Klausel probiert und in der Bedingung die Nummer genommen, auch wenn ich die Nummer in der where-Klause (Nummer = 1) setze, updated er trotzdem alle DS. Und schreibt überall das gleiche Datum rein. Das macht mich echt irre! Hier nochmal das jetzige Script, was ich durchlaufen lasse. <html> <body> <?php $db_server = ""; $db_name = ""; $db_user = ""; $db_passwort = ""; $db = @mysql_connect($db_server,$db_user,$db_passwort) or die ("Es konnte keine Verbindung zur Datenbank herstellen"); $db_check = @MYSQL_SELECT_DB($db_name); $sqlab = "Select Nummer, Erhalten from Stoerungsliste4"; $res = mysql_db_query("moin", $sqlab); $num = mysql_num_rows($res); echo "$num Datensätze gefunden<p>"; $i=1; while ($i<$num) { $erh = mysql_result($res, $i, "Erhalten"); list($wtg, $dat, $uhr) = explode(" ", $erh); echo "Nummer, $dat <br>"; $sqlabf = "update Stoerungsliste4 set ErhaltenDate = '$dat' where Nummer = '1'"; mysql_db_query("moin", $sqlabf); $i++; } mysql_close($db); ?> </body> </html> :eek: Es muss doch dafür eine Lösung geben!?! :confused: Bitte, bitte helft mir 'stöhn' 'verzweifelt'!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.