Datensatz nicht einfügen wenn er leer ist

Jacy

Mitglied
Ich habe mal wieder eine (wahrscheinlich einfache) Frage,aber kom grade nicht drauf. Ich möchte folgendes in die DB einfügen lassen über ein Formular:

PHP:
$stmt=$mysqli->prepare("INSERT INTO track (aID, nummer, titel, laenge) VALUES (?,?,?,?)");
$anzahl = count($_POST['aID']);
for($x = 0;$x < $anzahl;$x++){
  $aID    = $_POST["aID"][$x];
  $nummer = $_POST["nummer"][$x];
  $titel  = $_POST["titel"][$x];
  $laenge = $_POST["laenge"][$x];
  $stmt->bind_param("iiss" ,$aID, $nummer, $titel, $laenge);
  $stmt->execute();

Also Tracks für eine MusikDB. Wenn ich jetzt aber 20 Tracks im Formular habe und nur 15 ausfülle,dann werden 5 als leerer Wert eingetragen. Wie verhindere ich das?
 
Du könntest auf einen leeren String prüfen:
PHP:
for($x = 0;$x < $anzahl;$x++){ 
  $aID    = $_POST["aID"][$x]; 
  $nummer = $_POST["nummer"][$x]; 
  $titel  = $_POST["titel"][$x]; 
  $laenge = $_POST["laenge"][$x]; 

  if ($aID=="" || $nummer=="" || $titel=="" || $laenge=="")
    break;

  $stmt->bind_param("iiss" ,$aID, $nummer, $titel, $laenge); 
  $stmt->execute(); 
}
Somit wird die Schleife abgebrochen, sobald eine der Variablen einen leeren Wert enthält.
Alle weiteren Datensätze werden ignoriert. Wenn du das nicht willst, ersetze break; durch continue;.
 
Danke für den Tipp,habe es ausprobiert,aber leider wird bei break und continue gar nichts mehr eingefügt,wenn das Feld leer ist :(( Aber es sollen ja z.B. von 20 Tracks 15 einfügbar sein und die leeren quasi ignoriert werden und nicht eingefügt werden.
 
In dem du vorher prüfst, ob die Daten leer sind?
PHP:
$stmt   = $mysqli->prepare('INSERT INTO track (aID, nummer, titel, laenge) VALUES (?,?,?,?)');
$anzahl = count($_POST['aID']);
for($x = 0; $x < $anzahl; ++$x){
  $aID    = $_POST['aID'][$x];
  $nummer = $_POST['nummer'][$x];
  $titel  = $_POST['titel'][$x];
  $laenge = $_POST['laenge'][$x];
  
  if(!empty($aID) && !empty($nummer) && !empty($title) && !empty($laenge)) {
    $stmt->bind_param('iiss', $aID, $nummer, $titel, $laenge);
    $stmt->execute();
  }
}
Was vielleicht auch noch klug wäre, ist die Tatsache, dass du die Reihenfolge der Dimensionen in deinen input-Feldern änderst.
Bisher (wahrscheinlich):
HTML:
<input type="text" name="aID[0]" />
<input type="text" name="nummer[0]" />
<input type="text" name="titel[0]" />
<input type="text" name="laenge[0]" />
Besser:
HTML:
<input type="number" name="tracks[0][aID]" />
<input type="number" name="tracks[0][nummer]" />
<input type="text" name="tracks[0][titel]" />
<input type="text" name="tracks[0][laenge]" />
Dann geht nämlich so etwas hier:
PHP:
foreach($_POST['tracks'] as $value) {
  if(!empty($value['aID']) && !empty($value['nummer']) && !empty($value['titel']) && !empty($value['laenge'])) {
    $stmt->bind_param('iiss', $value['aID'], $value['nummer'], $value['titel'], $value['laenge']);
    $stmt->execute();
  }
}
 
Ich wollte auch zuerst die Funktion [phpf]empty[/phpf] benutzen, aber wenn die Variable z.B. "0" enthält, zählt dies auch als leer:
PHP:
<?php

$var = "0";
var_dump(empty($var));

/* Gibt bool(true) aus */
?>
Das heißt, wenn aID oder nummer 0 enthalten, wird der Datensatz auch nicht eingetragen.
Deshalb würde ich mit =="" prüfen!
 
Also ich hab das jetzt mal so übernommen aber irgendwie funktioniert das immer noch nicht,es wird einfach gar nichts eingetragen :(
 
Hallo,

ich würde das IF-Statement so machen:
PHP:
$tracks[0][aID] = '';
$tracks[0][nummer] = '';
$tracks[0][titel] = '';
$tracks[0][laenge] = '';

if(strlen(implode($tracks[0])))
	echo 'NICHT LEER';
else
	echo 'ALLES LEER';
 
Naja, da meinte es jemand gut, aber hat dabei etwas wesentliches übersehen:
PHP:
aID; # = eine Konstante
'aID'; # = ist eine Zeichenkette

define('aID', 'nummer');

echo $tracks[0][aID]; # gibt den Wert von $tracks[0]['nummer'] zurück
 
Aber ich glaube PHP versucht - wenn die Konstante nicht existiert - die Bezeichnung in einen String zu konvertieren.
Natürlich sollte man das trotzdem nicht machen.

Theoretisch ist das richtig, allerdings wird weder die aID noch die nummer gleich 0 sein.
Wenn man an einen MySQL-Primary Key denkt, könnte das doch schon sein, oder?
 
Zurück