beni90
Goto Top

MYSQL frage

Guten Tag miteinander,

seit einigen Wochen habe ich mit einem PHP & MYSQL Buch angefangen. Vor ein paar tagen habe ich jetzt mit dem Mysql teil angefangen wobei ich jetzt ein kleines problem habe.

Nun mein problem ist folgendes:
<?php

  $idee = $_POST['id'];  
  $name = $_POST['name'];  
  $mail = $_POST['mail'];  
  $nachricht = $_POST['nachricht'];  

  $db = mysqli_connect('localhost','root','','arben')  
  or die('GEHT NICHT');  

  $sql = "INSERT INTO gbook ('id', 'name', 'mail', 'nachricht') VALUES ('$idee', '$name', '$mail', '$nachricht')";  

  $ergebnis = mysqli_query($db, $sql)
  or die('geht nicht');  

  mysql_close($db);

echo 'hallo';  

?> 
Wen ich auf meiner erstellten Website in 4 Feldern eines Formulars ( idee, name, mail, nachricht) Daten eingebe sodass diese per diesem php script in meine mysql Datenbank geschrieben werden kriege ich den Wert "geht nicht" zurück was ja heissen soll das es irgendeinen fehler bei der ausführung von mysqli_query($db, $sql) gab.

Bin noch ein kompletter Anfänger auf diesem Bereich und wäre froh wen mir jemand kurz helfen könnte, sitze seit gestern morgen an diesem problem face-sad

Freundliche Grüsse

Beni90

Content-Key: 180000

Url: https://administrator.de/contentid/180000

Printed on: April 25, 2024 at 08:04 o'clock

Member: SlainteMhath
SlainteMhath Feb 03, 2012 at 10:54:29 (UTC)
Goto Top
Moin,

Schalte doch mal das Error Reporting an, dann bekommst du den eigentlichen Fehler auch angezeigt.
error_reporting(E_ALL)

OT: Gewöhn dir sowas gar nicht erst an! Stichwort SQL Injection usw. benutzte mindestens mysql_real_escape()
 $name = $_POST['name'];  
[...]
$sql = "INSERT INTO gbook ('id', 'name', 'mail', 'nachricht') VALUES (.... '$name', .... )";  

Und weil Freitag ist, hier noch ein Link zu meinem Lieblings-Comic zu dem Thema : http://xkcd.com/327/ face-smile

lg,
Slainte
Member: beni90
beni90 Feb 03, 2012 at 11:14:40 (UTC)
Goto Top
<?php
error_reporting(E_ALL)

$idee = $_POST['id'];
$name = $_POST['name'];
$mail = $_POST['mail'];
$nachricht = $_POST['nachricht'];

$db = mysqli_connect('localhost','root','','arben')
or die('GEHT NICHT');

$sql = "INSERT INTO gbook ('id', 'name', 'mail', 'nachricht') VALUES ('$idee', '$name', '$mail', '$nachricht')";

$ergebnis = mysqli_query($db, $sql)
or die('geht nicht');

mysql_close($db);

echo 'hallo';

?>

zeigt mir jetzt diese fehlermeldung an

Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\www\web\php\umfrage2_action.php on line 5

aber da stimmt doch alles in Zeile 5 ?


Wie meinst du das mit der sql injection face-smile? bin vollkommen der Noob hab hier nen Buch auf dem ich jetzt grad mal 50 Seiten durch hab XD

Danke für deine hilfe face-smile
Member: Arano
Arano Feb 03, 2012 at 11:23:12 (UTC)
Goto Top
Hi,

Die Fehlermeldung besagt das die unerwartete(unexpected) Variable(T_VARIABLE) in Zeile 5 steht, der Fehler selber liegt meisten davor
Und wenn wir nun weiter vorne schauen, dann fehlt nach error_reporting() noch das Semikolon face-wink


~Arano
Member: SlainteMhath
SlainteMhath Feb 03, 2012 at 11:28:10 (UTC)
Goto Top
Zitat von @beni90:
Wie meinst du das mit der sql injection face-smile? bin vollkommen der Noob hab hier nen Buch auf dem ich jetzt grad mal 50 Seiten durch
hab XD

 $sql = "INSERT INTO gbook ('id', 'name', 'mail', 'nachricht') VALUES ('$idee', '$name', '$mail', '$nachricht')";   
Überleg dir mal was $sql fuer einen Wert annimnt, wenn
$idee="1','','',''); DROP TABLE gbook; --";  
ist?

siehe auch http://en.wikipedia.org/wiki/SQL_injection
Member: nxclass
nxclass Feb 03, 2012 at 11:40:36 (UTC)
Goto Top
benutze lieber PDO
<?php

$dsn = 'mysql:dbname=arben;host=127.0.0.1';  
$user = 'root';  
$password = '';  
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();  
}

try {
    $sth = $dbh->prepare( 'INSERT INTO gbook (`id`, `name`, `mail`, `nachricht`) VALUES (?, ?, ?, ?)' );  
    $sth->execute( array(
        $_POST['id'],  
        $_POST['name'],  
        $_POST['mail'],  
        $_POST['nachricht'],  
    ) );
} catch (PDOException $e) {
    echo 'Fehler: ' . $e->getMessage();  
}

unset($dbh); // nicht nötig
Member: Arano
Arano Feb 03, 2012 at 11:41:46 (UTC)
Goto Top
benutze lieber PDO
Warum ?
Member: nxclass
nxclass Feb 03, 2012 at 12:25:40 (UTC)
Goto Top
Warum ?
Kurz:
  • die Gefahr von Injections wird reduziert
  • man kann es für unterschiedlichste DB benutzen
  • durch die "Objekt Eigenschaft" ist es für den Programmierer viel einfacher anzuwenden
... es gibt zwar einiges zu beachten, weil zB nicht alle Funktionen des Objekts von jeder DB unterstützt werden - Aber im Endeffekt hat man ja den selben Treiber, nur eben einfacher anzuwenden.

Man ist einfach viel schneller damit beim Programmieren, insbesondere wenn man kein Framework einsetzt. (btw. PDO wird wohl inzwischen auch von jedem Framework benutzt)
Member: beni90
beni90 Feb 03, 2012 at 13:18:55 (UTC)
Goto Top
Mhh hab jetzt bei meinen Codes noch ein bisschen rumgespielt und den Quelcode von nxclass versucht aber kriegs irgendwie nicht hin.. was ich eigentlich mit meiner übung erreichen will, ist ganz einfach das 4 Werte die ich in einem HTML formular eingebe per PHP in meine MYSQL Datenbank (
Ich Arbeite Lokal mit dem Tool Xampp da ich dies neben meiner Arbeit her lerne. Kann es sein das dieses Tool manchmal spinnt ?

Könnte mir eventuell jemand einen Code schreiben der Funktioniert? Wen ich einen hätte der Funktioniert könnte ich da dann selbstständig herausfinden was, was heisst und mir das dan aneignen face-smile

l.g

Beni90
Member: nxclass
nxclass Feb 03, 2012 at 13:59:08 (UTC)
Goto Top
lass dir doch bitte die generierte SQL Anweisung ausgeben - und führe diese in deinem phpMyAdmin aus (bzw. poste die hier)

Bekommst du nicht mal eine Fehlermeldung wenn Du den von mir geschriebenen Code benutzt ?
Wie rufst Du das Script denn auf ?
Hast Du überhaupt ein Zugriff mit root auf die Datenbank ? (blöde Frage - aber man kann nie wissen)
Stimmen deine Angaben zu Datenbanknamen, Tabellennamen, Datenfeldnamen und Datentypen überhaupt ?

EDIT:
sendet dein Formular Überhaupt Daten (per POST) ?
var_dump($_POST);
Member: beni90
beni90 Feb 03, 2012 at 15:38:44 (UTC)
Goto Top
sorry hat jetzt geklappt :D hatte noch nen fehler hatte im textfeld die id unbenannt.

danke vielmal :D

kannst du mir eventuell noch erklären für was PDO steht oder mir nen guten link schicken aufdem ich codes gut beschrieben finde?

l.g

beni90
Member: nxclass
nxclass Feb 03, 2012 at 16:26:29 (UTC)
Goto Top
http://php.net/manual/en/book.pdo.php - php.net sollte man kennen
http://dev.mysql.com/doc/refman/5.1/de/ - das auch

ansonsten liefert dir Google massenhaft Beispiele