Bitte um Hilfe für Newbie für Profis ein Klacks :-)

abble

abble

Aktives Mitglied
Thread Starter
Dabei seit
24.12.2006
Beiträge
153
Reaktionspunkte
13
Hallo Leute, berufsbedingt muss ich mich nun mit PHP rumschlagen, und dem nicht genug: ich soll bereits am Montag etwas vorweisen :rolleyes:

Allerdings etwas ganz einfaches. Ich probier gerade ein Formuar (nur 2 Felder-> ID und Vorname) in meine Datenbank zu bringen und richte mich nach einem Beispiel aus dem Buch PHP und Mysql für Kids (jaja, lacht nur...)

Das vorgefertigte Bsp. aus dem Buch von der CD will gar nicht klappen und mein selbstgeschriebenes Bsp. hakt auch, es ist zum verrücktwerden. Nach stundenlangem probieren hab ich jetzt einen parse error, vorher wurden bereits Daten in die Datenbank hineingepackt allerdings wurde nicht der Vorname hineingeschrieben, sondern "array", also der Wert wurde nicht übernommen. Kann einer von euch Pofis mir den Fehler zeigen oder eine kleine Hilfestellung geben ? Herzlichen Dank im Vorraus. PS: Ich nutze MAMP.

Code:


<h1> Vorname eingeben </h1>

<form action="test.php" method="post">
Vorname: <input type="text" name="Vorname">
<input type="submit" value="Daten eintragen" name="submit">
</form>

<?php
if (!empty($_POST["submit"])) {
$mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', 'root') or die ("Verbindung zu Mysql gescheitert");
$mysql_select_db("bewerberdatenbank") or die ("Verbindung zur Datenbank gescheitert");
$sql="INSERT INTO adressen" . "(id, Vorname) VALUES ('', '$_POST[Vorname]')";
if (mysql_query($sql)) {
echo "<p> Abfrage erfolgreich </p>";
} else {
echo "<p> Abfrage nicht erfolgreich </p>";
}
?>
 
Hallo. Profi bin ich nicht, aber die Zeile "$sql = ..." sieht sehr merkwürdig aus. Sicher, das Du die richtig abgetippt hast?
 
Was mir auf Anhieb an Fehlern auffällt:
– Vor Funktionen wie mysql_connect() und mysql_select_db() gehört kein Dollarzeichen;
– statt des Pfades zu der .sock-Datei sollte die Angabe von "localhost" reichen;
– Variablen (hier: $_POST[Vorname]) gehören nicht in einfache Anführungszeichen, denn dann wird nicht der Wert der Variablen ausgegeben.
 
PHP:
$sql="INSERT INTO adressen" . "(id, Vorname) VALUES ('', '$_POST[Vorname]')";
Ich habe zwar kein Plan von PHP, aber wenn man mit . Strings zusammenfügt, müsste dann das Komma nach VALUES (" kein Punkt sein?
Ausserdem hast du 5 ", das kann auch nicht sein.

Und dann kommt noch das hinzu was die anderen beiden gesagt haben...
 
PHP:
$sql="INSERT INTO adressen" . "(id, Vorname) VALUES ('', '$_POST[Vorname]')";
Ich habe zwar kein Plan von PHP, aber wenn man mit . Strings zusammenfügt, müsste dann das Komma nach VALUES (" kein Punkt sein?

Nein, das ist kein Fehler, denn das Komma gehört zum SQL-Query.

Ausserdem hast du 5 ", das kann auch nicht sein.

Nochmal Nein: Er hat vier doppelte Anführungszeichen ("), und einmal zwei direkt aufeinander folgende einfache Anführungszeichen ('), also einen Leerstring.
 
PHP:
$sql="INSERT INTO adressen" . "(id, Vorname) VALUES ('', '$_POST[Vorname]')";

Dir zeigt schon das Syntaxhighlight das was nicht stimmen kann....

$_POST ist eine Variable, wenn du die mit Hochkommata einfasst, dann wird der Bezeichner logischerweise als String betrachtet.

Es muss also so aussehen:

PHP:
$sql = 'INSERT INTO adressen (id, Vorname) VALUES ("", "'.$_POST['Vorname'].'");'

Bevor du das Query ausführst kannst du dir den Befehl einfach mal mit echo $sql ausgeben lassen. Dann in PHPMyAdmin wechseln und versuchen den Befehl auszuführen. Dann wirste sehen ob du einen korrekten SQL-String erzeugst oder ob da dass Problem liegt.
 
Nein, das ist kein Fehler, denn das Komma gehört zum SQL-Query.

Nochmal Nein: Er hat vier doppelte Anführungszeichen ("), und einmal zwei direkt aufeinander folgende einfache Anführungszeichen ('), also einen Leerstring.
Um solche Missverständnisse zu vermeiden gibt es wohl die Syntax-Hervorhebung...
Jetzt ist mir auch klar wieso er 2 Kolonnen angibt. :rolleyes:
Nächstes mal schaue ich mir die Syntax-Highlight in der Vorschau erstmal an bevor ich etwas poste. xD
 
Herzlichen Dank für eure Antworten ! Eure Tipps haben leider noch zu keinem Erfolg geführt, aber ich denke, dass irgendetwas mit meiner MAMP installation nicht stimmt (bzw. php auf dem system). Es kann nicht sein, dass kein einziges Bsp. aus dem Internet oder von der CD vom oben genannten Buch bei mir nicht funktioniert wenn es um den Datenbankzugriff geht. Ich kann ja auch nicht über localhost auf die DB zugreifen, sondern muss zwingend den oben genannten Pfad eingeben. Da ist irgendwo ein gewaltiger Murks drinnen...
 
Ich hab vor ein paar Wochen auch gewaltigen Stress mit einem lokalen Apache Server auf dem Mac gehabt, deswegen kann ich dir einen Tipp geben:

Schmeiß MAMP nochmal _komplett_ runter und installier es neu.

Dann machst du nichts anderes als in der httpd.conf das DocumentRoot anzupassen.

Lad dir danach das Programm Sequel Pro herunter, das ist bei weitem besser als PHPMyAdmin.

Dann starte den Webserver und den Datenbankserver

Bei SequelPro gibst du als Verbindungparameter folgendes an:

Server: localhost
Username: root
Passwort: leer lassen
 
  • Gefällt mir
Reaktionen: wegus
Wenn Array in der Datenbanktabelle landet, würde ich erst mal über echo $_POST['Vorname']; exit; prüfen , was übergeben wird - ist das form-Tag, welches du gepostet hast, vollständig?

EDIT : schalte mal error_reporting (E_ALL) ein.

Hier ist z.B. ein Syntax-Fehler drin (wird deutlich, wenn man die php Abfrage mal etwas anders formatiert)
PHP:
<?php
if (!empty ($_POST["submit"])) 
{
	mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', 'root') or die ("Verbindung zu Mysql gescheitert");
	mysql_select_db("bewerberdatenbank") or die ("Verbindung zur Datenbank gescheitert");
	$sql="INSERT INTO adressen" . "(id, Vorname) VALUES ('', '$_POST[Vorname]')";

	if (mysql_query($sql)) 
	{
		echo "<p> Abfrage erfolgreich </p>";
	} 
	else 
	{
		echo "<p> Abfrage nicht erfolgreich </p>";
	}
// hier fehlt die abschließende Klammer }
?>
Um leere Einträge in der Datenbank zu vermeiden würde ich eher nach if ($_POST['Vorname'] && trim ($_POST['Vorname'])) fragen.


PHP:
$sql="INSERT INTO adressen" . "(id, Vorname) VALUES ('', '$_POST[Vorname]')";

Dir zeigt schon das Syntaxhighlight das was nicht stimmen kann....

$_POST ist eine Variable, wenn du die mit Hochkommata einfasst, dann wird der Bezeichner logischerweise als String betrachtet.

Es muss also so aussehen:

PHP:
$sql = 'INSERT INTO adressen (id, Vorname) VALUES ("", "'.$_POST['Vorname'].'");'

Das stimmt so nicht ganz:
PHP:
$sql = "INSERT INTO adressen (Vorname) VALUES ('$_POST[Vorname]')";
geht. Das " . " ist überflüssig, und id ist ja offensichtlich ein auto_increment-Wert, aber '$_POST[Vorname]' steht in der Variablen $sql und ist von Doublequotes umgeben; wird also ausgewertet. Schwierig wirds erst wenn man '$irgend[0][was][anderes]' versucht, da gehts wirklich nur über '".$irgend[0]['was']['anderes']."'. Dennoch würde ich in jedem Fall
PHP:
$sql = "INSERT INTO adressen (Vorname) VALUES ('".mysql_real_escape_string ($_POST['Vorname'])."')";
verwenden, um SQL-injections abzuwehren.
 
Zuletzt bearbeitet:
Zurück
Oben Unten