• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Leere Eingabe durch null ersetzen

larose

Mitglied
Hallo Leute
Ich habe ein Bestellungsformular erstell, wo Mitarbeiter die Menge ihrer Artikel fordern können.
Nun habe ich folgende Probleme.
Wenn das Formular nicht ausgefüllt ist, sollte eine Fehlermeldung erscheinen. Klar mit folgende Code ist es einfach:
PHP:
if (filled_out($_POST)) {...}

Da ich aber viele Artikel anbiete und der Mitarbeiter nur einige davon benötigen könnte, wie kann ich das Problem lösen, damit die nicht ausgefüllte Felder durch 'o' (NULL) ersetzt oder gar nicht berücksichtigt werden.
Das ist aber nicht gut für die Datenbank, da er viele NULL bekommen wird, leider weiss ich jetzt nicht wie ich es verbessern kann :(
Mir wäre natürlich lieber dass nur ausgefüllte Felder berücksichtigt werden.

Hat vielleicht jemand eine Idee?
 
Zuletzt bearbeitet:
Werbung:
So seiht es in meiner DB aus:

upload_2014-5-19_15-18-52.png

ok, du meinst mit der function empty.
Ist es möglich das ganze Formular zu prüfen anstatt jedes Feld?

PHP:
if($_POST == "") {}
oder
if(empty($_POST)) {}

Was meinst du damit?
 
Werbung:
Ich verstehe immer noch nicht, wieso da nicht ausgefüllte Daten mit NULL gespeichert werden sollten.
Wenn in $_POST['abc'] nix drin ist, einfach nicht speichern
 
ok, ich verstehe dein Logik. Das heiß beim Speichern in der DB werden nur die ausgefüllte Formulare gespeichert. Sehr gut.
Ich habe einfach eine Function geschrieben. Nachdem der Mitarbeiter seine Bestellung getätigt hat, sollte die sofort in der DB gespeichert werden.
was ist wenn ich 20 Artikel anbiete. Sollte ich die alle nacheinander prüfen ?

oder if(empty($_POST)) prüft das ganze Formular schon für mich?
 
oder if(empty($_POST)) prüft das ganze Formular schon für mich?
Das könntest du mit einfachem Ausprobieren selber herausfinden, oder?

Nein, so kannst du das nicht prüfen, jeder einzelne Wert muss durchgegangen werden. Aber das sollte ja auch kein Problem mit Hilfe einer Funktion sein.
 
Werbung:
So jetzt habe ich tatsächlich was ich gefürchtet habe.
ich kann zwar vermeiden dass ein leeres Formular verschickt werde. aber wenn nur ein Artikel gewählt wird, bekomme ich dann 0 bei den anderen Werte.

upload_2014-5-19_16-14-34.png

Wie kann ich das vermeiden, das sich viele null bekomme ?
 
von den 8 möglichen Waren, wird eine gewählt und die Menge gegeben. So sieht meine Code Insert aus:

PHP:
function insert_best_personal($ware_1, $ware_2, $ware_3, $ware_4, $ware_5, $ware_6, $ware_7, $ware_8)
// Fügt ein neue Bestellung in die DB ein
{
   $conn = db_connect();
   
    $abteilung_nr = db_abteilung_nr();
    $datum = time();
    // Vollständige Texte     bestellung_nr     abteilung_nr     artikel_nr     bestell_menge     datum
   // Neues Bestellung hinzufügen
   $query = "insert into bestellung values
            ('$abteilung_nr', '1', '$ware_1'),
            ('$abteilung_nr', '2', '$ware_2'),
            ('$abteilung_nr', '3', '$ware_3'),
            ('$abteilung_nr', '4', '$ware_4'),
            ('$abteilung_nr', '5', '$ware_5'),
            ('$abteilung_nr', '6', '$ware_6'),
            ('$abteilung_nr', '7', '$ware_7'),
            ('$abteilung_nr', '8', '$ware_8')";
 
   $result = $conn->query($query);
   if (!$result)
    {....}
 
Werbung:
von den 8 möglichen Waren, wird eine gewählt und die Menge gegeben. So sieht meine Code Insert aus:

PHP:
function insert_best_personal($ware_1, $ware_2, $ware_3, $ware_4, $ware_5, $ware_6, $ware_7, $ware_8)
// Fügt ein neue Bestellung in die DB ein
{
   $conn = db_connect();
 
    $abteilung_nr = db_abteilung_nr();
    $datum = time();
    // Vollständige Texte     bestellung_nr     abteilung_nr     artikel_nr     bestell_menge     datum
   // Neues Bestellung hinzufügen
   $query = "insert into bestellung values
            ('$abteilung_nr', '1', '$ware_1'),
            ('$abteilung_nr', '2', '$ware_2'),
            ('$abteilung_nr', '3', '$ware_3'),
            ('$abteilung_nr', '4', '$ware_4'),
            ('$abteilung_nr', '5', '$ware_5'),
            ('$abteilung_nr', '6', '$ware_6'),
            ('$abteilung_nr', '7', '$ware_7'),
            ('$abteilung_nr', '8', '$ware_8')";

   $result = $conn->query($query);
   if (!$result)
    {....}

Du hast das ganz falsch aufgebaut.
Habe aber gerade keine Zeit. Jedenfalls solltest du eine Schleife nehmen statt so vielen Parametern.
 
So sieht mein Formular aus:

PHP:
?>
 <form action='personal_abt.php' method='post'>
 
   <table align = "center"width=400 cellpadding=13 cellspacing=0 bgcolor='#cccccc'>
   <tr><th>Artikel_Nr.</th>
        <th>Artikel_Name</th>
        <th>Gew&uuml;nschte Menge</th>
   </tr>
   <tr><td align = "center">1</td>
       <td>Ware_1</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_1" size=8></td>
   </tr>
    <tr><td align = "center">2</td>
       <td>Ware_2</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_2" size=8></td>
   </tr>
    <tr><td align = "center">3</td>
       <td>Ware_3</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_3" size=8></td>
   </tr>
   <tr><td align = "center">4</td>
       <td>Ware_4</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_4" size=8></td>
   </tr>
   <tr><td align = "center">5</td>
       <td>Ware_5</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_5" size=8></td>
   </tr>
   <tr><td align = "center">6</td>
       <td>Ware_6</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_6" size=8></td>
   </tr>
   <tr><td align = "center">7</td>
       <td>Ware_7</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_7" size=8></td>
   </tr>
   <tr><td align = "center">8</td>
       <td>Ware_8</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_8" size=8></td>
   </tr>
 
   <tr><td></td>
   <td colspan=2><input type='submit' value='Bestellung senden'>
   </td>
   <td></td>
   </tr>
   </table>
 
<?php
 
Werbung:
So sieht mein Formular aus:

PHP:
?>
<form action='personal_abt.php' method='post'>

   <table align = "center"width=400 cellpadding=13 cellspacing=0 bgcolor='#cccccc'>
   <tr><th>Artikel_Nr.</th>
        <th>Artikel_Name</th>
        <th>Gew&uuml;nschte Menge</th>
   </tr>
   <tr><td align = "center">1</td>
       <td>Ware_1</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_1" size=8></td>
   </tr>
    <tr><td align = "center">2</td>
       <td>Ware_2</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_2" size=8></td>
   </tr>
    <tr><td align = "center">3</td>
       <td>Ware_3</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_3" size=8></td>
   </tr>
   <tr><td align = "center">4</td>
       <td>Ware_4</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_4" size=8></td>
   </tr>
   <tr><td align = "center">5</td>
       <td>Ware_5</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_5" size=8></td>
   </tr>
   <tr><td align = "center">6</td>
       <td>Ware_6</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_6" size=8></td>
   </tr>
   <tr><td align = "center">7</td>
       <td>Ware_7</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_7" size=8></td>
   </tr>
   <tr><td align = "center">8</td>
       <td>Ware_8</td>
       <td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware_8" size=8></td>
   </tr>

   <tr><td></td>
   <td colspan=2><input type='submit' value='Bestellung senden'>
   </td>
   <td></td>
   </tr>
   </table>

<?php

Durch das:

PHP:
$query = "insert into bestellung values
('$abteilung_nr', '1', '$ware_1'),
('$abteilung_nr', '2', '$ware_2'),
('$abteilung_nr', '3', '$ware_3'),
('$abteilung_nr', '4', '$ware_4'),
('$abteilung_nr', '5', '$ware_5'),
('$abteilung_nr', '6', '$ware_6'),
('$abteilung_nr', '7', '$ware_7'),
('$abteilung_nr', '8', '$ware_8')";

werden immer 8 Einträge geschrieben.
 
Zuerst einmal folgende Änderung an dem Formular vornehmen:
Bei den Namen wird aus ware_1 ein ware[1], aus ware_2 wird ein ware[2]
Dann dieses Script versuchen (auf die Schnelle zusammengeschraubt und ungetestet)
PHP:
<?php
  
  $data = array();
  
  // Leere Einträge entfernen
  foreach ($_POST['ware'] as $key => $value)
 {
    if (!empty($value))
      $data[$key] = $value;
 }

  // Wenn jetzt noch Daten vorhanden sind
  if (count($data))
  {
  $values = array();
  foreach($data as $key => $value)
    $values[] = "('$abteilung_nr', '" . $key . "', '$ware_" . $key . "')";
    
  $query = "insert into bestellung values " . implode(",", $values);
  }
?>
 
Zuletzt bearbeitet von einem Moderator:
Danke für deine Hilfe. Ich denke ich muss mein PHP-Kenntnisse viel verbessern. Bin leider noch zu doof. aber es wird schon..

Im Formular wurde alle Name geändert:
so sieht es aus:

PHP:
?>
<form action='personal_abt.php' method='post'>

 <table align = "center"width=400 cellpadding=13 cellspacing=0 bgcolor='#cccccc'>

<tr><th>Artikel_Nr.</th>  <th>Artikel_Name</th> <th>Gew&uuml;nschte Menge</th></tr>

<tr><td align = "center">1</td>

<td>Ware_1</td>

<td align = "center"><input type="text" onkeyup="this.value=this.value.replace(/\D/, '');"/ name="ware[1]" size=8></td>

usw...
 </tr>

Dann habe ich deine Code implementiert.

Folgende Fehler bekomme ich:

Notice: Undefined index: ware[1] in C:\xampp\xampp\htdocs\....._abt.php on line 9

Notice: Undefined index: ware[2] in C:\xampp\xampp\htdocs\....._abt.php on line 10


Ich habe zwar den Name geändert aber habe trotzdem die Variablenname angelegt damit sie später bei der Speicherung in der DB verwendet werden.

PHP:
// kurze Variablennamen anlegen

    //if (filled_out($_POST)) {
    $ware_1= $_POST['ware[1]'];
    $ware_2= $_POST['ware[2]'];
    $ware_3= $_POST['ware[3]'];
    $ware_4= $_POST['ware[4]'];
    $ware_5= $_POST['ware[5]'];
    $ware_6= $_POST['ware[6]'];
    $ware_7= $_POST['ware[7]'];
    $ware_8= $_POST['ware[8]'];
 
Werbung:
Warum willst du unbedingt die Variablen umschreiben?? Und wenn man (diesen Quatsch) macht, sollte man in diesem Fall wissen, dass durch
HTML:
name="ware[1]"
in $_POST['ware'] ein Array steht. Wäre also in deinem Fall
PHP:
$ware_1= $_POST['ware'][1];
Aber wie gesagt, ist eigentlich Quatsch
 
Wenn ich das nicht machen würde, dann würde einen Fehler bei der INSERT erscheinen.

PHP:
<?php
    $values[] = "('$abteilung_nr', '" . $key . "', '$ware_" . $key . "')";
   
  $query = "insert into bestellung values " . implode(",", $values);
  }
?>


Tatsächlich kommt diesen Fehler:

Notice: Undefined variable: ware_ in C:\xampp\xampp\htdocs\......al_abt.php on line 62

Aufgrund der nicht definierte Variable : $ware_

PHP:
        $values[] = "('$abteilung_nr', '" . $key . "', '$ware_" . $key . "')";
 
Da ist ein Fehler drin. Anstatt diesen Fehler an der richtigen Stelle zu beheben, gehst du einen Umweg. Versuche es mal so:
PHP:
$values[] = "('$abteilung_nr', '$key', '$value')";
 
Werbung:
Zurück
Oben