php & sql--> Daten werden nicht in SQL-Datenbank geschrieben!

blue-ex

Herzlich willkommen!
Hi @ all

Bin noch Anfänger also kann es sein, dass meine frage ziehmlich doof ist aber ich habe versucht mir in php was zu programmieren so, dass er mir etwas in meine Datenbank schreibt! Aber irgendwie hab ich einen Fehler drinn. Villeicht kann mir jemand sagen wo genau der liegt?

Code:
<?php

$host = "localhost";
$meine_id = "root";
$mein_pw = "";
$meine_db = "fnations";

$Benutzername ="";
$Passwort ="passwort";
$EMail ="";

mysql_connect($host, $meine_id, $mein_pw);
  @mysql_select_db("$meine_db") or die ("Unable to select database.");

$res = mysql_query("INSERT INTO web_regusers VALUES('$Benutzername','$Passwort','$EMail')");
mysql_query($res) or die ("Unable to insert into database.");
echo "all done!";
?>

Ich bedanke mich schon mal für eure Hilfe!
 
Zuletzt bearbeitet:
Gewöhn dir zu allererst ab, mit einem @ vor den Befehlen zu arbeiten.
Das unterdrückt Fehlermeldungen, so weißt du nie warums nicht geht.

$res = mysql_query("INSERT INTO web_regusers VALUES('$Benutzername','$Passwort','$EMail')");

INSERT INTO bedeutet, das ein Datensatz in bestimmte Spalten einer Tabelle geschrieben werden.
Du hast die Datensätze und die Tabelle angegeben aber nicht die Spalten, wo welche Variable landen soll.
$res = mysql_query("INSERT INTO web_regusers (spalten_name_1, spalten_name_2, spalten_name_3) VALUES('$Benutzername','$Passwort','$EMail')");

Du gibst "all done" aus, egal was passiert.
Fertig ist es ja auch, aber halt nichts passiert ;)

Machs so:
PHP:
$res = mysql_query("INSERT INTO web_regusers (spalten_name_1, spalten_name_2, spalten_name_3) VALUES('$Benutzername','$Passwort','$EMail')");
mysql_query($res) or die ("Unable to insert into database.");
$num = mysql_affected_rows();
if ($num > 0)
 { echo 'all done';}
else
 { echo 'Datensatz wurde nicht eingetragen!'; }

Für die Zeit des Probierens solltest du dir auch alle möglichen Fehlermeldungen ausgeben lassen.
An den Anfang der Datei ein error_reporting(E_ALL);
Damit siehst du alle Fehler, Warnungen und Nachrichten von PHP. Erleichtert die Fehlersuche ungemein.
Auch wenn Nachrichten (Notice) nerven, dein Script ist erst sauber, wenn diese nicht mehr auftreten.

Statt: mysql_query($res) or die ("Unable to insert into database."); schreibst du mysql_query($res) or die (mysql_error());
Damit bekommst du den Fehler von MySQL, sofern einer vorliegt.
 
Ok danke ich werds probieren! Ich hab das "all done" nur rein gepackt um zu sehn ob sich überhaupt was tut^^
 
SoKoBaN schrieb:
INSERT INTO bedeutet, das ein Datensatz in bestimmte Spalten einer Tabelle geschrieben werden.
Du hast die Datensätze und die Tabelle angegeben aber nicht die Spalten, wo welche Variable landen soll.

Wer hat dir denn so einen Quatsch erzählt / beigebracht?
Wenn eine Tabelle 3 Spalten hat, dann bewirkt

INSERT INTO tabelle VALUES($var1, $var2, $var3)

dass $var1 in die erste, $var2 in die zweite und $var3 in die dritte Spalte der Datebank-Tabelle geschrieben wird. Welche Spalte die erste, zweite oder dritte ist hängt davon ab wie die Tabelle angelegt wurde. Die Spalte die beim "CREATE TABLE" Befehl zuerst angegeben wird ist auch die erste Spalte. In phpMyAdmin sind die Spalten der Tabelle in der Struktur-Ansicht ebenfalls in dieser Reihenfolge angezeigt.

INSERT INTO tabelle (spalte1, spalte2, spalte3) VALUES ($var1, $var2, $var3)
ist entweder hilfreich für Anfänger, vergessliche Leute oder Programmierer, die mit großen Datenbank Tabellen arbeiten. Man sieht dadurch eben im Quellcode direkt welche Spalte die nächste ist. Außerdem kann man mit

INSERT INTO tabelle (spalte1, spalte3, spalte2) VALUES ($var1, $var3, $var2)
die Reihenfolge der Spalten beliebig variieren. Die Reihenfolge der ersten Klammer (mit dem Spaltennamen der Datenbank Tabelle) sollte dann jedoch entsprechend in der zweiten Klammer (mit den Werten) angepasst werden.

SoKoBaN schrieb:
Machs so:
PHP:
$res = mysql_query("INSERT INTO web_regusers (spalten_name_1, spalten_name_2, spalten_name_3) VALUES('$Benutzername','$Passwort','$EMail')");
mysql_query($res) or die ("Unable to insert into database.");
$num = mysql_affected_rows();
if ($num > 0)
 { echo 'all done';}
else
 { echo 'Datensatz wurde nicht eingetragen!'; }

Das ist eine Möglichkeit, die ich persönlich jedoch zu unübersichtlich finde und außerdem frage ich mich warum die Funktion mysql_query() zwei mal aufgerufen werden muss/soll und warum die Funktion mysql_affected_rows() aufgerufen wird. mysql_affected_rows() macht in meinen Augen sinn, wenn ich mit dem SQL Befehl UPDATE Datensätze ändere und wissen möchte wieviele Datensätze insgesamt geändert wurden. Für ein INSERT reicht zur Überprüfung Rückgabewert der Funktion mysql_query() ... Daraus ergibt sich folgender Code, der durch weniger Funktionsaufrufe auch noch schneller ist, was man bei solch kleinen PHP Scripten jedoch nicht merkt:

PHP:
// SQL Befehl in der Variablen $sql_befehl speichern
$sql_befehl = "INSERT INTO web_regusers (spalten_name_1, spalten_name_2, spalten_name_3) 
								 VALUES ('$Benutzername','$Passwort','$EMail')";

// Datenbankzugriff mit dem SQL Befehl aus der Variablen $sql_befehl
// und Speichern des Ergebnisses in der Variablen $res (TRUE/FALSE)
$res = mysql_query($sql_befehl);

// Prüfen, ob der SQL Befehl erfolgreich ausgeführt wurde oder nicht
// und entsprechende Ausgaben machen
if ($res)
 { 
 	echo 'all done';
}
else
{
	echo 'Datensatz wurde nicht eingetragen!';
}


SoKoBaN schrieb:
Für die Zeit des Probierens solltest du dir auch alle möglichen Fehlermeldungen ausgeben lassen.
An den Anfang der Datei ein error_reporting(E_ALL);
Damit siehst du alle Fehler, Warnungen und Nachrichten von PHP. Erleichtert die Fehlersuche ungemein.
Auch wenn Nachrichten (Notice) nerven, dein Script ist erst sauber, wenn diese nicht mehr auftreten.

Statt: mysql_query($res) or die ("Unable to insert into database."); schreibst du mysql_query($res) or die (mysql_error());
Damit bekommst du den Fehler von MySQL, sofern einer vorliegt.

Dem ist nichts hinzuzufügen :D


Liebe Grüße

Patrick
 
snookie schrieb:
Wer hat dir denn so einen Quatsch erzählt / beigebracht?
Der Weihnachtsmann. Und da du der totale Vollprofi bist geb ich dir selbstredend in allen Punkten recht und verbeuge mein Haupt vor deiner unglaublichen Schlauheit.
 
Ich wollte nicht den Klugscheiser raushängen lassen. Falls das so rüber gekommen ist tut es mir leid.

Jeder wird wissen, dass so lange Foren-Beiträge eher eine Seltenheit sind. Zumindest habe ich sie vermisst, als ich mich noch mit solchen Fragen gequält habe.

Ich bin sicherlich kein Vollprofi, dazu bin ich noch zu jung (21) :D aber ich habe dennoch schon 7 Jahre Erfahrung mit HTML, CSS, PHP, MySQL und ein wenig drumherum.

@ SoKoBaN: Dein Beitrag kommt ein wenig abweisend bei mir an... War das deine Absicht?


----- EDIT -----


Ich habe vor lauter lauter vergessen den entscheidenden Fehler des Ursprünglichen Quellcodes zu verbessern ...

Original:
PHP:
mysql_connect($host, $meine_id, $mein_pw);
  @mysql_select_db("$meine_db") or die ("Unable to select database.");

Hier wird eine Datenbank ausgewählt, die $meine_db heißt.

Richtig:
PHP:
mysql_connect($host, $meine_id, $mein_pw);
mysql_select_db($meine_db) or die ("Unable to select database.");

Hier wird eine Datenbank ausgewählt, die so heißt, wie der Wert, der in der Variablen $meine_db gespeichert ist. Also in deinem Fall wäre dass die Datenbank fnations
 
Zuletzt bearbeitet:
Oben