Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
PHP Script schreibt nur 0 in DB [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
PHP Script schreibt nur 0 in DB


 
Hauser
21-01-2010, 14:01 
 
Hallo Freunde.

Ich sitzte geade hier um Daten aus einem Mailformular in die
Datenbank zu schreiben. Leider erhalte ich nur 0 Einträge in die
Datenbank. Ich tippe mal auf eine falsche Form in der real_escape_string
Verkettung, die ich so auch noch nicht vorher probiert habe, also mein
erster Versuch sozusagen.

Ist klasse, wenn mir jemand mal einen Tipp geben kann. Danke.

<?php

error_reporting(E_ALL); #zeig alle Fehler
ini_set('display_errors', '1');

include_once $_SERVER['DOCUMENT_ROOT'] . '/securimage/securimage.php';
$securimage = new Securimage();

if ($securimage->check($_POST['captcha_code']) == false) {

die('Der von Ihnen eingegebene Code ist nicht korrekt. Bitte gehen Sie zurück und
versuchen es nochmal.');

}else
{
$from = "From: ". $_POST['email'] ."";
$to = "oliver.ziebarth@t-online.de";
$betreff = "Email Kontaktformular";
$name = $_POST['name'];

$strasse = $_POST['strasse'];

$plzort = $_POST['plzort'];

$email = $_POST['email'];
$telefon = $_POST['telefon'];

$fax = $_POST['fax'];

$anliegen = $_POST['anliegen'];
$message = "Diese Nachricht wurde vom Kontaktformular erzeugt. \n"
."Die Nachricht lautet: \n"
."Name: ". $name ."\n"
."Strasse: ". $strasse ." \n"
."PLZ / Ort: ". $plzort ." \n"
."E-Mail: ". $email ." \n"
."Telefon: ". $telefon ." \n"
."Fax: ". $fax ." \n"
."Anliegen/Frage: ". $anliegen ." \n";

if(!mail($to, $betreff, $message, $from)) {
echo "Fehler beim Senden der Mail! \n";
exit;
}
else {
echo "Mail erfolgreich gesendet! \n";
}

require_once 'inc/login.inc.php';
$verbindung = mysqli_connect($server, $benutzer, $passwort);
$id = 'ID';
$id = $verbindung->real_escape_string($id);
$name = 'name';
$name = $verbindung->real_escape_string($name);
$strasse = 'strasse';
$strasse = $verbindung->real_escape_string($strasse);
$plzort = 'plzort';
$plzort = $verbindung->real_escape_string($plzort);
$email = 'email';
$email = $verbindung->real_escape_string($email);
$telefon = 'telefon';
$telefon = $verbindung->real_escape_string($telefon);
$fax = 'fax';
$fax = $verbindung->real_escape_string($fax);
$anliegen = 'anliegen';
$anliegen = $verbindung->real_escape_string($anliegen);

if ($verbindung){

mysqli_select_db ($verbindung, $datenbank);

if(mysqli_error($verbindung)){
echo 'Fehler: Keine Verbindung zur Datenbank' . mysqli_error($verbindung);

}else{
echo print_r ($_POST);

if (isset($_POST['ID'])) {

$sql = "INSERT INTO kontakt
(name,strasse,plzort,email,telefon,fax,anliegen) VALUES
($name='".mysqli_real_escape_string($verbindung,$_POST[$name])."',
$strasse='".mysqli_real_escape_string($verbindung,$_POST[$strasse])."',
$plzort='".mysqli_real_escape_string($verbindung,$_POST[$plzort])."',
$email='".mysqli_real_escape_string($verbindung,$_POST[$email])."',
$telefon='".mysqli_real_escape_string($verbindung,$_POST[$telefon])."',
$fax='".mysqli_real_escape_string($verbindung,$_POST[$fax])."',
$anliegen='".mysqli_real_escape_string($verbindung,$_POST[$anliegen])."' )" ;

mysqli_query($verbindung, $sql);

echo 'Wir haben Ihre Frage / Anfrage erhalten ! Vielen Dank!';

mysqli_close($verbindung);
}
}
}
}

?>Gruß
Der Hauser

 
AmicaNoctis
21-01-2010, 15:13 
 
Hallo,

erstens werden statische Feldnamen nicht real-escaped (Zeilen 50-65)! Zweitens ist das kein gültiges Insert-Statement und du solltest dir mal die MySQL-Doku dazu ansehen. Drittens hast du entweder alle Fehlermeldungen unterschlagen oder error_reporting regelwidrig eingestellt und solltest daher die Forenregeln beachten. Und viertens ist es keine Art, hier einfach den ganzen Quelltext reinzuwerfen, ohne jegliches Anzeichen für eigene Bemühungen und dann drauf warten, dass den jemand Korrektur liest. Du hättest es ja wenigstens auf den relevanten (letzten) Teil begrenzen können.

Daher: *move* nach Projekthilfe.

Gruß,

Amica

 
Hauser
21-01-2010, 15:42 
 
Also, sorry !

Ich habe schon einiges versucht, um denn Fehler zu finden. Würde ich das hier alles reinschreiben, könnte es ebenso den Rahmen sprengen. Daher finde ich dieses als eine leichte Unterstellung, dass ich nichts getan hätte.:{

Wenn die Regel besagt, dass Komplettlösungen nicht angeboten werden, darf ich als Intressent doch auch nicht erwarten, dass jemand mir hier ein komplett richtiges Ergebnis liefert, bzw. korrektur liest, das will ich doch auch gar nicht und ich sehe auch nicht, dass ich dieses Angefordert hätte.

Der wesentliche Teil ! Gibt man zu wenig an, kann es unter umständen falsch sein.

Fehlermeldung habe ich nicht erhalten, sonst hätte ich sie doch gepostet bzw. die Frage gar nicht gestellt, da ich dann ja Anhaltspunkte hätte.n natürlich interessiert an weiteren Methoden Fehler zu entlarven :)

Danke aber für die Änsätze:

erstens werden statische Feldnamen nicht real-escaped (Zeilen 50-65)! Zweitens ist das kein gültiges Insert-Statement und du solltest dir mal die MySQL-Doku dazu ansehen :)

 
AmicaNoctis
21-01-2010, 15:46 
 
Fehlermeldung habe ich nicht erhalten, sonst hätte ich sie doch gepostet

Das war das "entweder", aber lies mal das "oder".

Außerdem habe ich nicht unterstellt, dass du dich nicht selbst bemüht hättest, sondern nur bemängelt, dass du dafür keine Anzeichen hast erkennen lassen und das ist nunmal Fakt.

 
Hauser
21-01-2010, 16:35 
 
Ich habe es jetzt folgendermaßen geändert.
Nun schreibt er mir die Werte in die Datenbank.

Hoffe das es jetzt so richtig gelöst ist.


require_once 'inc/login.inc.php';

$verbindung = mysqli_connect($server, $benutzer, $passwort);

$name = $_POST['name'];
$strasse = $_POST['strasse'];
$plzort = $_POST['plzort'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$fax = $_POST['fax'];
$anliegen = $_POST['anliegen'];

$name = $verbindung->real_escape_string($name);
$strasse = $verbindung->real_escape_string($strasse);
$plzort = $verbindung->real_escape_string($plzort);
$email = $verbindung->real_escape_string($email);
$telefon = $verbindung->real_escape_string($telefon);
$fax = $verbindung->real_escape_string($fax);
$anliegen = $verbindung->real_escape_string($anliegen);

if ($verbindung){

mysqli_select_db ($verbindung, $datenbank);

if(mysqli_error($verbindung)){
echo 'Fehler: Keine Verbindung zur Datenbank' . mysqli_error($verbindung);

}else{
echo print_r ($_POST);

if (isset($_POST['ID'])) {

$sql = "INSERT INTO kontakt
(name,strasse,plzort,email,telefon,fax,anliegen) VALUES
('$name','$strasse', '$plzort','$email','$telefon','$fax','$anliegen')";
mysqli_query($verbindung, $sql);

echo 'Wir haben Ihre Frage / Anfrage erhalten ! Vielen Dank!';
...sondern nur bemängelt, dass du dafür keine Anzeichen
hast erkennen lassen und das ist nunmal Fakt.

...und ich gelobe auf jeden Fall Besserung bei meinen Postings in Sachen
Korrespondenz meiner Taten. :)

Lieben Gruß
Hauser.

 
AmicaNoctis
21-01-2010, 17:06 
 
Eine Anmerkung noch. Du wechselst bei den MySQLi-Aufrufen immer zwischen objektorientierter und funktionsbasierter Notation. Es wäre besser, wenn du dich für eine Variante (mein Vorschlag: oo) entscheiden würdest.

Und bitte brich den Code um.

Gruß,

Amica

 
Hauser
21-01-2010, 21:08 
 
Du wechselst bei den MySQLi-Aufrufen immer zwischen objektorientierter und funktionsbasierter Notation. Es wäre besser, wenn du dich für eine Variante (mein Vorschlag: oo) entscheiden würdest.

Und bitte brich den Code um.

Bist du bitte so nett und kannst mir objektorientierter und funktionsbasierter Notation erklären. Ich habe ehrlich gesagt schon bei Wiki nachgesehen, aber dazu nix gefunden. Was bedeutet das genau und was bewirkt es ? :confused:

Code umbrechen = Hab ich noch nie gehört, sorry, soll ich Zeilenumbrüche verwende ? Hab ein 24 Monitor, kommt daher das Probelm.

Danke für die Aufklärung!

 
AmicaNoctis
21-01-2010, 21:26 
 
Objektorientierte Notation (empfohlen):
$verbindung->query("select * from foo");

Funktionsbasierte Notation:
mysqli_query($verbindung, "select * from foo");

Du verwendest derzeit beides wild durcheinander.

Code umbrechen = Hab ich noch nie gehört, sorry, soll ich Zeilenumbrüche verwende ? Hab ein 24 Monitor, kommt daher das Probelm.

Ja, bitte - und zwar so, dass keine Zeile länger als 100 Zeichen ist. Steht auch in den Forenregeln und das nützliche Tool in meiner Signatur sollte dir das auch schon gesagt haben.

Dein 24"-Monitor ist kein Problem, solange du nicht davon ausgehst, dass alle so einen haben ;)

 
Hauser
21-01-2010, 21:34 
 
Alles klar, danke Dir für die Infos :)

Gruß,

Hauser

 
AmicaNoctis
21-01-2010, 21:37 
 
Gern geschehen, aber ich sehe immer noch überlangen Code!

 
Hauser
21-01-2010, 21:54 
 
Besser so :D

Dafür hat er sich doch ein :beer: verdient, oder. LOL

Gruß,

Hauser

 
AmicaNoctis
21-01-2010, 21:57 
 
Danke und Prost. Bitte beim nächsten Mal gleich beachten.

 
Hauser
21-01-2010, 22:04 
 
Ja, ein Smiley mit einem Glas Wein wird hier ja leider nicht angeboten.

Aber Danke.

Gruß
Hauser


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:39 Uhr.