if Bedingung: Keine gleich ausgefüllten Felder
Benny
- php
Hi,
folgendes Problem:
Ich habe eine Benutzereingabe mit Name, Straße, PLZ, und Ort. Straße ist optional, das habe ich wie folgt gelöst:
if (!Post::val('owner_name') || !Post::val('plz_name')
|| !Post::val('loc_name'))
{
// Feldermeldung
echo('Fehler');
break;
}
Post::val('street_name');
....
....
Funktioniert auch soweit.
Nur möchte ich jetzt nicht, dass genau der gleiche Name mit PLZ, Ort und Straße vorkommt.
Beispiel:
Name: Hans
Straße: Musterstr. 30
PLZ: 12345
Ort: Musterhausen
Wenn alle Felder identisch ausgefüllt sind, soll ein Fehler kommen, oder wenn eben genau die Felder so in der Zusammensetzung in der Datenbank bereits vorkommen.
Hat jemand einen Ansatz für mich?
LG Benny
Nur möchte ich jetzt nicht, dass genau der gleiche Name mit PLZ, Ort und Straße vorkommt.
Beispiel:
Name: Hans
Straße: Musterstr. 30
PLZ: 12345
Ort: MusterhausenWenn alle Felder identisch ausgefüllt sind, soll ein Fehler kommen,
Hat jemand einen Ansatz für mich?
Ja, laß es. hier werden bestimmt gleich welche aufschlagen, die Dir reale Beispiele nennen, die Du ausschließen würdest.
oder wenn eben genau die Felder so in der Zusammensetzung in der Datenbank bereits vorkommen.
Das geht grundsätzlich indem man das vor dem Speichern abfragt oder indem man einen Index setzt, der keine gleichen Datensätze zuläßt.
Nur möchte ich jetzt nicht, dass genau der gleiche Name mit PLZ, Ort und Straße vorkommt.
Beispiel:
Name: Hans
Straße: Musterstr. 30
PLZ: 12345
Ort: MusterhausenWenn alle Felder identisch ausgefüllt sind, soll ein Fehler kommen,
Hat jemand einen Ansatz für mich?
Ja, laß es. hier werden bestimmt gleich welche aufschlagen, die Dir reale Beispiele nennen, die Du ausschließen würdest.
oder wenn eben genau die Felder so in der Zusammensetzung in der Datenbank bereits vorkommen.
Das geht grundsätzlich indem man das vor dem Speichern abfragt oder indem man einen Index setzt, der keine gleichen Datensätze zuläßt.
Wie frage ich das denn vor dem Speichern ab?
Wie frage ich das denn vor dem Speichern ab?
Die Frage ist nicht dein Ernst oder?
Wenn doch: wie speicherst du sie denn?
Hello,
Wie frage ich das denn vor dem Speichern ab?
genaugenommen gar nicht, sondern es wird erst beim Speicherversuch durch die Datenbank abgefangen, damit keine Nebenläufigkeitslücke entsteht. Prüfung und Datenmanipulation/-Ergänzung müssen in einem atomistischen Prozess zusammengefasst sein. Das erledigt die Datenbank durch einen passenden Unique-Index als Constraint.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
Wie frage ich das denn vor dem Speichern ab?
genaugenommen gar nicht, sondern es wird erst beim Speicherversuch durch die Datenbank abgefangen, damit keine Nebenläufigkeitslücke entsteht. Prüfung und Datenmanipulation/-Ergänzung müssen in einem atomistischen Prozess zusammengefasst sein. Das erledigt die Datenbank durch einen passenden Unique-Index als Constraint.
und konkret? hast du da ein beispiel für mich?
Hello,
und konkret? hast du da ein beispiel für mich?
Hier ist ein Beispiel
http://www.java2s.com/Code/SQL/Select-Clause/SettingaUniqueConstraint.htm
Versuche dann mal in der MySQL-Konsole (oder im phpmyadmin) einen Datensatz einzufügen, und dann noch einen mit dem gleichen Namen.
Lass Dir auch mal das Create-Table-Statement anzeigen.
MySQL rationalisiert das Wort CONSTRAINT einfach weg :-))
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
und konkret? hast du da ein beispiel für mich?
Hier ist ein Beispiel
http://www.java2s.com/Code/SQL/Select-Clause/SettingaUniqueConstraint.htmVersuche dann mal in der MySQL-Konsole (oder im phpmyadmin) einen Datensatz einzufügen, und dann noch einen mit dem gleichen Namen.
Lass Dir auch mal das Create-Table-Statement anzeigen.
MySQL rationalisiert das Wort CONSTRAINT einfach weg :-))
Hi, also das mit CONSTRAINT habe ich gelöst, jetzt kommt eben die Fehlermeldung sqlseitig, dass eben der datensatz schon vorhanden ist:
Query {INSERT INTO `flyspray_locations` ( owner_name, street_name, plz_name, loc_name) VALUES ( ?, ?, ?, ?)} with params {Trabold,Hauptstraße 10,95447,Bayreuth} Failed! (Duplicate entry 'Trabold-95447-Bayreuth-Hauptstraße 10' for key 2)
Nur wie kann ich daraus eine "brauchbare" Fehlermeldung erzeugen, die ich im Programm anzeigen lassen kann?
Hello,
Hi, also das mit CONSTRAINT habe ich gelöst, jetzt kommt eben die Fehlermeldung sqlseitig, dass eben der datensatz schon vorhanden ist:
Query {INSERT INTO
flyspray_locations
( owner_name, street_name, plz_name, loc_name) VALUES ( ?, ?, ?, ?)} with params {Trabold,Hauptstraße 10,95447,Bayreuth} Failed! (Duplicate entry 'Trabold-95447-Bayreuth-Hauptstraße 10' for key 2)
>
> Nur wie kann ich daraus eine "brauchbare" Fehlermeldung erzeugen, die ich im Programm anzeigen lassen kann?
$res = mysqli\_query($con, ... );
if ( ($error = mysqli\_errno) > 0 )
{
## Fehlerbehandlung durchführen
}
else
{
## alles OK.
}
Duplicate Key hat eine eindeutige Fehlernummer in MySQL.
<http://dev.mysql.com/doc/refman/5.1/en/error-handling.html>
<http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html>
Es müsste der Error 1062 sein.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
☻\_
/▌
/ \ Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
Ja, laß es. hier werden bestimmt gleich welche aufschlagen, die Dir reale Beispiele nennen, die Du ausschließen würdest.
Ja, mich z.B. - ich heiße genauso wie mein Vater. Wir wohnen beide im selben Haus (sprich, er wohnt "bei mir"). Das Mehrfamilienhaus hat zwar getrennte Eingangstüren, dennoch ist es dieselbe Hausnummer ohne Unterscheidung "a" oder "b" oder "Top1"/"Top2".