PHP PHP - MySQL Insert Into, kein richtiger Error und kein Eintrag

Cr41s3

Ensign
Registriert
Dez. 2012
Beiträge
246
Hallo zusammen.

Ich habe mir folgendes Script zusammengebastelt:

PHP:
<?php
	
	if ($_POST['question1'] == '1' && $_POST['question2'] == '3' && $_POST['question3'] == '1' && $_POST['name'] != '' && $_POST['nickname'] != '' && $_POST['age'] != '' && $_POST['email'] != '' && $_POST['spiele'] != '' && $_POST['steamcom'] != '' && $_POST['trigger'] != '' && $_POST['grund'] != '' && $_POST['tsdbid'] != '' && $_POST['besonderetalente'] != '' && $_POST['sonstiges'])
	{
		$name = $_POST['name'];
		$nickname = $_POST['nickname'];
		$age = $_POST['age'];
		$email = $_POST['email'];
		$steamcom = $_POST['steamcom'];
		$spiele = $_POST['spiele'];
		$trigger = $_POST['trigger'];
		$grund = $_POST['grund'];
		$tsdbid = $_POST['tsdbid'];
		$besonderetalente = $_POST['besonderetalente'];
		$sonstiges = $_POST['sonstiges'];
		$date = time();

		$link = mysqli_connect("localhost","root","","aod_member");


		if (mysqli_connect_errno()) {
		    printf("Connect failed: %s\n", mysqli_connect_error());
		    exit();
		}


		if (mysqli_query($link, "INSERT INTO `aod_member` (name, nickname, age, email, spiele, steamcom, trigger, grund, tsdbid, besonderetalente, sonstiges, datum, member)
		VALUES ($name, $nickname, $age, $email, $spiele, $steamcom, $trigger, $grund, $tsdbid, $besonderetalente, $sonstiges, $date, 0)") == TRUE) 
		{
		    printf("Deine Bewerbung wurde erfolgreich abgeschickt, wir melden uns bei dir per E-Mail und schalten dich bei Zusage im Teamspeak direkt frei..\n");
		}

		else
			echo 'Something wrent wrong';

		mysqli_close($link);
	}
	else
	{
		echo 'Tut mir Leid, du hast nicht alle Felder ausgef&uuml;llt und/oder nicht alle Fragen richtig beantwortet';
	}



?>

Nicht wundern, das ganze läuft über root, da es nur ein lokaler XAMPP Server ist.
Die Variablen werden richtig übernommen und können auch ausgegeben werden, aber in meiner Datenbank erscheint auch
kein Eintrag.

Der Einzige Error ist:
Something wrent wrong
Aber den habe ich ja selber reingebaut :/


Vielen Dank für eure Hilfe.
MfG-
 
"INSERT INTO `aod_member` (name, nickname, age, email, spiele, steamcom, trigger, grund, tsdbid, besonderetalente, sonstiges, datum, member) VALUES ($name, $nickname, $age, $email, $spiele, $steamcom, $trigger, $grund, $tsdbid, $besonderetalente, $sonstiges, $date, 0)"

Das bitte mal in eine Variable schreiben und simpel via echo ausgeben lassen. Die Ausgabe dann via phpmyadmin/ cmd ausführen, dann sollte es eine detaillierte Meldung geben.
 
@neo
0
Ja sorry bin halt noch neu, und was meinst du ist daran grausam?

@Blade
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'trigger, grund, tsdbid, besonderetalente, sonstiges, datum, member) VALUES (a, b' at line 1
Komme mit dem Error jett auch nicht wirklich weiter :/
 
trigger ist ein eigenwort in mysql... der fehler würde auch passieren, wenn deine spalte "select" heißen würde
probiers mal mit `trigger`
 
Patrickx2 schrieb:
trigger ist ein eigenwort in mysql... der fehler würde auch passieren, wenn deine spalte "select" heißen würde
probiers mal mit `trigger`

Vielen Dank :)

Letzter Fehler glaube ich:
#1054 - Unknown column 'a6' in 'field list'
INSERT INTO `aod_member` (name, nickname, age, email, spiele, steamcom, `trigger`, grund, tsdbid, besonderetalente, sonstiges, datum, member) VALUES (`a6`, b, 1, `a@a.de`, a5, `http://steamcommunity.com/id/NAME`, a1, a2, 2, a3, a4, 1396979401, 0)
Die einzige Spalte die vor name noch ist, ist `id`, aber die wird glaube ich automatisch hochgezählt oder nicht?
Bzw. wie könnte ich das am Besten hochzählen?
 
1.) das ` ist nur dazu da, um Spalten zu deklarieren. In Werten ist das Ding das falsche Zeichen. Dafür ist ' da.
2.) Dein Code, so wie du ihn da gepostet hast, schreit geradezu nach einem SQL Injection Angriff auf deine Datenbank. Das ist ne wunderbare Einladung, wie du da POST-Variablen ungefiltert in den Query ballerst. Wenn du statt dessen anständig mit Prepared Statements, z.B. via PDO, arbeiten würdest... Schmeiß diesen vergammelten prozeduralen Stil mit mysql_query/mysqli_query in die Mülltonne.
Wenn du mit Prepared Statements arbeiten würdest, würden sich auch einige deiner Probleme verziehen.
 
Cool danke für deine Erklärung, die ich einfach 0 verstehe.
Okey SQL Injection verstehe ich nur ein paar anfängerfreundliche Tipps wären schon nett.

Edit:
So danke, nun geht's, jetzt ist nurnoch das Thema SQLi zu erledigen.

MfG-
 
Zuletzt bearbeitet:
Er meint, dass du die PDO-Klasse von PHP nutzen sollst, da flexibel und sicher.
Da ist das schöne, da gibt es den Modus, dass bei Fehlern eine PHP-Exception geworfen wird, wenn du die nicht fängst, gibt das i.d.R. dir direkt Auskunft, was schief gelaufen ist.
Code:
$db=new PDO('mysql:dbname=mydb;host=localhost','user','pass',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte. ' in C:\xampplite\htdocs\test.php:2 Stack trace: #0 C:\xampplite\htdocs\test.php(2): PDO->__construct('mysql:dbname=my...', 'user', 'pass', Array) #1 {main} thrown in C:\xampplite\htdocs\test.php on line 2
Das ist hilfreich, allerdings solltest du den Konstruktor in ein try-catch packen, weil sonst mglw. die Datenbankzugangsdaten ausgegeben werden.
Du kannst dich auch auf die Exceptions verlassen und dann mit Transaktionen coole Dinge realisieren (automatischer Rollback bei Fehler z.B.).
 
Hancock schrieb:
Er meint, dass du die PDO-Klasse von PHP nutzen sollst, da flexibel und sicher.
Da ist das schöne, da gibt es den Modus, dass bei Fehlern eine PHP-Exception geworfen wird, wenn du die nicht fängst, gibt das i.d.R. dir direkt Auskunft, was schief gelaufen ist.
Code:
$db=new PDO('mysql:dbname=mydb;host=localhost','user','pass',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));

Das ist hilfreich, allerdings solltest du den Konstruktor in ein try-catch packen, weil sonst mglw. die Datenbankzugangsdaten ausgegeben werden.
Du kannst dich auch auf die Exceptions verlassen und dann mit Transaktionen coole Dinge realisieren (automatischer Rollback bei Fehler z.B.).

Okey vielen Dank :)
Ich teste gleich mal ein wenig rum.

MfG-

€: Funktioniert nun alles bestens :)
Man wird bei erfolgreicher Transaktion einfach weitergeleitet auf die index Seite, bei Fehlern muss ich noch schauen.
 
Zuletzt bearbeitet:
Cr41s3 schrieb:
Cool danke für deine Erklärung, die ich einfach 0 verstehe.
Okey SQL Injection verstehe ich nur ein paar anfängerfreundliche Tipps wären schon nett.
Mag ja sein, dass du Begriffe wie PDO oder Prepared Statements nicht direkt verstehst. Aber was macht der lernwillige Entwickler, wenn ihm jemand mit mehr Sachkenntnis ein paar Informationen gibt? Er recherchiert selbsttätig, was sich dahinter wohl verbirgt.

Eine Google-Suche nach PDO bringt dich z.B. direkt zum Handbuch von PHP:PDO. Da wir hier insgesamt von PHP reden, wird das wohl stimmen...
"Prepared Statements" zu suchen ergibt eine ausführliche Erklärung auf Wikipedia sowie das PHP-Handbuch zu dem Thema. Wieder was gelernt, hm?

Ein Forum ist NICHT dafür da, dir jede Kleinigkeit haarklein breit zu kauen. Es muss immer eine gewisse Wissensbasis existieren. Fehlt selbige, muss wenigstens der Wille da sein, sich diese Basis anhand der getroffenen Aussagen zu erarbeiten.
 
Daaron schrieb:
Mag ja sein, dass du Begriffe wie PDO oder Prepared Statements nicht direkt verstehst. Aber was macht der lernwillige Entwickler, wenn ihm jemand mit mehr Sachkenntnis ein paar Informationen gibt? Er recherchiert selbsttätig, was sich dahinter wohl verbirgt.

Eine Google-Suche nach PDO bringt dich z.B. direkt zum Handbuch von PHP:PDO. Da wir hier insgesamt von PHP reden, wird das wohl stimmen...
"Prepared Statements" zu suchen ergibt eine ausführliche Erklärung auf Wikipedia sowie das PHP-Handbuch zu dem Thema. Wieder was gelernt, hm?

Ein Forum ist NICHT dafür da, dir jede Kleinigkeit haarklein breit zu kauen. Es muss immer eine gewisse Wissensbasis existieren. Fehlt selbige, muss wenigstens der Wille da sein, sich diese Basis anhand der getroffenen Aussagen zu erarbeiten.

Das stimmt nur manchmal hilft ein kleiner Code Snippet als Anfang, sowie der von Hancock, den Rest habe ich nun selber zum Laufen bekommen.

Allen nochmal vielen Dank.

Hier kann zu-
 
Zurück
Oben