Per Formular in Datenbak schreiben

Alles, was PHP betrifft, kann hier besprochen werden.

Per Formular in Datenbak schreiben

Postby all new » 26. August 2009 15:38

Hallo,

ich weiß, dass das Thema hier schon etliche male behandelt wurde. Hab mich auch durch die Beiträge gelesen, aber ich bekomme es nicht hin.

ich versuch mit diesem Formular und PHP-Code in die Datenbank zu schreiben

Code: Select all
<form method="post" action="<?=$PHP_SELF?>">
<p>Gib den Witz ein:</p>
<textarea name="witz" cols="40" rows="10"></textarea><br>
<input name="submitjoke" type="submit" value="speichern" />
 
</form>


<?php

if (!@mysql_connect("127.0.0.1","root","root")) {
      echo("<p>keine Verbindung zum Datenbankserver.</p>");
            exit();   
         }
                        
if (!@mysql_select_db("jokes")) {
   echo("<p>auswahl der Datenbank nicht möglich</p>");
   exit();
   }

if ($submitjoke == "speichern") {
   
        $sql_b = " INSERT INTO witze (JokeText, JokeDate)
              VALUES('$_POST[witz]', CURDATE())";
                     
      if (@mysql_query($sql_b)) {
         echo("<p>Jupp, hat geklappt.</p>"); }
         else { echo(" Nee, war nix");}
         
}   
?>


Die Array $_POST[witz] hat den Inhalt aus dem TExtfeld, das hab ich mit if isset schonmal getestet. Es wird aber nix in die Datenbanktabelle( drei Felder: ID(Auto_Inc), JokeText, JokeDate) geschrieben.Die Kontrollstruktur if (@mysql_query($sql_b)) am Ende spuck niemals was aus, auch komisch, finde ich.

Jemand ne Idee? Hab schon den ganzen Tag verplämpert :x

Gruß
all new
 
Posts: 4
Joined: 26. August 2009 15:28

Re: Per Formular in Datenbak schreiben

Postby Wiedmann » 26. August 2009 16:08

ie Kontrollstruktur if (@mysql_query($sql_b)) am Ende spuck niemals was aus

Man könnte natürlich die "@" weglassen, damit man überhaupt auftretende Fehler sieht (wie willst du so ein Script debuggen?)

In deinem Fall wird zudem ja eh nur was ausgegeben, wenn der Befehl erfolgreich war. Im anderen Fall sollte man dann mysql_error() ausgeben lassen.

if ($submitjoke == "speichern") {

Diese Variable wird wohl nie den Wert "speichern" haben, weshalb das Query so oder so nie ausgeführt wird. Du willst an den Anfang deiner Scripte dieses reinmachen:
Code: Select all
error_reporting(E_ALL);

(oder die "php.ini" entsprechend anpassen)

Code: Select all
<form method="post" action="<?=$PHP_SELF?>">

"<?=$PHP_SELF?>" ist auch etwas was meist nichts vernünftiges tut. Entweder lässt action="" leer, oder korrekt "<?php echo $_SERVER['PHP_SELF']; ?>"
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Per Formular in Datenbak schreiben

Postby all new » 26. August 2009 16:14

Werd ich gleich mal alles probieren.
Danke erstmal.
all new
 
Posts: 4
Joined: 26. August 2009 15:28

Re: Per Formular in Datenbak schreiben

Postby all new » 26. August 2009 17:19

Wiedmann wrote:
if ($submitjoke == "speichern") {

Diese Variable wird wohl nie den Wert "speichern" haben, weshalb das Query so oder so nie ausgeführt wird.
"

Ja, ok, ich hab's in
Code: Select all
if ($_POST['submitjoke'] == "speichern") {
   

geändert und jetzt funktioniert es. Das Skript schreibt jetzt in die DB, damit ist das Prob gelöst, oder erwarten mich da noch überraschungen?

Ich hab noch ne Frage zu den kleinen Anführungsstrichen im $_POST-Array.
Bei
Code: Select all
if ($_POST['submitjoke'] == "speichern")
kann ich sie schreiben, oder auch nicht - funktioniert trotzdem.

Bei
Code: Select all
VALUES('$_POST[witz]', CURDATE())";
muss ich sie weglassen, sonst gibt es einen Parse Error?
all new
 
Posts: 4
Joined: 26. August 2009 15:28

Re: Per Formular in Datenbak schreiben

Postby Wiedmann » 26. August 2009 17:39

Ich hab noch ne Frage zu den kleinen Anführungsstrichen im $_POST-Array.

http://de.php.net/manual/en/language.types.array.php#language.types.array.foo-bar

muss ich sie weglassen, sonst gibt es einen Parse Error?

http://de.php.net/manual/en/language.types.string.php#language.types.string.parsing.simple
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Per Formular in Datenbak schreiben

Postby all new » 27. August 2009 12:45

ok, danke
all new
 
Posts: 4
Joined: 26. August 2009 15:28

Re: Per Formular in Datenbak schreiben

Postby Stepke-DSL » 28. August 2009 07:34

Da du nach möglichen Problemen fragst, klinke ich mich hier mal kurz ein.
Bei dem Eintragen könnte es zu Problemen kommen.
Ändere die Zeile mal um, von
Code: Select all
$sql_b = " INSERT INTO witze (JokeText, JokeDate)
              VALUES('$_POST[witz]', CURDATE())";

in
Code: Select all
$sql_b = " INSERT INTO witze (JokeText, JokeDate)
              VALUES('".addslashes(trim($_POST[witz]))."', CURDATE())";


addslashes
stripslashes
trim

MfG Stepke
Stepke-DSL
 
Posts: 313
Joined: 12. July 2007 16:08
Operating System: Win XP Pro SP3 + SuSe Linux

Re: Per Formular in Datenbak schreiben

Postby Xardas der Dunkle » 28. August 2009 12:19

Am besten direkt: mysql_real_escape_string benutzen, die ist schließlich extra dafür gedacht!
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Re: Per Formular in Datenbak schreiben

Postby Altrea » 31. August 2009 07:59

besser finde ich noch, direkt mysqli mit prepared Statements zu verwenden:

- i.d.R. eine gesteigerte Performance
- Das entschärfen von Werten mit mysql_real_escape_string entfällt
- eine schicke neue OOP-Syntax ;))

und wenn man früh damit anfängt, gewöhnt man sich auch schnell an die Syntax.

P.S.: bevor jetzt alle PDO-Evangelisten aufschreien: Ja, prepared Statements kann man auch mit PDO verwenden :)
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 8297
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 10 Pro x64


Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest