Anfängerproblem Daten mit Formular in DB eintragen!

Gladiator6

Erfahrenes Mitglied
Hallo

Ich habe ein Formular erstellt, mit welchem ich Daten in eine Mysql DB eintragen möchte.
Die Datenbank hat eine Tabelle mit 5 Feldern. Hab mal als Beispiel eine Tabelle für Sportresultate gemacht. Es hat ein Feld für das Datum, Spiel (wer gegen wen), Tore geschossen und Tore erhalten, sowie ein Feld welches die Nr. angibt (wird automatisch erhöht).

Die Seite mit dem Formular ruft sich selber auf! Irgend wie funktioniert es nicht, ich begreife im Moment aber nicht was falsch ist!

Vielleicht kann mir da kurz jemand behilflich sein, hier der PHP Code:

PHP:
<?php
$datum=$_POST["datum"];
$spiel=$_POST["spiel"];
$tg=$_POST["tg"];
$te=$_POST["te"];

     if(isset($gesendet))
     {
         if(isset($datum) && isset($spiel) && isset($tg) && isset($te))

         {
                          mysql_connect('localhost','root','');
                          mysql_select_db("db_name");
                          mysql_query("insert spiele (datum, spiel, tg, te) values
                          ('$datum', '$spiel', '$tg', '$te')");
                          
                          $num=mysql_affected_rows();
                          
                          if($num>0)
                          echo "$num Datenbankeintrag wurde erfolgreich hinzugefügt";
                          
                          else
                          {
                              echo"Es wurde kein Eintrag hinzugefügt, da ein Fehler aufgetreten ist";
                              
                          }
                          
         }

         else
         {
             echo"Bitte alle Felder ausfüllen";
         }
      }
         
?>

Das Formular:

HTML:
<form action="mysql10.php" method="post">
<input type="text" name="datum">
<input type="text" name="spiel" size="20">
<input type="text" name="tg">
<input type="text" name="te">
<input type="submit" value="Eintragen" name="gesendet">
<input type="reset" value="Reset">
</form>
 
Zuletzt bearbeitet:
Bei deinem Skript werden die Variablen immer gesetzt, jedoch mit leerem Inhalt. Prüf doch mit empty(), ob die Variablen Inhalte haben, also so:
PHP:
<?php
$datum=$_POST["datum"];
$spiel=$_POST["spiel"];
$tg=$_POST["tg"];
$te=$_POST["te"];

     if(isset($gesendet))
     {
         if(!empty($datum) && !empty($spiel) && !empty($tg) && !empty($te))

         {
                          mysql_connect('localhost','root','');
                          mysql_select_db("db_name");
                          mysql_query("insert spiele (datum, spiel, tg, te) values
                          ('$datum', '$spiel', '$tg', '$te')");
                          
                          $num=mysql_affected_rows();
                          
                          if($num>0)
                          echo "$num Datenbankeintrag wurde erfolgreich hinzugefügt";
                          
                          else
                          {
                              echo"Es wurde kein Eintrag hinzugefügt, da ein Fehler aufgetreten ist";
                              
                          }
                          
         }

         else
         {
             echo"Bitte alle Felder ausfüllen";
         }
      }
         
?>
 
Habs mal geändert! Nun kommt aber die Meldung, dass nichts eingetragen wurde! Folglich ist $num=mysql_affected_rows(); nicht grösser als 0!

Warum nicht?

Was ist eigentlich falsch, wenn ich isset(); brauche? Diese Funktion prüft doch, ob eine Variable vorhanden ist?
 
Wenn du isset verwendest wird nur überprüft ob die Variable deklariert ist, aber nicht ob sie einen wert hat.
Da du am Anfang $datum schreibst ist die Variable deklariert und isset($datum) liefert true zurück.
Auch wenn die Variable leer ist.
isset() ist immer dann sinvoll wenn ein Script von Variablen abhängig ist und es ohne diese zu Fehlern kommt.
z.B. Wenn du Daten in der URL übermittelst und mit $_GET auslesen möchtest lohnt es sich immer zu überprüfen ob diese überhaupt vorhanden sind. Den es könnte auch sein, dass ein Spassvogel nur den Link aufruft ohne die Daten und schwups... haste eine schöne Fehlermeldung...

Ich hoffe ich hab nicht zuviel geschwafelt :)

MfG

Ecthelion
 
Ok nun ist alles klar!
Kann man eigentlich mit "!" generell definieren, dass etwas nicht erfüllt ist?

Mein Script funktioniert leider noch nicht. An was liegt das wohl?

$num=mysql_affected_rows(); sollte doch korrekt sein?
 
Ersetz mal

PHP:
mysql_query("insert spiele (datum, spiel, tg, te) values
                          ('$datum', '$spiel', '$tg', '$te')");


durch:

PHP:
mysql_query("
INSERT INTO 
spiele (datum, spiel, tg, te)
VALUES
( '".$datum."',
'".$spiel."',
'".$tg."',
'".$te."'
)" OR die(mysql_error());

Vielleicht gibt der ja ne Fehlermeldung aus...
 
Du meinst so:

PHP:
( '".$datum."','".$spiel."','".$tg."','".$te."')" OR die(mysql_error()));

Es fehlte noch eine Klammer. Das Problem besteht aber trotzdem, Fehlermeldung gibt er keine! Nur den Echo Befehl welcher bei "else" steht!
 
Dann mal so:
PHP:
$sql = "
INSERT INTO 
spiele (datum, spiel, tg, te)
VALUES
( '".$datum."',
'".$spiel."',
'".$tg."',
'".$te."'
)";

mysql_query($sql) OR die(mysql_error()); 
echo $sql;

mal sehn was der überhaupt einträgt...
 
Hey super :D Es funktioniert!

Was ist jetzt anders? Sollte ich den SQL Befehl zuerst in eine Variable schreiben und erst dann mit mysql_query(); eintragen?
 
Also generell ist das zu empfehlen!
Das macht den Script übersichtlicher... finde ich.
Warum das auf einmal klappt.... ka ;)

Mach wie du meinst oder wie es eben klappt ;)
Also Gute Nacht!

MfG

Ecthelion
 
Zurück