PHP Fehlersuche - TINYINT Werte vom Formular-Script landen in der DB als Null

C

Crunor

Gast
Guten Tag,

ich habe ein kleines Problem mit unserem Script. Wir tragen in der Schule momentan die Bücher "hobbymäßig" in eine MySQL Datenbank ein, mit dem Hintergrund diese dann in die Schulhomepage zu integrieren.

Nun habe ich ein kleines Formular erstellt, wo die Werte eingegeben werden sollen. Mit Click auf den Button sollen die Werte dann an ein anderes Script weitergegeben werden, was dann prüft, ob alle benötigten Werte da sind und diese dann in die Datenbank einträgt.

Hier mal die beiden Dateien:

eintrag.php - hier wird ein Formular erstellt, was dann die Werte mit Post an eingetragen.php verschickt.
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
  <?php
  include("dbconnect.php");
  ?>
<html>
<head>
<title>Einen neuen Datensatz eintragen</title>
</head>
<body>
<center>Mit dem folgenden Formular kann man neue Bücher hinzufügen.<br>Das Löschen von Datensätzen ist nachträglich <u>nicht</u> möglich.<br><br><b>Bitte aktiviere JavaScript!</b><br><br>


<table border="0">
    
    <form action="eingetragen.php" method="post">
    <tr><td>Titel <font color="red"><b>*</b></font>:</td> <td><input type="text" size="17" name="feld_titel"></td></tr>
    <tr><td>Untertitel:</td> <td> <input type="text" size="17" name="feld_untertitel"></td></tr>
    <tr><td>Autor <font color="red"><b>*</b></font>:</td> <td> <input type="text" size="17" name="feld_autor"></td></tr>
    <tr><td>Barcode:</td> <td> <input type="text" size="17" name="feld_barcode"></td></tr>
    <tr><td>Verlag <font color="red"><b>*</b></font>:</td> <td> <input type="text" size="17" name="feld_verlag"></td></tr>
    <tr><td>Kategorie <font color="red"><b>*</b></font>:</td> <td> <input type="text" size="17" name="feld_kategorie"></td></tr>
    <tr><td>Jahr <font color="red"><b>*</b></font>:</td> <td> <input type="text" size="17" name="feld_jahr"></td></tr>
    <tr><td>Seitenzahl <font color="red"><b>*</b></font>:</td> <td> <input type="text" size="17" name="feld_seitenzahl"></td></tr>
    <tr><td>Regal <font color="red"><b>*</b></font>:</td> <td> <input type="text" size="17" name="feld_regal"></td></tr>
    <tr><td>Segment <font color="red"><b>*</b></font>:</td> <td> <input type="text" size="17" name="feld_segment"></td></tr>
    <tr><td>Hoehe <font color="red"><b>*</b></font>:</td> <td> <input type="text" size="17" name="feld_hoehe"></td></tr>
    <tr><td>Sonstiges:</td> <td> <input type="text" size="17" name="feld_sonstiges"></td></tr>
</table>  

  <center>
  <input type="submit" value="Datensatz endgültig abschicken">
  </center>
  </form>
<br>
<center>Felder mit einem roten Sternchen (<font color="red"><b>*</b></font>) müssen ausgefüllt werden!</center>


</body>
</html>

eingetragen.php - hier werden die Werte aus eintrag.php empfangen, geprüft ob alle Werte vorhanden sind und diese sollen dann in die Datenbank eingetragen werden. Ich weiß, dass die Art und Weise, der den Benutzer zu eintrag.php zurückschickt nicht der schönste ist, aber ich wusste mir nicht anders zu helfen. :D
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<?php
  include("dbconnect.php");
?>
<html>
<head>
<meta http-equiv="refresh" content="0; url=eintrag.php">
<title>Datensatz wird an die Datenbank übergeben ...</title>
</head>
<body>
<?php

  $titel = $_POST["feld_titel"];
  $untertitel = $_POST["feld_untertitel"];
  $autor = $_POST["feld_autor"];
  $barcode = $_POST["feld_barcode"];
  $verlag = $_POST["feld_verlag"];
  $kategorie = $_POST["feld_kategorie"];
  $jahr = $_POST["feld_jahr"];
  $seitenzahl = $_POST["feld_seitenzahl"];
  $regal = $_POST["feld_regal"];
  $segment = $_post["feld_segment"];
  $hoehe = $_post["feld_hoehe"];
  $sonstiges = $_post["feld_sonstiges"];

if(isset($_POST['feld_titel']) && !empty($_POST['feld_autor']) && !empty($_POST['feld_verlag']) && !empty($_POST['feld_kategorie']) && !empty($_POST['feld_jahr']) && !empty($_POST['feld_seitenzahl']) && !empty($_POST['feld_regal']) && !empty($_POST['feld_segment']) && !empty($_POST['feld_hoehe']))  
{
  $eintrag = "INSERT INTO Buecher (titel, untertitel, autor, barcode, verlag, kategorie, jahr, seitenzahl,
  regal, segment, hoehe, sonstiges) VALUES ('$titel', '$untertitel', '$autor', '$barcode', '$verlag', '$kategorie', '$jahr',
  '$seitenzahl', '$regal', '$segment','$hoehe', '$sonstiges')";
   $eintragen = mysql_query($eintrag);
  echo "<script language=javascript>alert('Der Datensatz wurde erfolgreich eingetragen.')</script>";
}
else
{
  echo "<script language=javascript>alert('Es wurden nicht alle erforderlichen Angaben gemacht.')</script>";
  exit();
}
?>
</body>
</html>

Und nun das Problem: Soweit funktioniert eigentlich alles ganz gut. Jedoch sind $hoehe und $segment zwei kleine Problemkinder - egal, was man bei diesen beiden Felder eingibt, in der Datenbank landet immer ein Wert Null ("0"). Im Anhang mal die Struktur der Datenbank, wo auch die entsprechenden Datentypen stehen. Wenn ich die Datensätze allerdings über PHPMyAdmin anlege und den gleichen Befehl verwende wie im Script, kommen korrekte Werte bei raus. Also muss der Fehler beim Script liegen. Nur wo?

Ich blick einfach nicht, wieso $regal korrekt übergeben wird, allerdings $hoehe und $segment immer als 0 ausfallen ... weiß da wer Hilfe?
 

Anhänge

  • segment-hoehe.PNG
    segment-hoehe.PNG
    67,8 KB · Aufrufe: 251
Mich wunderts, dass er überhaupt was eingetragen hat, da du mit (titel, untertitel,usw...) eigentlich andere Colums auswählst als eigentlich in der Datenbank sind.
Crunor schrieb:
PHP:
$eintrag = "INSERT INTO Buecher (titel, untertitel, autor, barcode, verlag, kategorie, jahr, seitenzahl,
  regal, segment, hoehe, sonstiges) VALUES ('$titel', '$untertitel', '$autor', '$barcode', '$verlag', '$kategorie', '$jahr',
  '$seitenzahl', '$regal', '$segment','$hoehe', '$sonstiges')";
   $eintragen = mysql_query($eintrag);

Dort heißen sie nämlich Titel, Untertitel, usw. also mit nem Großbuchstaben zu beginn!

ich würde das ganze so lösen:

PHP:
$sql= mysql_query("INSERT INTO Buecher 
				   (titel, untertitel, autor, barcode, verlag, kategorie, jahr, seitenzahl, regal, segment, hoehe, sonstiges)
				   VALUES ('$titel', '$untertitel', '$autor', '$barcode', '$verlag', '$kategorie', '$jahr', '$seitenzahl', '$regal',
				   		   '$segment','$hoehe', '$sonstiges')");

if (!$sql) {
	echo "Fehler: ".mysql_error();
}
else {
	echo "Daten erfolgreich in die Datenbank eingetragen!";
}
So hast du auch sofort eine Ausgabe der Fehlermeldung!
 
Zuletzt bearbeitet:
was kommt bei
PHP:
print_($_POST);

Poste mal die Ausgabe!

Das fügst du am besten über der DB sparte!

Und nimm mal kurz dein
HTML:
<meta http-equiv="refresh" content="0; url=eintrag.php">
raus.
 
So, ich hab jetzt den Tipp von wiked befolgt und es funktioniert.

volcem, wenn ich allerdings deinen Tipp anwenden möchte, bekomme ich folgendes:
PHP:
Fatal error: Call to undefined function print_() in /home/webpages/lima-city/crunor/html/lernzentrum/admin/eingetragen.php on line 30

Die Funktion print möchte irgendwie nicht. Die Zurückleitung ist natürlich draussen. Achja, und an dem Problem hat sich (leider) nichts geändert. :(
 
Damit gibt er den Inhalt des Array $_POST aus. Nachzulesen hier

EDIT: Sorry ganz überlesen...

Crunor schrieb:
Achja, und an dem Problem hat sich (leider) nichts geändert.

Was kommt denn jetzt für eine Fehlermeldung?
 
Zuletzt bearbeitet:
So schaut die Datei jetzt aus:
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
<?php
  include("dbconnect.php");
?>
<html>
<head>
<!-- <meta http-equiv="refresh" content="0; url=eintrag.php"> -->
<title>Datensatz wird an die Datenbank übergeben ...</title>
</head>
<body>


<?php

 print_r($_POST);  // PRINT

  $titel = $_POST["feld_titel"];
  $untertitel = $_POST["feld_untertitel"];
  $autor = $_POST["feld_autor"];
  $barcode = $_POST["feld_barcode"];
  $verlag = $_POST["feld_verlag"];
  $kategorie = $_POST["feld_kategorie"];
  $jahr = $_POST["feld_jahr"];
  $seitenzahl = $_POST["feld_seitenzahl"];
  $regal = $_POST["feld_regal"];
  $segment = $_post["feld_segment"];
  $hoehe = $_post["feld_hoehe"];
  $sonstiges = $_post["feld_sonstiges"];


 

$sql= mysql_query("INSERT INTO Buecher 
                   (titel, untertitel, autor, barcode, verlag, kategorie, jahr, seitenzahl, regal, segment, hoehe, sonstiges)
                   VALUES ('$titel', '$untertitel', '$autor', '$barcode', '$verlag', '$kategorie', '$jahr', '$seitenzahl', '$regal',
                              '$segment','$hoehe', '$sonstiges')");

if (!$sql) {
    echo "Fehler: ".mysql_error();
}
else {
    echo "Daten erfolgreich in die Datenbank eingetragen!";
}  



/* if(isset($_POST['feld_titel']) && !empty($_POST['feld_autor']) && !empty($_POST['feld_verlag']) && !empty($_POST['feld_kategorie']) && !empty($_POST['feld_jahr']) && !empty($_POST['feld_seitenzahl']) && !empty($_POST['feld_regal']) && !empty($_POST['feld_segment']) && !empty($_POST['feld_hoehe']))  
{
  $eintrag = "INSERT INTO Buecher (titel, untertitel, autor, barcode, verlag, kategorie, jahr, seitenzahl,
  regal, segment, hoehe, sonstiges) VALUES ('$titel', '$untertitel', '$autor', '$barcode', '$verlag', '$kategorie', '$jahr',
  '$seitenzahl', '$regal', '$segment','$hoehe', '$sonstiges')";
   $eintragen = mysql_query($eintrag);
  echo "<script language=javascript>alert('Der Datensatz wurde erfolgreich eingetragen.')</script>";
}
else
{
  echo "<script language=javascript>alert('Es wurden nicht alle erforderlichen Angaben gemacht.')</script>";
  exit();
} */
?>
</body>
</html>
Das Auskommentierte ist btw. meine ehemalige IF-Abfrage-Funktion, ob alle Felder da sind. Die werde ich die Tage wieder einbauen.

Und dies ist die Ausgabe:
PHP:
Array ( [feld_titel] => Testtitel [feld_untertitel] => [feld_autor] => Testautor [feld_barcode] => [feld_verlag] => Testverlag [feld_kategorie] => 1 [feld_jahr] => 1234 [feld_seitenzahl] => 4321 [feld_regal] => 1 [feld_segment] => 1 [feld_hoehe] => 1 [feld_sonstiges] => ) Daten erfolgreich in die Datenbank eingetragen!

Segment und Hoehe werden allerdings immer noch als Null ("0") in der Datenbank eingetragen? oO
 
Hmm..

Was passiert den wenn du in der DB manuell einen Wert >(höher) 0 einträgst?
Irgend was stinkt da....

Versuche mal folgendes,

die Variable zeigen, und zwar so:

PHP:
echo $_post["feld_segment"];
echo $_post["feld_hoehe"];

Trage mal irgend einen Wert höher als > 0 ein!
 
Zuletzt bearbeitet:
Zurück
Oben