Daten eintragen und id auslesen
Martin
- php
Hallo,
ich bins schon wieder mit nem Problem :(
folgender Code:
$abfrage1 = "SELECT interpretID FROM interpreten WHERE interpret='$interpret'";
$ergebnis1 = mysql_query($abfrage1);
while($row = mysql_fetch_object($ergebnis1))
$interpretID = $row->interpretID;
//Testausgabe der InterpretID
echo $interpretID;
$abfrage2 = "SELECT album FROM alben WHERE album LIKE'$album'";
$ergebnis2 = mysql_query($abfrage2);
while($row2 = mysql_fetch_object($ergebnis2))
$album = $album2;
if ($row2->album == $album)
{
echo "Album existiert schon!";
echo "<hr>";
}
else
{
echo "Eintrag ist gemacht";
$eintrag = "INSERT INTO alben (album, datum, zeit) VALUES ('$album','$datum','$zeit')";
$albumID = mysql_insert_id();
mysql_query($eintrag);
//$eintrag2 = "INSERT INTO rel_alben_interpreten (albumID, interpretID) VALUES
//('$albumID','$interpretID')";
//mysql_query($eintrag2);
}
echo "<br>";
echo $albumID;
?>
Das Problem daran ist, das er ohne diesen Eintrag:
$album = $album2;
schon mal gar nichts in der TAbelle anlegt. Nur warum?
Das zweite ist, das mysql_insert_id nur eine 0 zurückliefert. Die Syntax doch aber eigentlich korrekt ist. Das Problem mit der ID liegt vermutlich an dem oberen Problem.
hi,
$abfrage2 = "SELECT album FROM alben WHERE album LIKE'$album'";
^
da sollte wohl noch ein leerzeichen rein, zwischen LIKE und '$album'.
while($row2 = mysql_fetch_object($ergebnis2))
$album = $album2;
einzige anweisung innerhalb dieser schleife ist also diese zuweisung.
welchen zweck soll die haben?
woher kommt $album2?
if ($row2->album == $album)
bist du sicher, dass $row2->album zum jetzigen zeitpunkt noch existent ist?
ich würde das bezweifeln wollen.
gruß,
wahsaga
$abfrage1 = "SELECT interpretID FROM interpreten WHERE interpret='$interpret'";
$ergebnis1 = mysql_query($abfrage1);
while($row = mysql_fetch_object($ergebnis1))
$interpretID = $row->interpretID;//Testausgabe der InterpretID
echo $interpretID;
Bitte denke doch mal ein bisschen über das nach, was Du veranstaltest. Wie Du eigentlich im letzten Thread (den Du auch gerne hättest weiter benutzen können) gelernt haben solltest, ist die while-Schleife irgendwie unsinnig. Du holst sämtliche Interpreten-IDs aus der Datenbank, durchläufst dann in der while-Schleife alle Ergebnisse ohne damit etwas anzufangen (außer $row->interpretID nach $interpretID zu verfrachten) und verwendest somit schlussendlich doch nur das letzte.
Putzig finde ich auch immer, dass der SQL-Befehl ohne weiteren Sinn in eine Variable geschrieben wird. Und Fehlerabfragen hast Du ebenfalls nirgends bedacht.
Dieser ganze Part würde korrekt ungefähr so aussehen:
if (! $ergebnis1 = mysql_query($abfrage1)) {
die("Fehler bei interpretID");
}
if (! $row = mysql_fetch_object($ergebnis1) {
echo "Keine Interpreten gefunden";
}
else {
$interpretID = $row->interpretID;
blabla
$abfrage2 = "SELECT album FROM alben WHERE album LIKE'$album'";
$ergebnis2 = mysql_query($abfrage2);
while($row2 = mysql_fetch_object($ergebnis2))$album = $album2;
Gleiches Spiel wie oben.
if ($row2->album == $album)
Informiere Dich, was mysql_fetch_xxx() zurück gibt, wenn das Ende der Ergebniskette erreicht ist. Überlege Dir dann, ob es sinnvoll ist, auf $row2 noch zuzugreifen.
{
echo "Album existiert schon!";
echo "<hr>";}
else
{
echo "Eintrag ist gemacht";
Du meldest Erfolg, ohne etwas gemacht zu haben? Kannst Du hellsehen?
$eintrag = "INSERT INTO alben (album, datum, zeit) VALUES ('$album','$datum','$zeit')";
$albumID = mysql_insert_id();
mysql_query($eintrag);
Das zweite ist, das mysql_insert_id nur eine 0 zurückliefert.
Woher glaubst Du, soll MySQL eine ID bekommen, wenn Du noch gar nichts in die Datenbank eingetragen hast? Du kannst vielleicht hellsehen, MySQL jedoch garantiert nicht.
Das Problem daran ist, das er ohne diesen Eintrag:
$album = $album2;
schon mal gar nichts in der TAbelle anlegt. Nur warum?
Du hast offenbar noch nicht kapiert, wie while funktioniert. Ich diagnostiziere hier jedenfalls ein heilloses Durcheinander, Du verrennst Dich immer mehr im Chaos. Bitte kümmere Dich erst um die Grundlagen der Programmierung, frage dann.
Hallo,
Putzig finde ich auch immer, dass der SQL-Befehl ohne weiteren Sinn in eine Variable geschrieben wird.
ich mache das auch so
$sql = sprintf ('Update %s SET %s = %s WHERE %s = "%s" LIMIT 1', 'Tabelle', 'Set-Spalte', 'Set_Wert', 'Where-Bedingung', $db->escapeSimple('Where-Wert'));
$result = $db->query($sql);
[...]
ich finde das für mich persönlich übersichtlicher ;-)
nenn mir mal einen Grund, warum man das nicht machen sollte.
Putzig finde ich auch immer, dass der SQL-Befehl ohne weiteren Sinn in eine Variable geschrieben wird.
ich mache das auch so
$sql = sprintf ('Update %s SET %s = %s WHERE %s = "%s" LIMIT 1',
Nein, noch schlimmer.
nenn mir mal einen Grund, warum man das nicht machen sollte.
Es ist unnütz. Vor zehn Jahren hätte ich noch angefügt, dass es unnütz Prozessorleistung verschwendet, heute ist es einfach nur eine Zeile zu viel, zu umständlich.
Aber wer gerne zwei lange Zeilen statt einer kurzen tippt und mit Variablen um sich wirft, meinetwegen. Wir haben ja alle unsere merkwürdigen Angewohnheiten :)
hi,
Es ist unnütz. Vor zehn Jahren hätte ich noch angefügt, dass es unnütz Prozessorleistung verschwendet, heute ist es einfach nur eine Zeile zu viel, zu umständlich.
zum debuggen ist es empfehlenswert, wenn du dir z.b. mal einen mit variablen werten zusammengesetzten query string zur kontrolle ausgeben lassen willst.
OK, brauchst _du_ nicht - aber nicht jeder ist ein coding-profi.
Aber wer gerne zwei lange Zeilen statt einer kurzen tippt und mit Variablen um sich wirft, meinetwegen. Wir haben ja alle unsere merkwürdigen Angewohnheiten :)
ja, stimmt - einige von uns haben den spleen, so zu coden, dass auch das menschliche auge noch einigermaßen den überblick behalten kann.
gruß,
wahsaga
zum debuggen ist es empfehlenswert, wenn du dir z.b. mal einen mit variablen werten zusammengesetzten query string zur kontrolle ausgeben lassen willst.
Das ist sicher richtig. Nur sind dummerweise die in der Öffentlichkeit gesichteten SQL-in-Variable-Leute häufig auch diejenigen, denen jegliche Form von Fehlerprüfung unbekannt ist :>
Aber wer gerne zwei lange Zeilen statt einer kurzen tippt und mit Variablen um sich wirft, meinetwegen. Wir haben ja alle unsere merkwürdigen Angewohnheiten :)
ja, stimmt - einige von uns haben den spleen, so zu coden, dass auch das menschliche auge noch einigermaßen den überblick behalten kann.
Meine Rede.
mysql_query("select from...");
finde ich auch wesentlich übersichtlicher als
$sql = "select from...";
mysql_query($sql);
Hallo,
Putzig finde ich auch immer, dass der SQL-Befehl ohne weiteren Sinn in eine Variable geschrieben wird.
ich mache das auch so
$sql = sprintf ('Update %s SET %s = %s WHERE %s = "%s" LIMIT 1',Nein, noch schlimmer.
so brauche ich mir aber um das escapen von Anführungszeichen keine gedanken machen
nenn mir mal einen Grund, warum man das nicht machen sollte.
Es ist unnütz. Vor zehn Jahren hätte ich noch angefügt, dass es unnütz Prozessorleistung verschwendet, heute ist es einfach nur eine Zeile zu viel, zu umständlich.
zu umständlich finde ich es nicht ;-)
ich hab einen besseren überblick...
es geht einfach von der Hand
ich brauche mir um irgendwelche Anführungszeichen keine Sorge machen
Aber wer gerne zwei lange Zeilen statt einer kurzen tippt und mit Variablen um sich wirft, meinetwegen. Wir haben ja alle unsere merkwürdigen Angewohnheiten :)
wenn ich bei mir in der Config-Datei den Debug-Modus aktiviere, wird z.B. $sql ausgegeben
so habe ich schon des öfteren MySQL Fehler schnell gefunden