Formulardaten in db schreiben geht nicht

snowman85

Grünschnabel
Hi leutz ich bin absoluter PHP und SQL neuling und habe einige Probleme

Ich hab folgende php-Datein geschrieben (also nich wirklich ich :) ) hier meine verbind.php

PHP:
<?php
error_reporting(E_ALL);

include 'config.php';
// Konfigurationsdatei laden

if(!@mysql_connect(HOST, USER, PASSWD)) {
echo("Es konnte keine Verbindung aufgebaut werden");
die(); // Script beenden
}

echo "Verbindung wurde aufgebaut<br />\n";

if(!mysql_select_db(DATABASE)) {
echo "Konnte Datenbank nicht benutzen.<br />\n";
echo "Der Grund dafür: ".mysql_error()."\n";
die(); // Script beenden
}

echo "Die Datenbank wurde ausgewählt <br />\n";

// Hier kann man jetzt MySQL-Querys senden

$sql = "INSERT INTO umfrag
			(Alter ,Studiengang)
		VALUES
			("$_POST['alt']","$_POST['studgang']")";

echo "Die Daten wurden in Tabelle geschrieben";
?>

und hier meine config.php

PHP:
<?php
    // config.php
	error_reporting(E_ALL);
	define('HOST',     '127.0.0.1');
	define('USER',     'testuser');
	define('PASSWD',   'stimmtnich');
	define('DATABASE', 'organi');
?>

und das ist das Formular welches ich versenden und speichern möchte

HTML:
<form action="php/verbind.php" method="post">
	
	Geschlecht: <select name="geschl" size="1">
      			<option value=""></option>
      			<option value="männlich">männlich</option>
	 			<option value="weiblich">weiblich</option>
				</select>
	<br>
	Alter: <input name="alt" type="text" size="5" maxlength="2">
	<br>
	Fachbereich: <select name="fachb" size="1">
      			<option value=""></option>
      			<option value="IT-ET">IT-ET</option>
	 			<option value="Me">Me</option>
				<option value="MF">MF</option>
				<option value="MPI">MPI</option>
				<option value="Ww">Ww</option>
				<option value="Sw">Sw</option>
				</select>
	<br>
	Studiengang: <input name="studgang" type="text" size="30" maxlength="30">
<table cellspacing="2" cellpadding="2" border="1">
 <tr>
    <td>Frage 1 ...?</td>
    <td><input type="radio" name="1f"></td>
    <td><input type="radio" name="1f"></td>
    <td><input type="radio" name="1f"></td>
    <td><input type="radio" name="1f"></td>
    <td><input type="radio" name="1f"></td>
</tr>
</table>
<input type="submit" value=" Absenden ">
</form>

So meine Datenbank heißt "organi" und die Tabelle "umfrag" mit folgenden Spalten:

ID = int(5) auto_increment
Geschlecht = varchar(10)
Alter = int(2)
Fachbereich = varchar(6)
Studiengang = varchar(30)
Frage1 = varchar(10)

wenn ich auf "Absenden" klicke kommt:

Verbindung wurde aufgebaut
Die Datenbank wurde ausgewählt
Die Daten wurden in Tabelle geschrieben


aber geschrieben wurde nichts :( . Die Verbindung steht doch oder etwa nicht :confused:. Außerdem sollen alle Formularelemente in die Tabelle geschrieben werden. Wobei ich auch schon bei meinem nächsten Problem wäre ich habe keine Ahnung wie ich die Auswahlfelder und die Radiobuttons in die Tabelle speichern kann. Wäre echt nett wenn mir da jemand helfen könnte.
 
Änder mal
PHP:
$sql = "INSERT INTO umfrag
            (Alter ,Studiengang)
        VALUES
            ("$_POST['alt']","$_POST['studgang']")";
in
PHP:
$sql = "INSERT INTO umfrag
            (Alter ,Studiengang)
        VALUES
            (".mysql_real_escape_string($_POST['alt']).",'".mysql_real_escape_string($_POST['studgang'])."')";
Hat eine Spalte den Datentyp VARCHAR solltest du den Wert in ' setzen. mysql_real_escape_string() hilft gegen SQL-Injection. Beide Punkte hab ich schonmal eingefügt.

Überprüf doch mal, was so in $_POST drin steht, mit var_dump() oder so ;)
 
ersteml danke für eure schnelle Antwort Gumbo und Radhad hab das jetzt mal geändert funktionieren möchte es aber immer noch nich

PHP:
echo "Die Datenbank wurde ausgewählt <br />\n";

// Hier kann man jetzt MySQL-Querys senden

mysql_query('INSERT INTO umfrag
			(Alter ,Studiengang)
		VALUES
			(".mysql_real_escape_string($_POST['alt']).",
			 ".mysql_real_escape_string($_POST['studgang']).")')

echo "Diese Daten wurden in Tabelle geschrieben";

Fehlermeldung ist wie folgt

Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\Umfrage\php\verbind.php on line 27

und das ist bei mir line 27

PHP:
(".mysql_real_escape_string($_POST['alt']).",
			 ".mysql_real_escape_string($_POST['studgang']).")')
 
PHP:
echo "Die Datenbank wurde ausgewählt <br />\n";

// Hier kann man jetzt MySQL-Querys senden

mysql_query("INSERT INTO umfrag
            (Alter ,Studiengang)
        VALUES
            ('".mysql_real_escape_string($_POST['alt'])."',
             '".mysql_real_escape_string($_POST['studgang'])."')");

echo "Diese Daten wurden in Tabelle geschrieben";

Wenn du mit einfachen Anführungszeichen eröffnest, musst du auch mit einfachen Anführungszeichen escapen.
Meiner Meinung nach ist es schöner bei SQL Queries mit doppelten zu arbeiten.
 
von Flex

PHP-Code:
Wenn du mit einfachen Anführungszeichen eröffnest, musst du auch mit einfachen Anführungszeichen escapen.
Meiner Meinung nach ist es schöner bei SQL Queries mit doppelten zu arbeiten.

Also hab das mal umgeschrieben die Fehlermeldung ist nun auch weg nur leider wird immer noch nichts in die Datenbank geschrieben.
 
Dann hab ich jetzt mal einen Tipp für dich ;)

PHP:
mysql_query("INSERT INTO umfrag
            (Alter ,Studiengang)
        VALUES
            ('".mysql_real_escape_string($_POST['alt'])."',
             '".mysql_real_escape_string($_POST['studgang'])."')") or die(mysql_error());

Wenn jetzt ein Fehler im Query ist, wird dein Script abgebrochen und eine Fehlermeldung ausgespuckt. Evtl existiert die Tabelle "umfrag" auch nicht. Meintest du vielleicht "umfrage"?

Edit: Und setz das Komma vor "Studiengang" im Query mal nach "Alter". Ist kein Syntaxfehler, glaube ich, aber unsauber geschrieben... ^^
 
Zuletzt bearbeitet:
von klecksfuss

Evtl existiert die Tabelle "umfrag" auch nicht. Meintest du vielleicht "umfrage"?

Die Tabelle heißt wirklich umfrag weiß jetzt auch nich warum ich die so genannt hab mir war da wahrscheinlich grad so :-). Das mit
PHP:
or die(mysql_error());
hab ich jetzt auch mal gemacht da kommt folgendes 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 'Alter, Studiengang) VALUES ('12', '23')' at line 2.

So langsam aber sicher bin ich echt am verzweifeln :(
 
„Alter“ ist ein reserviertes Wort und muss deshalb explizit als Tabellenname ausgezeichnet werde, soll er dennoch benutzt werden können:
PHP:
mysql_query("INSERT INTO `umfrag`
            (`Alter` ,`Studiengang`)
        VALUES
            ('".mysql_real_escape_string($_POST['alt'])."',
             '".mysql_real_escape_string($_POST['studgang'])."')") or die(mysql_error());
 
Zurück