Bestimmte Bedingungen für Tabellenspalten bestimmen?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
bezeichnung
code
datenbank
email
geburtstag
header
jemand
kleinbuchstaben
kodierung
nachname
postleitzahl
rein basteln
stadt
status
stellen
test
text
verwenden
vorname
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Meines Wissens kann man das nicht direkt bei der Erzeugung einer Tabelle angeben.
Eine Text Spalte kann also sowohl Groß- als auch Kleinbuchstaben aufnehmen.
Du kannst aber im SQL Statement die mySql Funktion LOWER() verwenden die den Text in Kleinbuchstaben umwandelt.
Beispiel:
INSERT INTO testtabelle (id, bezeichnung) VALUES(1,LOWER('Hallo'));
fügt 'hallo' ein und nicht 'Hallo'.
Beim Lesen aus der Tabelle kannst Du LOWER auch benutzen:
SELECT id,LOWER(bezeichnung) FROM testtabelle;
Liefert dir alle Inhalte in Kleinbuchstaben konvertiert zurück.
Ich hoffe das hilft dir weiter ?
Ciao,
Franco -
Ja das hat mir weiter geholfen, danke ^^
Noch eine Frage:
Ich habe seit einigen Tagen begonnen eine kleine Regestration zu schreiben. Klappt alles prima soweit. Nun stellte mir sich folgendes Problem:
Wie verhindere ich doppelte Nicknames und emails?
a.) Unique befehl in der Datenbank setzen. Soweit bin ich auch nohh gekommen.
b.) if abfrage stellen, mit automatischer rückleitung auf das registerformular falls der Nickname schon vorhanden ist.
B. ist hiermit mein Problem.
Hier der Code:
<?php $link = mysql_pconnect("123.123.123.123","max","mustermann"); mysql_select_db("test"); $Nickname=$_POST['Nickname']; $Passwort=$_POST['Passwort']; $Vorname=$_POST['Vorname']; $Nachname=$_POST['Nachname']; $Geburtstag=$_POST['Geburtstag']; $Strasse=$_POST['Strasse']; $PLZ=$_POST['PLZ']; $Stadt=$_POST['Stadt']; $Email=$_POST['Email']; $secure_pw=//<--- Kodierung --->//($Passwort); $query="INSERT INTO `test`.`userdb` ( `ID`, `Nickname`, `Passwort`, `Vorname`, `Nachname`, `Geburtstag`, `Strasse`, `Postleitzahl`, `Stadt`, `Email`) VALUES (NULL, '$Nickname', '$Passwort', '$Vorname', '$Nachname', '$Geburtstag', '$Strasse', '$PLZ', '$Stadt', '$Email');"; $result = mysql_query($query) or die (mysql_error()); mysql_query($result); header("Status: 301 Moved Permanently"); header("Location:index.php"); exit; ?>
Ich hab keine Ahnung wo ich mit meiner "If" abfrage für doppelte Einträge beginnen soll. Geschweige denn, wie ich eine Verweisung basteln soll, nachdem finden eines doppelten eintrages, auf das Register formular & eine nette Nachricht, dass doppelter Eintrag schon vorhanden ist.
Wäre super nett wenn mir jemand weiterhelfen könnte ^^
lg
Vdwb
Beitrag zuletzt geändert: 4.5.2010 22:30:42 von vdwb -
Die if-Abfrage solltest du nach
und vor$secure_pw=//<--- Kodierung --->//($Passwort);
machen.$query="INSERT INTO...
Du willst ja verhindern, dass ein doppelter Nickname in der DB steht, also vor dem Einfügen des Datensatzes darauf prüfen -
Das keine doppelten einträge in die db gemacht werden hatte ich ja shcon durch tabellenspalten-spezifiche UNIQUE Einstellungen hin bekommen. Allerdings wollte ich zusätzlich eine schicke "if" abfrage rein basteln, dass wenn jmd einen bereits vergebenen Nick wählt, ne schicke Fehlermeldung kommt die darauf hinweist, dass der nick bereits vergeben ist. Nur wie diese genau auszusehen hat, die abfrage, kann ich nur erraten. Hatte auch schon einige Tests erschaffen, dennoch nur mit halben erfolg.
Könntest du mir evtl. zeigen wie die auszusehen hat? -
@vdwb
... eine schicke "if" abfrage rein basteln ...
wenn 'Nickname' und 'test' richtig sind (laut vorige postings) funktioniert auch (getestet ;o)$q = "-- QUERY: -- zaehlt \$_POST['Nickname'] in <db_xxxxxx_y>.test select count(Nickname) from <db_xxxxxx_y>.test -- nur '<db_xxxxxx_y>'editieren, es ist deine db-name bei lima where Nickname='{$_POST['Nickname']}'"; if ( $r = mysql_query ($q) ) { // jetzt kommt die schicke if-abfrage! if ( reset ($row = mysql_fetch_assoc ($r)) > 0 ) { echo "name vergeben"; } else { echo "kannst insertieren"; } } else { echo "WTF QUERY ????"; }
allein "from '<db_xxxxxx_y>'" solltest in der query editieren, sonst lass es wie es ist! -
Ich würds anders machen. Ich würde das Feld für Nicknames auf UNIQUE stellen und dann INSERT IGNORE verwenden. Das dürfte am Ende (wenn auch nicht merklich) effizienter sein und funktioniert bestens.
Für "Kleinbuchstaben" kannst du wie beschrieben LOWER verwenden, oder auch mit der PHP-Funktion strtolower() arbeiten.
EDIT:
Okay, hab gerade den Beitrag gelesen, wo es um die Fehlermeldung geht.. Da sollte eigentlich mysql_num_rows() reichen:
<?php @mysql_connect("123.123.123.123", "max", "mustermann") or die("Kann nicht zur Datenbank verbinden!"); @mysql_select_db("test") or die("Kann Datenbank nicht wählen!"); $Nickname = strtolower($_POST['Nickname']); $Passwort = $_POST['Passwort']; $Vorname = $_POST['Vorname']; $Nachname = $_POST['Nachname']; $Geburtstag = $_POST['Geburtstag']; $Strasse = $_POST['Strasse']; $PLZ = $_POST['PLZ']; $Stadt = $_POST['Stadt']; $Email = $_POST['Email']; $secure_pw = //<--- Kodierung --->//($Passwort); $query = @mysql_query("SELECT * WHERE Nickname = '".$Nickname."' OR Email = '".$Email."'"); if(@mysql_num_rows($query) >= 1) { die("Benutzername oder E-Mail wird bereits verwendet."); } @mysql_query("INSERT INTO `userdb` (`ID`, `Nickname`, `Passwort`, `Vorname`, `Nachname`, `Geburtstag`, `Strasse`, `Postleitzahl`, `Stadt`, `Email`) VALUES (NULL, '".$Nickname."', '".$Passwort."', '".$Vorname."', '".$Nachname."', '".$Geburtstag."', '".$Strasse."', '".$PLZ."', '".$Stadt."', '".$Email."')") or die("Fehler beim Speichern der Benutzerdaten"); @header("Status: 301 Moved Permanently"); @header("Location:index.php"); exit(); ?>
Beitrag zuletzt geändert: 5.5.2010 20:09:32 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage