Fehler im Code, nur wo?!

MAN

Erfahrenes Mitglied
Hallo,

habe irgendwie anscheinend einen kleinen Fehler in meiner PHP-Funktion, bloß wo?! Ich führe lasse den Code ausführen, aber er meckert an keiner Stelle irgendwas, dass der Code fehlerhaft sein soll! Er fügt bloß einfach nicht den Datensatz ein, den er mit jedem Aufruf dieser Funktion ja einfügen sollte!

Hier ist die Funktion:
Code:
function InsertDataSet( $s_name, $s_location, $s_mail, $s_icq, $s_url, $s_text )
{
	ConnectToDB();  //Funktion zum Verbinden

	$datum = date( "d.m.Y" );
	$zeit = date( "H:i" );
	$id = 1;
	mysql_query( "INSERT INTO tb_gaestebuch('id', 'name', 'location', 'mail', 'icq', 'url', 'text', 'date', 'time') VALUES(".$id.", '".$s_name."', '".$s_location."', '".$s_mail."', ".$s_icq.", '".$s_url."', '".$s_text."', '".$datum."', '".$zeit."')" );
	DisConnectFromDB();  //Funktion zum Trennen der Verbindung
}
Eigentlich ja nur ein kleiner query mit dem ich in meinem Gästebuch eine Zeile einfügen will!

Wer den Fehler findet darf ihn nicht behalten, sondern mir bite mitteilen ;)

Vielen Dank!


mfG,
MAN
 
bei Values fehlt bei ID die '...' Zeichen
PHP:
VALUES('".$id."', '".$s_name."',...........

weitere Fehlerquelle wäre evtl ID=1. Wenn die Spalte auf unique gesetzt ist, kann dieser Wert nur einmal in dieser Spalte der Tabelle auftauchen
 
Zuletzt bearbeitet:
Wenn es sich bei der Spalte id um eine mit dem AUTO_INCREMENT-Attribut handelt, ist es nicht ratsam diese beim Anfügen von neuen Datensätzen anzugeben.

Was mich jedoch mehr stört, ist die Verwendung Apostrophen bei der Bezeichnung der Spaltennamen. Besser wären die sog. "Backticks" (`, Akzent Grave, ASCII 96).

Zur besseren Übersicht bei INSERT INTO-Anfragen würde ich dir übrigens folgende Syntax empfehlen:
PHP:
<?php
  [...]
  function InsertDataSet( $s_name, $s_location, $s_mail, $s_icq, $s_url, $s_text ) {
    ConnectToDB();  //Funktion zum Verbinden
    $query = "
	INSERT INTO
	        `tb_gaestebuch`
	  SET
	        `name` = '".$s_name."',
	        `location` = '".$s_location."',
	        `mail` = '".$s_mail."',
	        `icq` = '".$s_mail."',
	        `url` = '".$s_url."',
	        `text` = '".$s_text."',
	        `date` = '".date('d.m.Y')."',
	        `time` = '".date('H:i')."'
	";
    mysql_query($query);
    DisConnectFromDB();  //Funktion zum Trennen der Verbindung
  }
  [...]
?>
Ach übrigens, ich halte es für sinnvoller, nicht für jede einzelne Anfrage eine Verbindung zum Datenbankserver herzustellen.
 
Nur mal so nebenbei. Ist es nicht höchst uneffektiv bei jedem Aufruf der Funktion erst eine Verbindung mit der Datenbank aufzubauen und gleiche danach wieder abzubauen? Falls das die einzige Datenbankaktion ist ist alles ok, aber bei mehreren bremst das doch total aus.
 
Es ist genau so uneffektiv wie eine Function zum Eintragen von Gästebucheinträgen zu schreiben ,in der man nur Variablen übermitlen kann.
Dazu brauch man keine Funktion.
 
Nun gut - vielen Dank erst mal für die Lösungen, mit Gumbos Syntax funktioniert es: in der Datenbank meldet sich ein Datensatz.

Dass ich dem ganzen eine Funktion gegeben habe war der Grund, dass dort erst mal das aktuelle Datum ermittelt wird. Außerdem wird es dann im Fließenden PHP-Code auch nicht so toll aussehen, wenn dann so mehrere Befehle untereinander stehen, wo man eigentlich eine Funktion draus machen könnte.

Aber mit dem anderen Syntax ist es wirklich nur eine Zeile.

Wie stelle ich es jetzt an, nur einmalig eine Datenbankverbindung aufzubauen?
Wie merkt sich des Users PC, auf welcher Datenbank er gerade zugfreift?
Wann mache ich den Disconnect?
Brauch ich überhaupt einen Disconnect noch, oder ist das dann überflüssig?

mfG,
MAN
 
Also du brauchst dich überhaupt nicht darum zu kümmern was auf dem Anwender PC passiert.
Du baust am Anfang deines Scriptes eine Verbindung per [phpf]mysql_connect[/phpf] auf.
Wenn du das getan hast wählst du eine Datenbank aus => [phpf]mysql_select_db[/phpf].
Danach kannst du wie du lustig bist Query`s senden.
Nach Abbrechen des Scriptes besteht die Verbindung weiterhin ,doch nach einer gewissen Idletime wird die Connection automatisch unterbrochen.
Du kanst natürlich am Ende deines Scriptes auch ein [phpf]mysql_close[/phpf] einfügen.
Anstatt [phpf]mysql_connect[/phpf] zu benutzen kannst du auch [phpf]mysql_pconnect[/phpf] gebrauchen ,lies beide Refernz Einträge und die Unterschiede werden dir klar.
(Oben stehendes gilt für [phpf]mysql_connect[/phpf]).

Wegen der Funkion:
Theretisch könntest du fast alles in eine Funktion oder Klasse packen.
Doch der Sinn für einmalige Dinge ,liegt nur darin ,dass es besser wiederverwertbar ist und leichter zu pflegn (=>Klassen).
Falls oben stehende Gründe für dich nicht zutreffen ,empfehle ich dir keine Funktion zu benutzen ,außerdem wird der ggf. der Zusammenhang leichter klar - aber im Endeffekt ist das deine Sache und du soltlest es machen ,wie du es für schöner hälst.
 
Zuletzt bearbeitet:
Ich versuche mal die vier Fragen chronologisch zu beantworten:

&bdquo;Wie stelle ich es jetzt an, nur einmalig eine Datenbankverbindung aufzubauen?&ldquo;
Am geschicktesteen wäre es, wenn du am Anfang des Skriptes die Verbindung mit dem Datenbankserver aufnimmst, und sie am Ende wieder abbrichst.

&bdquo;Wie merkt sich des Users PC, auf welcher Datenbank er gerade zugfreift?&ldquo;
Der Computer des Benutzers muss sich garnichts merken, da das PHP-Skript auf dem Server verarbeitet wird.
Bei den MySQL-Funktionen gilt: Wird die Verbindungs-Kennung nicht angegeben, wird die zuletzt geöffnete Verbindung angenommen.

&bdquo;Wann mache ich den Disconnect?&ldquo;
Die Verbindung würde ich, wie bereits erwähnt, am Ende des Skriptes trennen.

&bdquo;Brauch ich überhaupt einen Disconnect noch, oder ist das dann überflüssig?&ldquo;
Zwar werden Verbindungen zu Datenbankservern nach einer gewissen Zeit automatisch getrennt, doch aus Performance-Gründen ist man immer auf der sicheren Seite Verbindungen nach Gebrauch zu trennen. (Ich meine du legst doch auch nach einem Telefongespräch auf und wartest nicht bis z.B. T-Online dies übernimmt.)
 
Zurück