CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
06.11.2006, 08:32:22
|
|
Junior Member
|
|
Registriert seit: Nov 2004
Ort: Schmitten
Alter: 65
Beiträge: 318
|
|
in einer Tabelle nach Übereinstimmung suchen
Hallo Forum,
ich habe eine Tabelle in der ich die Registrierten User mit Ihren Daten speichere. Es sollen nun keine Doppelanmeldungen bezüglich der E-Mailadressen zustande kommen.
Meine Datenbank:
PHP-Code:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` int(10) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
`vorname` varchar(255) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
PRIMARY KEY (`user_id`)
) TYPE=MyISAM AUTO_INCREMENT=32 ;
#
# Daten für Tabelle `user`
#
INSERT INTO `user` (`user_id`, `name`, `vorname`, `email`) VALUES
(1, 'Mustermann', 'Jürgen', 'admin@localhost.de');
Wenn sich nun ein neuer User eintragen will darf er das nicht mit der E-Mailadresse = admin@localhost.de sondern muß eine andere wählen.
Frage:
Wie muß das Statement aussehen um nach der E-Mailadresse zu suchen? Mach ich das über "SELECT" oder gibt es da eine spezielle Lösung? Hat vieleicht jemand einen Codeschnipsel für mich den ich dan an meine Sache anpassen kann? Das wäre super!!
Vielen Dank für Eure Hilfe
|
06.11.2006, 08:45:42
|
Member
|
|
Registriert seit: Oct 2006
Beiträge: 610
|
|
AW: in einer Tabelle nach Übereinstimmung suchen
Absolut sicher bist du, wenn du einen unique-index auf die email-Adresse anlegst:
Code:
ALTER TABLE `user` ADD UNIQUE `uq_email` ( `email` )
im Php machst du dann:
PHP-Code:
$sql="INSERT INTO `user` (`user_id`, `name`, `vorname`, `email`) VALUES (1, 'Mustermann', 'Jürgen', 'admin@localhost.de')";
//Versuchen den Datensatz einzufügen $result = mysql_query($sql);
//Fehler 1062 bedeutet Schlüsselverletzung if (!$result && mysql_errno()==1062) { echo "Eintrag schon vorhanden"; } else if (!$result) { echo "Unbekannter Fehler: $sql <br>" . mysql_error(); }
Edit: Hatte $ bei $result vergessen
Geändert von BenniG. (06.11.2006 um 08:57:04 Uhr)
|
06.11.2006, 08:51:36
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: in einer Tabelle nach Übereinstimmung suchen
Zitat:
Zitat von juergen
Es sollen nun keine Doppelanmeldungen bezüglich der E-Mailadressen zustande kommen.
|
Dann wäre die Spalte email genaugenommen Dein primary key.
Zitat:
Wie muß das Statement aussehen um nach der E-Mailadresse zu suchen? Mach ich das über "SELECT" oder gibt es da eine spezielle Lösung?
|
Entweder so:
Code:
SELECT user_id FROM user WHERE email = 'admin@localhost.de'
Dann kannst Du mit mysql_num_rows() prüfen, ob 0 oder 1 Datensatz gefunden wurden.
oder so:
Code:
SELECT COUNT(*) AS anzahl FROM user WHERE email = 'admin@localhost.de'
Hier ist die Ergebnismenge immer ein Datensatz. Im Feld anzahl steht dann entweder 0 oder 1 drin.
EDIT:
die Methode von BenniG. ist natürlich wesentlich eleganter.
EDIT2:
id -> user_id
Geändert von meikel (†) (06.11.2006 um 13:09:42 Uhr)
|
06.11.2006, 13:03:37
|
|
Junior Member
|
|
Registriert seit: Nov 2004
Ort: Schmitten
Alter: 65
Beiträge: 318
|
|
AW: in einer Tabelle nach Übereinstimmung suchen
Hallo Meikel,
Code:
SELECT id FROM user WHERE email = 'admin@localhost.de'Dann kannst Du mit mysql_num_rows() prüfen, ob 0 oder 1 Datensatz gefunden wurden.
Frage:
Was ist in dem Fall id? Ist das vieleicht meine user_id ?
Code:
INSERT INTO `user` (`user_id`, `name`, `vorname`, `email`) VALUES
(1, 'Mustermann', 'Jürgen', 'admin@localhost.de');
Geändert von juergen (06.11.2006 um 13:09:54 Uhr)
|
06.11.2006, 13:11:46
|
Member
|
|
Registriert seit: Mar 2006
Alter: 38
Beiträge: 599
|
|
AW: in einer Tabelle nach Übereinstimmung suchen
ID ist in diesem Fall ein Platzhalter für etwas was du dann ggf. ausgeben möchtest (z.B. Name). Wird aber denk ich mal nicht von Interesse sein.
__________________
In der Ruhe liegt die Kraft!
Geändert von KTB (06.11.2006 um 13:12:15 Uhr)
|
06.11.2006, 13:17:21
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: in einer Tabelle nach Übereinstimmung suchen
Zitat:
Zitat von juergen
Frage:
Was ist in dem Fall id?
|
Das ist ein peinlicher Fehler. Gemeint ist natürlich user_id. Im Prinzip kannst Du in der Spaltenliste alles mögliche angeben, weil Du bei dem Beispiel ja nur die Anzahl der Zeilen in der Ergebnismenge brauchst.
Aber teste lieber das Beispiel von BenniG. Das kommt nämlich mit einer Abfrage aus.
Wenn das INSERT keinen SQL Fehler produziert, ist der Eintrag drin, weil er korrekt ist. Existiert die email schon, gibt es den genannten SQL Fehler.
Geändert von meikel (†) (06.11.2006 um 13:17:37 Uhr)
|
06.11.2006, 13:43:21
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: in einer Tabelle nach Übereinstimmung suchen
Ich würde allerdings das Beispiel von BenniG noch um das Schlüsselwort IGNORE erweitern, so dass MySQL keinen Fehler meldet (sondern eine Warnung) und die Überprüfung anschließend mit mysql_affected_rows() vorgenommen werden kann.
|
06.11.2006, 14:26:40
|
|
Junior Member
|
|
Registriert seit: Nov 2004
Ort: Schmitten
Alter: 65
Beiträge: 318
|
|
AW: in einer Tabelle nach Übereinstimmung suchen
Hallo meikel,
ich werde aber dennoch Meikels Lösung einbauen da ich die Abfrage ob die Mailadresse schon vorhanden ist schon bei der Registrierung bzw. Überprüfung ob er auch nicht das @ Zeichen vergessen hat, des Users benötige. Dann kann ich dem User das schon mal sagen das Seine E-Mailadresse vorhanden ist und er eine andere Braucht. Wenn die Abfrage dannach kommt, ist die Registrierung eigendlich schon abgeschlossen und ich schreibe nur noch die Überprüften Daten in die Datenbank und sende eine Bestätigungsmail. Das wäre dann so als überprüfe ich das Wechselgeld wenn ich schon wieder zu Hause wäre.
Ne ne das mach ich so wie meikel es vorgeschlagen hat.
Danke für alles.
|
15.11.2006, 10:52:08
|
|
Junior Member
|
|
Registriert seit: Nov 2004
Ort: Schmitten
Alter: 65
Beiträge: 318
|
|
AW: in einer Tabelle nach Übereinstimmung suchen
Hallo Meikel,
ich mache eine Abfrage mit:
SELECT * FROM user WHERE objekt = 'Kunde'
Ich prüfe dann mit $ergebnis = mysql_num_rows() ob Datensätze vorhanden sind.
if ($ergebnis < "1"){
}else{
//Anschließend lasse ich mir die Daten mittels einer Schleife ausgeben.
for schleife
}
Wenn ein Kunde gefunden wird ist alles gut und der Datensatz wird angezeigt wenn aber kein Datensatz gefunden wird bleibt der Ladevorgang genau bei der Selectabfrage stehen und der Rest der Seite wird nicht mehr weiter geladen. Ich habe versucht mir die Variable $ergebnis mit echo anzeigen zu lassen aber bis dahin kommt der Browser nicht. Wenn ein Datensatz gefunden wird zeigt mir echo $ergebnis an wie viele Datensätz er gefunden hat.
Wo kann der Fehler liegen?
Danke für Deine Hilfe
|
15.11.2006, 10:55:19
|
Member
|
|
Registriert seit: Oct 2006
Beiträge: 610
|
|
AW: in einer Tabelle nach Übereinstimmung suchen
Nicht immer alles in quotes scheiben!
so prüft man Zahlenwerte:
PHP-Code:
if ($ergebnis < 1){
Poste mehr code, vielleicht ein exit, die, return in der Abfrage?
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:38:49 Uhr.
|