schreiben in eine MySQL Datenbank
Björn Lindner
- php
Hi,
ich lasse eine PHP Seite Daten aus einer Datenbank auslesen.
Die Ergebnisse werden in Variablen geschrieben und an eine andere PHP Seite übergeben.
Nun kann ich mit dieser zwar die Daten auslesen, wenn ich sie aber in die MySQL Datenbak schreiben will, macht er mir immer nur den ersten Datensatz.
Die 2. PHP Seite hat folgenden COde:
for ($j=1; $j<=$i; $j++))
{
if ($ukz[$j]==0)
/* wenn Datensatz unverändert ist */
{
/* dann muss er auch nichts machen */
}
if ($ukz[$j]==1)
/\* wenn Datensatz neu ist \*/
{
echo "2";
mysql_query("insert into ix values ($id[$j], '$bez[$j]', $zuord[$j], $ukz[$j])");
}
if ($ukz[$j]==2)
/\* wenn Datensatz verändert wurde \*/
{
echo "3";
mysql_query("update ix set id=$id[$j], bez='$bez[$j]', zuord=$zuord[$j], ukz=$ukz[$j] where id=$id[$j]");
}
if ($ukz[$j]==3)
/\* wenn Datensatz als gelöscht markiert ist \*/
{
echo "4";
mysql_query("update ix set id=$id[$j], bez='$bez[$j]', zuord=$zuord[$j], ukz=$ukz[$j]");
}
$j++;
echo "<img border='0' src='load.jpg' width='1' height='25'>";
}
echo "</td></tr></table><p>Abgleich erfolgreich durchgeführt!";
mysql_close();
Kann jemand spontan meinen Denkfehler finden?
MFG Björn Lindner
Hallo,
PHP kenn ich nicht gut genug, aber:
1.) Schleife
for ($j=1; $j<=$i; $j++))
{
[...] hier sind Deine ganzen if-Abfragen
$j++;
^
-------------- Achtung: Du erhöhst pro durchlauf $j zweimal, einmal in der for-Anweisung, einmal hier.
echo "<img border='0' src='load.jpg' width='1' height='25'>";
}
Dann ist natürlich auch die Frage, wie groß $i ist Hast Dur das schon mal überprüft. Hier könnte m.A. die Lösung für Dein angesprochenes Problem zu finden sein.
2.) If-Abfragen:
Aus Struktur- und Performancgründen würde ich folgendes empfehlen
if ($ukz[$j]==0) /* wenn Datensatz unverändert ist */
{
}
else if ($ukz[$j]==1) /* wenn Datensatz neu ist */
{
}
else if ($ukz[$j]==2) /* wenn Datensatz verändert wurde */
{
}
else if ($ukz[$j]==3) /* wenn Datensatz als gelöscht markiert ist */
{
}
else /* und was kann sonst noch kommen ?? Eigentlich ein Fehler */
{
}
wobei ich die genaue Synakt von PHP für elseif-Zweige nicht kenne, aber so ungefähr wirds schon sein.
Das vermeidet Seiteneffekte ($ukz[$j] wird irgenwann aus irgendeinem Grunde verändert, dann kanns leicht sein, daß zwei der Abfragen richtig werden, was ja nicht der gewünschte Effekt wäre), und die Performance ist auch besser (Wenn eine Bedingung schon erfüllt ist, dann brauchen die restlichen niocht mehr geprüft werden).
3.) Update-Statements:
Du schreibst:
mysql_query("update ix set id=$id[$j], bez='$bez[$j]', zuord=$zuord[$j], ukz=$ukz[$j] where id=$id[$j]");
aber id braucht ja nicht verändert werden, da es ja als Auswahlkriterium dient.
Außerdem solltest Du aufpassen, daß nicht versehentlich ein gelöschter Datensatz (ukz == 3) durch ein mißglücktes update mit ukz == 2 wieder 'entlöscht' wird.
also bei Änderungen
mysql_query("update ix set bez='$bez[$j]', zuord=$zuord[$j] where id=$id[$j]");
beim löschen könntest Du eigentlich ja auf weitere Änderungen pfeifen (muß aber nicht sein):
mysql_query("update ix set ukz=$ukz[$j] where id=$id[$j]");
Da ist mir gerade aufgefallen, daß bei Deiner Variante fürs löschen eine where Klausel fehlt, Du also eigenlich _alle_ Datensätze als gelöscht kennzeichnest.
---------------------------
Dank Dir erstmal,
also i=23 und somit eigentlich genau so wie es sein muß.
Dennoch bewältigt er weiterhin nur den ertsen Datensatz, leider!
Also mir ist das schleierhaft.
MFG Björn
Hi,
Keine Ahnung woran es lag, aber er tut es jetzt.
Danke.
MFG Björn