Vor übergeben an die Datenbank auf doppelte Nummer prüfen

nchristoph

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine Frage:

Ich erweitere gerade mein Trockenkammerprogramm um Warenübernahme und stehe jetzt vor dem Problem:

Wie prüfe ich vor der Eingabe der Daten in die Datenbank, ob die Lieferscheinnummer schon in der DB exisitiert?

Ich habe das noch nie gesehen oder gemacht.

Die Lieferscheinnr. ist Variabel und dadurch funktioniert Auto-Increment nicht.

Vielen Dank im voraus für eure Hilfe.

grüsse
 
Du könntest für das Feld "Lieferscheinnummer" einen Index erstellen der eindeutig ist.

Ansonsten musst du vor dem Speichern eine Abfrage abschicken die prüft ob diese Nummer bereits existiert.

PHP:
$rs = mysql_query("SELECT lieferschein FROM tabelle WHERE lieferschein = 'dein_wert'");
if (mysql_num_rows($rs) != 0) {
    echo "Lieferschein bereits vorhanden";
} else {
    // INSERT-Anweisung
}
 
Zuletzt bearbeitet:
z.B. mit Ajax.
Du setzt also quasi mit Javascript erstmal die Submit-Aktion aus, sendest per Ajax die Nummer zu einem PHP-Script, welches diese dann mit der Nummer in der Datenbank überprüft.

Je nachdem was zurückgeliefert wurde, also entweder "existiert" oder "existiert nicht" kannst du halt weitere Aktionen vornehmen, also entweder den Submit ausführen oder eine Fehlermeldung ausgeben.
 
Es gibt versch. Varianten. Eine davon ist diese
PHP:
//Testdaten
$newNr = 13;
//SQL zusammenzimmern
$sql = "SELECT COUNT(*) AS cnt FROM myTable WHERE lieferscheinnummer = {$newNr};";
$result = mysql_query($sql);
$row = mysql_fetc_assoc($result);
if ($row['cnt'] == 0){
    //TODO: die nummer exisitiert noch nicht
}
 
Meinst du mit Unique oder wie?

Bei google finde ich zwar einiges zum Thema Index aber daraus werde ich nicht wirklich schlau, zumindest momentan.
 
Unique ist eine Möglichkeit. Primary Key setzt aber z.B. auch kein Auto_increment voraus. Du hast also die Wahl zwischen Unique und Primary Key. Wobei Primary Key vorzuziehen ist, wenn du nicht möchtest, das in die Spalte NULL-Werte eingetragen werden dürfen. Das ist nämlich bei Unique möglich.
 
Möglich wäre bei einer schon vorhandenen DB die Abfrage mit "Exists". Hier nur das SQL-Statement. Wenn das Ergebnis TRUE ist, gibt es die Lieferscheinnummer schon :
SQL:
SELECT Lieferscheinnr 
from TABELLE
WHERE EXISTS 
(SELECT Lieferscheinnr from TABELLE WHERE Lieferscheinnr= <Deine EINGABE>)
Eleganter ist aber auf jeden Fall, die LS-Nummer als primarykey oder als unique zu definieren.
 
Zuletzt bearbeitet von einem Moderator:
Ist das nicht ein bisschen kompliziert?

Wenn ich nur die zweite SELECT-Anweisung ausführe und damit einen (oder mehrere [was ja im Grunde nicht möglich ist]) Datensätze zurückerhalte wieß ich doch schon das die Lieferscheinnummer vorhanden ist.

Wozu dann die Verschachtelung und EXISTS?
 
@ Tombe:
Stimmt. Ich hatte das Beispiel aus einer meiner bestehenden Abfragen kopiert. Dort dient das erste SELECT für die Abfrage einer anderen Tabelle, in der Lieferscheinnr ein Fremdschlüssel ist.
Wieder zu kompliziert gedacht von mir ;)
 
Danke Tombe, funktioniert.

Allerdings hab ich jetzt das problem, das das weiterzählen der Partienummer nicht mehr richtig funktioniert, aber das ist eine andere Geschichte.

Ich muss das Projekt schon wieder zurückstellen wegen was anderem....
 
Zurück