kostenloser Webspace werbefrei: lima-city


Bestimmte Bedingungen für Tabellenspalten bestimmen?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    vdwb

    Kostenloser Webspace von vdwb, auf Homepage erstellen warten

    vdwb hat kostenlosen Webspace.

    Servus !

    Kurze Frage. Weis jemand von euch, wie man einer Mysql-Tabellenspalte sagen kann, dass sie nur Texte mit kleinen Buchstaben annimmt? Oder muss man diese Vorraussetzung über das PhP bestimmen?

    Würde mich über eine rückantwort freuen!

    lg
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    vdwb

    Kostenloser Webspace von vdwb, auf Homepage erstellen warten

    vdwb hat kostenlosen Webspace.

    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
  5. Die if-Abfrage solltest du nach
    $secure_pw=//<--- Kodierung --->//($Passwort);
    und vor
    $query="INSERT INTO...
    machen.

    Du willst ja verhindern, dass ein doppelter Nickname in der DB steht, also vor dem Einfügen des Datensatzes darauf prüfen ;-)
  6. Autor dieses Themas

    vdwb

    Kostenloser Webspace von vdwb, auf Homepage erstellen warten

    vdwb hat kostenlosen Webspace.

    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?
  7. @vdwb
    ... eine schicke "if" abfrage rein basteln ...
    $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 ????";
    }
    wenn 'Nickname' und 'test' richtig sind (laut vorige postings) funktioniert auch (getestet ;o)
    allein "from '<db_xxxxxx_y>'" solltest in der query editieren, sonst lass es wie es ist!
  8. 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&auml;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
  9. Autor dieses Themas

    vdwb

    Kostenloser Webspace von vdwb, auf Homepage erstellen warten

    vdwb hat kostenlosen Webspace.

    Beide Arten funktionieren Prima. Ich bedanke mich allerseits ^^

    lg
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!