php -> insert into klappt nicht? Oo

hi, erstmal der code:

inhalt der mysql_connect.php:
Code:
<?php
$link = mysql_connect("127.0.0.1", "root", "");
if (!$link) {
    die('keine Verbindung möglich: ' . mysql_error());
}
echo 'Verbindung erfolgreich';
error_reporting(E_ALL);
mysql_select_db('uno', $link);
 
?>
<br>

inhalt der form1.php:
Code:
<?php
include("mysql_connect.php");

$_username = $_POST['username'];
$_prename = $_POST['prename'];
$_surname = $_POST['surname'];
$_email = $_POST['email'];
$_pwds = $_POST['pwds'];
$_school = $_POST['school'];
$_birthday = $_POST['birthday'];

$sql = "INSERT INTO user (username,prename,surname,email,pwd,school,birthday) VALUES ('$_username','$_prename',$_surname','$_email','$_pwds','$_school','$_birthday')"; 

echo "sql: " . $sql . "<br>";

 if($group1){ 
 "INSERT INTO uno (sex) VALUES ('1')";
 }
 else "INSERT INTO uno (sex) VALUES ('0')";
mysql_query($sql);

echo 'Werte wurden (hoffentlich) eintgetragen!';
 mysql_close($link);

 ?>

und die html:
Code:
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title></title>
  </head>
  <body>
  <PRE>
  <form action="form1.php" method="post">
  Nickname:          		<input type="text" name="username" value=""><br>
  Vorname:          		<input type="text" name="prename" value=""><br>
  Nachname:          		<input type="text" name="surname" value=""><br>
  E-Mail:          		<input type="text" name="email" value=""><br>
  Passwort:			<input type="text" name="pwds" value=""><br>
  Schule:          		<input type="text" name="school" value=""><br>
  Geburtstag(JJJJ-MM-TT):	<input type="text" name="birthday" value=""><br>
  </PRE>  
  
	<input type="radio" name="group1" value="1">weiblich 
    <input type="radio" name="group1" value="0">männlich<br>
    <input type="submit" />
  
  </form>

  </body>
</html>


Mein Problem ist, das das Script meine Datenbank nicht mit den Formulardaten füllt :(

die datenbank "uno" hat die tabelle "user", die folgende felder hat:
ID -> Mediumint, auto increment
email -> char(255)
username -> char(255)
pwd -> -> char(255)
sex -> tinyint(1)
prename -> char(255)
surname -> char(255)
birthday -> date
school -> char(255).

da ID auto-increment ist brauche ich mich ja nicht drum zu kümmern.
die frage is, was mache ich denn dann falsch?
haaalp :D
 
1) Dass du damit anfällig für SQL-Injection bist, ist dir klar? Niemals Userdaten direkt verarbeiten!
2) Du sagst birthday ist vom Typ date? Warum versuchst du dann einen String zu speichern?
3) Dieser Block macht genau nix ;)

Code:
if($group1){ 
 "INSERT INTO uno (sex) VALUES ('1')";
 }
 else "INSERT INTO uno (sex) VALUES ('0')";
 
1) kann schon sein, es geht um die basics ^^
2) hab das gefixt, habe die string teile weggelassen
3) block gelöscht


funktioniert nich.

warum macht denn block 3 nix? na gut...wenn ich "maennlich" eintrage, dann is $group1 doch auf 1 und wenn ich sage if($group1) dann is das true ;D dann sollte der doch den wert 1 eintragen. aber habs wie oben geschrieben gelöscht.

trotzdem funktioniert es nicht >.>

Code:
INSERT INTO user (username,prename,surname,email,pwd,school,birthday) VALUES ('nicknick','Heinz',Becker','q3@gx.net','passwert','Realschule',2009-12-12)

hab mir mal $sql ausgeben lassen... sieht doch gut aus mhmmm
 
Original von Chakky
was sagt die ausgabe mysql_error();

Der Block macht nichts, weil da kein Befehl drin ist ;)
Was du machen wolltest war wohl dieses hier:

Code:
if($group1)
{ 
    mysql_query("INSERT INTO uno (sex) VALUES ('1')");
 }
else
{
    mysql_query("INSERT INTO uno (sex) VALUES ('0')");
}
 
danke chakky, auf diese echt einfache, aber total hilfreiche idee hätte ich auch mal kommen können !!!

problem war ein ' << zuwenig.... hab das nich gesehen, aber wenn man das so in das statement eingibt gibt der ja einem gute hinweise.

perfekt, sehr gut und nochmal vielen dank ^^
 
Original von Thunderb0lt

Der Block macht nichts, weil da kein Befehl drin ist ;)
Was du machen wolltest war wohl dieses hier:

Code:
if($group1)
{ 
    mysql_query("INSERT INTO uno (sex) VALUES ('1')");
 }
else
{
    mysql_query("INSERT INTO uno (sex) VALUES ('0')");
}

ach stimmt :D lol. hab ich glatt übersehen Oo
wär mir spätestens nach 3 stunden aufgefallen lol. ne spaß beiseite... bin ja noch php frischling :D

ach statt uno muss ich natürlich user schreiben, denn uno ist die datendank und user die dazugehörige tabelle.
 
noch ein kleiner Tipp bezüglich der SQL-Injection-Anfälligkeit:

NEVER TRUST AN USER-INPUT!!!

dein Code:
PHP:
<?
$_username = $_POST['username'];
$_prename = $_POST['prename'];
$_surname = $_POST['surname'];
$_email = $_POST['email'];
$_pwds = $_POST['pwds'];
$_school = $_POST['school'];
$_birthday = $_POST['birthday'];
?>

wie schon erwähnt: ganz gefährlich!


alles, was Strings sind (text, char, varchar,...), jagst du durch mysql_real_escape_string() und alles was rein numerisch ist, castest du auch explizit als solches.

Bsp:
PHP:
<?
$_username = mysql_real_escape_string($_POST['username']);

$_plz = (int) $_POST['plz'];
$_kommazahl = (float) $_POST['kommazahl'];

//oder:
$_plz = intval($_POST['plz']);
$_kommazahl = floatval($_POST['kommazahl']);
?>

Und wenn ein ganz bestimmtes Format verlangt wird, wie beim Datum, dann überprüfst du das mit regulären Ausdrücken und gehst im Fehler-Fall zurück zum Formular, auf dass die Daten nochmals eingegeben werden müssen.

Bsp:
PHP:
<?
$_birthday = $_POST['birthday'];

if(!preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/i",$_birthday))
{
    echo "Fehler; bitte Datum im Format YYYY-MM-DD eingeben - nochmal bitte!";
}
else
{
    //insert data into mysql-database
}
?>
 
hey beavisbee -> sehr nett und geil das du das so hier mal aufgecodet hast Oo
ich wollte demnächst ne kleine admin oberfläche für ein fikitves projekt machen, warum also nicht gleich richtig. korrekte sache, ehrlich ^^
 
hab das Thema mal ganz grob in 'nem kleinen Vortrag für's Studium angerissen.
http://studium.cs-bergann.de/inet/phpsecurity/

da einige der Zuhörer mit PHP noch keinerlei Erfahrung hatten, hab ich versucht, einen Überblick über Gefahren zu geben, ohne zu tief ins Detail zu gehen. (hätte wohl den Zeit-Rahmen gesprengt...)

Es gibt Demo-Codes und Demo-Server-Config, um selbst mal auszuprobieren, unter welchen Umständen welcher PHP-Code gefährlich sein könnte...
(hauptsächlich in Bezug auf File-Injection)

(natürlich sind auch realitäts-ferne Demos dabei, wie das CD-Laufwerk-Öffnen-Script - aber am deutlichsten für's Publikum ist es schließlich, wenn bei dem Rechner, den man als Server hinstellt, tatsächlich ein gut sichtbares Eigenleben auftritt...)

Wollte eigentlich die Code-Sammlung schon immer mal erweitern (mal paar MySQL-Injections, komplexere Code-Einschleusung über Log-Files oder über MySQL) und auch mal direkte Vergleiche machen, welche Angriffe von php-suhosin-Patch abgefangen werden können, welche von Apache-Modulen abgefangen werden können, etc., um zu zeigen, dass eine Seite, die auf EINEM Server problemlos läuft unter anderen Umständen große sicherheitstechnische Probleme bereiten kann - aber irgendwie fehlt mir die Zeit :(
 
so, sorry für die späte antwort.

aber auch besten dank an beavisbee, sehr nice :)
werde jetzt mein project erstmal anpassen, is ja keine arbeit da ich ja noch nich viel gemacht hab ;-)

also danke an alle die mir produktiv geholfen haben!

-> ich habe in der if-schleife (kleiner scherz hahaha... is ne abfrage ich weiß... oh man!) bei der datumseingabe noch ein exit eingeben, damit der rest des scriptes nicht mehr ausgeführt wird.... ansonsten führt der ja den rest aus und die DB wird mit "falschen" werten gefüllt...

>> statt exit nehm ich lieber die("TEXT warum script sterben musste");
 
Zurück
Oben