PHP Mein PHP-Formular kommt nicht mit nullen klar

mikelsdump

Cadet 4th Year
Registriert
Aug. 2008
Beiträge
117
Hallo,

ich habe ein zwei php-Seiten. In der ersten gibt man eine dreistellige Nummer (KAN) im Format TINYTEXT, des weiteren die POS (SMALLINT), sowie das Bestelldatum und das Lieferdatum ein (beide Spalten im Format DATE).

Auf der zweiten Seite werden die Daten verarbeitet. Funktioniert grundsätzlich schon (Bilder "F1 funktioniert" & "F2 funktioniert"), ABER:
Sobald bei der KAN eine 0 vorne dran ist (gibt man also z.B. 001) ein (Bild "F1 mit null am Anfang"), dann dreht die verarbeitende Seite irgendwie durch (Bild "F2 funktioniert nicht") und zeigt die Inhalte nur selektiv an.

Die IAN - obwohl sie erstellt wurde (Bild "Eintrag ist erfolgt") - wird an keiner Stelle angezeigt, und KAN und POS werden nur in der Tabelle und mitten im Satz oben angezeigt, aber nicht hinter diesem Satz.

Kann mir jemand helfen?

Formulareingabe
PHP:
 <form action="AE2.php" method="post">
  <div class="AN"> Auftrag definieren <br><br>
   <?
    echo "KAN: <input type=\"Text\" name=\"KAN\" id=\"KAN\" value=\"\" size=\"2\" maxlength=\"3\"> (letzte drei Ziffern der Auftragsnummer des Kunden)<br>";
    echo "POS: <input type=\"Text\" name=\"POS\" id=\"POS\" value=\"\" size=\"2\" maxlength=\"3\"> (Anzahl der Positionen insgesamt)<br>"; 
    echo "Bestelldatum: <input type=\"Text\" name=\"Bestelldatum\" id=\"Bestelldatum\" value=\"\" size=\"10\" maxlength=\"10\"> (Format: jjjj-mm-tt)<br>";
    echo "Lieferdatum: <input type=\"Text\" name=\"Lieferdatum\" id=\"Lieferdatum\" value=\"\" size=\"10\" maxlength=\"10\"> (Format: jjjj-mm-tt)<br>";
    echo "<input type=\"submit\" value=\"Erstellen\">"; 
   ?>
  </div>
 </form>

Formularverarbeitung
PHP:
  <?
 if (isset($_POST["KAN"])) { 
  $KAN="".htmlspecialchars($_POST["KAN"])."";
  $POS="".htmlspecialchars($_POST["POS"])."";
  $Bestelldatum=htmlspecialchars($_POST["Bestelldatum"]);
  $Lieferdatum=htmlspecialchars($_POST["Lieferdatum"]);
 }
echo "<div class=\"Site_Head\">Einen Auftrag erstellen</div>";


 /*Prüfung ob Eintrag erfolgreich oder nicht mit Bestätigung.*/
 if (mysql_query("INSERT INTO `db1047981`.`iankanpos` 
	(`IAN`, `KAN`, `POS`, `Bestelldatum`) 
	VALUES 
	(NULL, '$KAN', '$POS', $Bestelldatum);")) {
     /*Nochmalige Darstellung der Eingabe durch den User*/
	 echo ' Der aus Ihrer Eingabe ('.$_POST["KAN"]."-".$_POST["POS"].') erstellte Auftrag lautet:';
	 
	 /*Ausgabe des letzten Wertes, dessen Code und Position mit der Eingabe aus dem Formular übereinstimmen*/
	 $LastEntry=mysql_fetch_array(mysql_query("SELECT * FROM `db1047981`.`iankanpos` WHERE `KAN` LIKE $KAN AND `POS` LIKE $POS ORDER BY `IAN` DESC LIMIT 1"));
	 
	 /*Ausgabe der ermittelten Nummer zur Bestätigung*/
	 echo $LastEntry["IAN"]."-".$LastEntry["KAN"]."-".$LastEntry["POS"]."<br>"; 
	 $IAN=$LastEntry["IAN"];
	 echo "Geben Sie für jede Position die jeweiligen Daten ein.<br><br>";
	 
	 /*Eintrag in die Tabelle iankanposstma*/
	 ?>
	 <form action="AE3.php" method="POST" target="">
	 <?
	 $i=1;
	 //Während i kleiner als POS schreibe in die Spalten ID, IAN, KAN & POS die jeweiligen Variablenwerte
	  echo "<table class=\"\"><tr>";
	  echo "<td class=\"AE_Head\">Position</td><td class=\"AE_Head\">Stückzahl</td><td class=\"AE_Head\">Materialart</td><td class=\"AE_Head\">Bezeichnung</td><td class=\"AE_Head\">Teilenummer</td><td class=\"AE_Head\">Zeichnungsnummer</td><td class=\"AE_Head\">Lieferdatum</td></tr><tr>";
	  //echo "<td class=\"AE_Subhead\">IAN-KAN-POS</td><td class=\"AE_Subhead\">max. 9999</td><td class=\"AE_Subhead\"></td><td class=\"AE_Subhead\"></td><td class=\"AE_Subhead\"></td><td class=\"AE_Subhead\"></td></tr><tr>";
	 while ($i <= $POS) {
	  $TableName="iankanposstma";
	  $TableData="INSERT INTO $TableName
	  (ID, IAN, KAN, POS) 
	  VALUES 
	  (NULL, '$IAN', '$KAN', '$i')
	  ";
	  $FillTable=mysql_query($TableData) or die (mysql_error());
	  //Wenn die Tabelle beschrieben wurde, dann erstelle Input-Formular zur Festlegung von Stückzahl & Materialart
	  If ($FillTable) {
	  echo "<td class=\"AE\"> $IAN-$KAN-$i</td>";
 

Anhänge

  • F1 Eingabe mit null am Anfang.jpg
    F1 Eingabe mit null am Anfang.jpg
    79,6 KB · Aufrufe: 236
  • F1 funktioniert.jpg
    F1 funktioniert.jpg
    79,4 KB · Aufrufe: 234
  • F2 funktioniert nicht.jpg
    F2 funktioniert nicht.jpg
    42,9 KB · Aufrufe: 258
  • F2 funktioniert.jpg
    F2 funktioniert.jpg
    62,5 KB · Aufrufe: 237
  • Eintrag ist erfolgt.jpg
    Eintrag ist erfolgt.jpg
    13,1 KB · Aufrufe: 245
Zuletzt bearbeitet:
Lass dir mal die übermittelten Werte und Querys ausgeben, dann kommst du dem bestimmt auf die Schliche.

Deine Bilder und dessen Namen sind auch irgendwie durcheinander. Benenn sie doch lieber markant und nicht "F1 xy", "F2 ab", "F1 ce", ...
 
Also ich weiß, dass das Problem an dem Array $LastEntry liegt, denn wenn ich
PHP:
echo $LastEntry["IAN"] or die (mysql_error());
versuche, kommt keinerlei Fehlermeldung...aber ausgegeben wird das Ding auch nicht.

Und ich hab keine Ahnung wieso. Es sind doch nur nullen...wie kann ich das denn ändern?
 
Zuletzt bearbeitet:
Das funktioniert auch nicht, da echo keinen Rückgabewert hat (zumal ich diese Art der Programmierung auch als sehr schlecht empfinde). Höchstwahrscheinlich steht dort null oder false drin. Lass dir das mit var_dump() ausgeben, dann bekommst du auch gleich den Typen mit. Dann stimmt wohl irgendwas bei der Zuweisung nicht.

Btw:
Code:
SELECT * FROM `db1047981`.`iankanpos` WHERE `KAN` LIKE $KAN AND `POS` LIKE $POS ORDER BY `IAN` DESC LIMIT 1
$KAN musst du wenn dann quoten mittels Hochkommas. Zahlen mit vorangestellter Null definiert man als Oktalzahlen (so wie Hex mit 0x anfängt). Deine 001, wird also zu 1 gewandelt, was in der DB nicht vorkommt (sondern 001). Quote die Dinger, dann solltest du dein Ergebnis bekommen. Btw speichert man alles was mit 0 anfängt als String und nicht als Zahl (eben wegen Oktalzahlen). Sowas passiert auch bei Postleitzahlen, welche mit 0 beginnen, genauso wie man die Hausnummer einer Straße immer als String abspeichert (12a, 12b, ...).
 
Setz dir vorher das Insert-Statement in nem String zusammen und führ es dann aus.
(Lass dir das Statement auch mal ausgeben, vllt passt da eben was nicht)

Ansonsten hätte ich jetzt gesagt es liegt hier an den den fehlenden Anführungszeichen

if (mysql_query("INSERT INTO `db1047981`.`iankanpos`
(`IAN`, `KAN`, `POS`, `Bestelldatum`)
VALUES
(NULL, '$KAN', '$POS', '$Bestelldatum');"))

Dadurch das du ihm anscheinend keine korrekte Date-Struktur übergibst, schreibt er nur den Default-Wert rein.
 
@Sporano:
Den Datumsfehler hatte ich schon gefunden und korrigiert. Mit dem hatte das Problem bei KAN und IAN aber nichts zu tun. Aber vielen Dank trotzdem :)

@Yuuri:
Super, das war es. Die Hochkommas bei KAN und IAN. Hatte so etwas in der Art auch vermutet nachdem ich das mit vardump angesehen hatte. Vielen herzlichen Dank!!! :)
 
Zurück
Oben