Zum Inhalt springen

Mit explode Teil-DS auslesen und zurückschreiben


Empfohlene Beiträge

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!

:(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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????

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?????????????

:(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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'!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...