Daten in Tabelle schreiben
Markus
- php
0 Sönke Tesch0 Markus0 Sönke Tesch0 Markus
0 Ralf Rapude0 Markus
Hallo,
ich bin grad dabei eine Linkliste mit Datenbankanbindung zu schreiben, hab aber folgendes Problem mit der Datei die die Daten in die Tabelle schreiben soll.
Folgendermaßen is die Datei aufgebaut:
include ("config.dat");
include ("connect.dat");
$res = mysql_db_query("usr_web20_1",
"select * from $tabelle");
$id = mysql_num_rows($res);
$id = $id++ ;
insert $tabelle values (
$id, '$url', 'link_name', '$beschreibung');
...
als Fehler bekomme ich " parse Error in line 10, das ist die zeile in der "insert $tabelle " und so weiter steht. Aber was ist daran falsch? Ich kann den Fehler einfach nicht finden...
$res = mysql_db_query("usr_web20_1",
"select * from $tabelle");
$id = mysql_num_rows($res);
$id = $id++ ;
insert $tabelle values (
$id, '$url', 'link_name', '$beschreibung');
als Fehler bekomme ich " parse Error in line 10, das ist die zeile in der "insert $tabelle " und so weiter steht. Aber was ist daran falsch? Ich kann den Fehler einfach nicht finden...
Geh mal einen Schritt zurück und schau Dir die Zeile nochmal genau an:
insert $tabelle values ($id, '$url', 'link_name', '$beschreibung');
Das ist ganz eindeutig ein SQL-Befehl. Und SQL-Befehle solltest Du auch an die SQL-Maschinerie schicken, im Moment steht diese Zeile im PHP-Bereich. Bau das in ein mysql_query ein, dann ist der Fehler sicher weg.
Davon abgesehen: $id=$id++ kannst du einfach $id++ schreiben. ++ bewirkt schon von alleine, daß die jeweilige Variable um eins erhöht wird, eine Zuweisung brauchst Du da nicht.
Gruß,
soenk.e
HI,
danke für deine Antwort,
wie genau bau ich das in ein MySQL-query ein? Bin och PHP Newbie ... ;)
wie genau bau ich das in ein MySQL-query ein? Bin och PHP Newbie ...
Das hast Du doch schon drei Zeilen höher einmal gemacht:
$res = mysql_db_query("usr_web20_1", "select * from $tabelle");
Willst Du etwa damit sagen, daß Du nicht weißt, was Du tust? ;) Ein SQL-Befehl wird vom Datenbankserver ausgeführt, nicht vom PHP-Interpreter. Um einen SQL-Befehl an die Datenbank zu schicken, benutzt man die PHP-Befehle mysql_db_query() oder besser mysql_query().
Als komplettes Beispiel könnte es so aussehen:
if (! mysql_select_db("usr_web20_1")) die("Kann Datenbank nicht auswählen");
if (! $res = mysql_query("select * from $tabelle")) die("SQL-Fehler: select");
$id = mysql_num_rows($res);
$id++;
if (! mysql_query("insert into $tabelle (id,url,link,beschreibung) values ($id, '$url', 'link_name', '$beschreibung'")) die("SQL-Fehler: insert");
Da sind jetzt, abgesehen von der Fehlerbehandlung, zwei Änderungen drin:
1. Statt mysql_db_query() habe ich die Datenbank gleich als erstes mit mysql_select_db() ausgewählt und verwende im folgenden nur noch mysql_query(), also ohne Angabe der Datenbank. Jedes mysql_query() bezieht sich immer auf die gerade aktive Datenbank, also auf die vorher mit mysql_select_db() ausgewählte.
Dieser Weg ist seit PHP 4.0.6 so empfohlen. Warum, wieso, weshalb? Keine Ahnung. Spart aber immerhin ein wenig Tipperei.
2. In Deinem SQL-Insert habe ich die Feldnamen hinzugefügt ("id,url,link,beschreibung", sind nur ausgedacht). Es geht zwar auch ohne, aber ich finde es sicherer, wenn man selber die Auswahl trifft, welchem Feld welcher Wert zugeordnet werden soll, anstatt das man diese Auswahl MySQL überlässt. Letzteres kann bei späteren Änderungen an der Tabellenstruktur zu unangenehmen Überraschungen führen (falsche Zuweisungen).
Von diesen zwei Punkten mal abgesehen würde ich Dir bei der Gelegenheit auch empfehlen, das Feld id von der Datenbank verwalten zu lassen. Die Datenbank hat für genau solche Fälle eine Feldoption namens AUTO_INCREMENT, die dafür sorgt, daß automatisch für jeden neuen Datensatz eine eindeutige Zahl dem AUTO_INCREMENT-Feld zugewiesen wird. Du brauchst Dich dann um nichts mehr zu kümmern und kannst Dir die ganze $id-Behandlung oben sparen (die im übrigen sehr ineffizient ist).
Alles in allem würde das auf zwei Zeilen rauslaufen:
if (! mysql_select_db("usr_web20_1")) die("Kann Datenbank nicht auswählen");
if (! mysql_query("insert into $tabelle (url,link,beschreibung) values ('$url', 'link_name', '$beschreibung'")) die("SQL-Fehler: insert");
Gruß,
soenk.e
Hi,
danke für deiune Hilfe, jetzt klappts schon fast ;)
Aber ein kleines Prblem hab ich noch, wenn ich drei Datensätze hab, ID 1,2,3 und lösche ID2, dann behlaten die anderen ID1 und 2. Mit welchem Befehl kann ich die ID´s beu Ordnen?!
Muss ich alle auslesen, löschen und wieder neu reinschreiben? Das muss doch auch irgendwie einfacher gehen, oder?
Schonmal vielen Dank im vorraus,
Markus
Aber ein kleines Prblem hab ich noch, wenn ich drei Datensätze hab, ID 1,2,3 und lösche ID2, dann behlaten die anderen ID1 und 2. Mit welchem Befehl kann ich die ID´s beu Ordnen?!
Muss ich alle auslesen, löschen und wieder neu reinschreiben? Das muss doch auch irgendwie einfacher gehen, oder?
Nein, wenn Du wirklich alle IDs lückenlos von 0 bis n durchnummeriert haben willst, bleibt Dir nichts anderes übrig, als alle einzeln neu zu setzen.
Ich weiß nun nicht, wozu Du diese Nummern brauchst, aber im Falle einer Identifikation jedes Datensatzes ist es in der Regel sehr, sehr ungünstig, eine einmal vergebene Nummer zu ändern und so über die Zeit eine Nummer für mehrere Daten zu verwenden.
Schon bei kleinen Projekten kann es passieren, daß irgendwo noch eine alte ID rumschwirrt. Wenn Du bei jeder Änderung an den Daten die IDs neu vergibst, würde man mit dieser veralteten ID auf die falschen Daten zugreifen:
1: Peter
2: Paul
3: Mary
Paul löschen und IDs neu vergeben:
1: Peter
2: Mary
Wenn jetzt aus irgendeiner verstaubten Ecke die (veraltete) ID 2 hervorkriecht, erhälst Du statt der erwarteten Daten von Paul die von Mary - und das Dumme daran ist: Du merkst es nicht.
Behälst Du hingegen einmal vergebene IDs bei, würdest Du in diesem Fall einen Fehler bekommen, weil die 2 nicht mehr existiert. Verwechslungen sind also nicht nur jetzt, sondern über die ganze Lebenszeit des Projektes ausgeschlossen.
Aus diesem Grund vergibt man solche IDs eigentlich grundsätzlich fortlaufend und jongliert damit nicht wild in der Gegend rum.
Aber das nur als Tipp .)
Gruß,
soenk.e
Hi,
insert $tabelle values (
$id, '$url', 'link_name', '$beschreibung');
Meiner Ansicht nach sind sowohl das sql Statement, als auch PHP Syntax nicht astrein.
Probier mal so:
$eintragen = mysql_db_query("$deine_db","INSERT INTO $tabelle(dein_erstes_feld,usw,usw) VALUES( $id, '$url', 'link_name', '$beschreibung')");
Du hast weder eine Datenbank ausgewaehlt, noch eine Anfrage formuliert. Verfassen musst du das aber aehnlich wie du es bei $res gemacht hast.
Muesst eigentlich funzen so.
Gruesse
Ralf
So, danke das KLappt jetzt!
Nur eine Frage hab ich nochmal , *g*.
Ich wollte eine Überprüfung vornehmen, ob das eintragen geklappt hat. Dazu habe ich folgende Syntax genommen:
$result = mysql_query($eintragen, $connect);
if ($result) {
echo "erfolgreich";
}
else
{
echo "fehler";
};
Aber ich krieg immer die meldunf "fehler" obwohl die Daten in die Tabelle geschrieben wurden, hab ich nachgesehen...
Was ist daran falsch?
Ich wollte eine Überprüfung vornehmen, ob das eintragen geklappt hat. Dazu habe ich folgende Syntax genommen:
$result = mysql_query($eintragen, $connect);
if ($result) {
echo "erfolgreich";
}
else
{
echo "fehler";
};
Aber ich krieg immer die meldunf "fehler" obwohl die Daten in die Tabelle geschrieben wurden, hab ich nachgesehen...
Tja, sieht nicht falsch aus. Füge 'echo "fehler";' 'echo mysql_error($connect);' hinzu, vielleicht verrät er Dir ja was.
Gruß,
soenk.e