kostenloser Webspace werbefrei: lima-city


fortlaufende SQL-DB ID

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Hi...

    Ich bin leider noch ein ziemlicher Noob im Bezug auf PHP und MySQL-Datenbanken...

    Mit einem Tutorial hab ichs aber geschaft, ein Login zu machen, das, wenn man eingeloggt ist, die Daten aus der SQL-Tabelle ausliest und anzeigt.
    Wenn man direkt auf die interne Seite zugreifen will, wird man automatisch auf die login-seite weitergeleitet.
    Mit meinen geringen Kenntnissen habe ich dazu eine Anmeldeseite geschrieben, ?ber die man sich auf meine DB eintragen kann. Da das alles noch im Teststadium iss, machts mir nix aus, dass sich jeder anmelden kann.

    Hier nun mein Problem: Man kann sich zwar anmelden, aber jedem, der sich anmeldet wird die ID-Nummer 1 gegeben. D.h. es wird immer die alte Anmeldung ?berschrieben...

    Gibt es da nicht einen Befehl, mit dem man sagen kann, dass jedem eine neue ID zugewiesen werden soll?

    Hier ist mal der Code der Seite, ?ber die man sich anmeldet:

    Zuerst die HTML-Seite (anlegen.html):

    <html>
    <head>
    <title>Benutzer anlegen</title>
    </head>

    <form action="anlegen.php" method="post">
    <table width="200" border="1">
    <tr>
    <td>Nickname:</td>
    <td><input name="nick" size="31"></td>
    </tr>
    <tr>
    <td>PW:</td>
    <td><input name="pw" size="31"></td>
    </tr>
    <tr>
    <td>Vorname:</td>
    <td><input name="vorname" size="31"></td>
    </tr>
    <tr>
    <td>Nachname:</td>
    <td><input name="nachname" size="31"></td>
    </tr>
    </table>
    <input type="submit" value="Anmelden">
    </form>
    <body>
    </body>
    </html>

    Und hier, der Code der php-Seite, ?ber die man sich anmeldet:

    php
    // Definition der Benutzer 
    $benutzer[0]["Nickname"] = $_POST["nick"];
    $benutzer[0]["Kennwort"] = $_POST["pw"]; 
    $benutzer[0]["Vorname"] = $_POST["vorname"]; 
    $benutzer[0]["Nachname"] = $_POST["nachname"]; 
    
    // Sie k?nnen an dieser Stelle beliebig viele Benutzer anlegen. 
    // Achten Sie dabei nur auf die Fortf?hrung der Nummer. 
    
    // Aufbau der Datenbankverbindung 
    $connectionid  = mysql_connect ("SQL-Server", "Benutzername", "PW"); 
    if (!mysql_select_db ("Datenbank", $connectionid)) 
    { 
      die ("Keine Verbindung zur Datenbank"); 
    } 
    
    // Zuerst alle Datens?tze l?schen um keine Dopplungen zu bekommen. 
    mysql_query ("DELETE FROM login_benutzerdaten"); 
    
    // Daten eintragen 
    while (list ($key, $value) = each ($benutzer)) 
    { 
      // SQL-Anweisung erstellen 
      $sql = "INSERT INTO ". 
        "login_benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ". 
      "VALUES ('".$value["Nickname"]."', '". 
                           $value["Kennwort"]."', '". 
                           $value["Nachname"]."', '". 
                           $value["Vorname"]."')"; 
      mysql_query ($sql); 
    
      if (mysql_affected_rows ($connectionid) > 0) 
      { 
        echo "Benutzer erfolgreich angelegt.<br>\n"; 
      } 
      else 
      { 
       echo "Fehler beim Anlegen der Benutzer.<br>\n"; 
      } 
    }


    Wie schon gesagt, die ID soll automatisch vergeben werden...
    ich will sie nicht jedes mal h?ndisch eintragen m?ssen...

    Br?uchte wirklich dringend hilfe...
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Ich hab jetzt den ganzen Abend probiert...
    Ich kriegs wirklich nicht hin...
    Br?uchte also wirklich dringend Hilfe!!!
  4. k*********2

    Ne gute Alternative bestimmt:
    Was haltest du von Timstamps? Du brauchst in deiner Tabelle nur eine Weitere Spalte anzulegen mit der Typ-Auswahl Timestamp! Diese brauchst du nicht in dein Script einzubetten. Beim Hinzuf?gen eines Datensatzes wird dieser Wert automatisch geschrieben!
  5. 2**s

    wie w?rs denn damit, dass du das ID feld in der Tabelle als AUTO INCREMENT deklarierst, dann z?hlt er die ID automatisch weiter
  6. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    @ kenny197902:

    Danke, ich glaub aber wirklich, dass ich so was nicht hinkriege...

    @ 2mas

    Gute Idee, nur wie mach ich das?

    Hier ist der Code, zum erstellen der besagten Tabellle:

    CREATE TABLE login_benutzerdaten (
    Id Int(11) NOT NULL auto_increment,
    Nickname VarChar(50) NOT NULL default '',
    Kennwort VarChar(50) NOT NULL default '',
    Nachname VarChar(50) NOT NULL default '',
    Vorname VarChar(50) NOT NULL default '',
    PRIMARY KEY (Id)
    )
  7. 2**s


    [...]
    CREATE TABLE login_benutzerdaten (
    Id Int(11) NOT NULL auto_increment,
    Nickname VarChar(50) NOT NULL default '',
    Kennwort VarChar(50) NOT NULL default '',
    Nachname VarChar(50) NOT NULL default '',
    Vorname VarChar(50) NOT NULL default '',
    PRIMARY KEY (Id)
    )


    hmm eigentlich deklarierst du ID ja schon als auto_increment
    Eigentlich m?sste mySQL jetzt, wenn du einen neuen Datensatz in die Tabelle schreibst, und kein Value f?r ID ?bergibst eine neue, eindeutige um 1 erh?hte I erzeugen.

    ***EDIT***
    Habe mir grade nochmal deinen Code angeguckt.

    Du hst einmal das im COde stehen

    // Zuerst alle Datens?tze l?schen um keine Dopplungen zu bekommen.

    mysql_query ("DELETE FROM login_benutzerdaten");


    Dann ist ja klar, dass sich immer nur ein uer anmelden kann, da du ja alle anmeldungen lscht, enn sich ein neuer user anmeldet.


    Auch finde ich folgendes ziemlich seltsam...

    // Daten eintragen

    while (list ($key, $value) = each ($benutzer))

    {

    // SQL-Anweisung erstellen

    $sql = "INSERT INTO ".

    "login_benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ".

    "VALUES ('".$value["Nickname"]."', '".

    $value["Kennwort"]."', '".

    $value["Nachname"]."', '".

    $value["Vorname"]."')";

    mysql_query ($sql);


    Wieso packst du das in eine Schleife?
    Du legst doch nur 1 Benutzer pro abgesendetem Formular an?
  8. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Tja, ich hab das nach einem Tutorial gemacht...
    Und wie gesagt, ich bin noch ein ziemlicher Noob...

    Also, den Delete-Befehl rausl?schen, und was soll ich mit dem unteren machen?

    EDIT:

    Das hat gefunzt!
    Jetzt nach ich mich mal auf die Suche, wie ich es machen kann, dass er die DB ?berpr?ft, ob die Eintr?ge schon einmal vorhanden sind, und dass er dann eine Fehlermeldung ausgibt....
  9. s****e

    Hallo!

    Also autoincrement sollte man sein lassen, dass ist nicht wirklich sch?n und sauber.

    Lie? die Werte leiber aus:

    /**
     *  Die Funktion ermittelt den h?chsten Wert des Prim?rschl?ssels ID.
     *
     *  Die Funktion ermittelt den h?chsten Wert des Prim?rschl?ssels ID in der
     *  als Parameter ?bergebenen Tabelle.
     *
     *  @param $table Gibt die Tabelle an, aus welcher der h?chste Wert
     *                des Prim?rschl?ssels ID ausgelesen werden soll.
     *
     *  @return Integer Gibt den h?chsten Wert des Prim?rschl?ssels ID der
     *                  Referenztabelle an.
     *
     *  @version 1.0.0
     *  @since 29.04.2004 14:30
     *  @author Stefan Franke
     *  @author stulle-bielefeld@gmx.de
     *
     *  @see mysql_connect()
     *  @see mysql_fetch_array()
     *  @see mysql_query()
     *  @see mysql_select_db()
     */
    function getMaxId($table) {
    
        //initialisieren der globalen Variablen
        global $mysql_server;
        global $mysql_user;
        global $mysql_password;
        global $mysql_database;
    
        //Verbindung zum MySQL-Server aufbauen
        $link_maxid = mysql_connect($mysql_server, $mysql_user, $mysql_password)
            or die("Keine Verbindung zu ".$mysql_server." m&ouml;glich: " .mysql_error());
    
        //Verbindung zur Datenbank aufbauen
        mysql_select_db($mysql_database, $link_maxid)
            or die ("Die Datenbank ".$mysql_database." konnte nicht gefunden werden.<br>");
    
        $sql="SELECT max(id) FROM ".$table;
    
        //Ressourcelink der Abfrage generieren
        $result = mysql_query ($sql)
            or die ("Ung&uuml;ltige Abfrage: ".mysql_error());
    
        //Auslesen des Datensatzes
        $row = mysql_fetch_array($result)
            or die (mysql_error());
    
        //Auslesen der h?chsten ID
        $maxID=$row[0];
    
        //Pr?fen wieso ich diese Verbindung nicht schlie?en darf
        //mysql_close($link_maxid);
    
        return $maxID;
    }
    
    /**
     *  Die Funktion ermittelt den n?chsten Wert des Prim?rschl?ssels ID.
     *
     *  Die Funktion ermittelt den n?chsten Wert des Prim?rschl?ssels ID in der
     *  als Parameter ?bergebenen Tabelle.
     *
     *  @param $table Gibt die Tabelle an, aus welcher der n?chste Wert
     *                des Prim?rschl?ssels ID ausgelesen werden soll.
     *
     *  @return Integer Gibt den n?chsten Wert des Prim?rschl?ssels ID der
     *                  Referenztabelle an.
     *
     *  @version 1.0.0
     *  @since 29.04.2004 14:40
     *  @author Stefan Franke
     *  @author stulle-bielefeld@gmx.de
     *
     *  @see getMaxID()
     */
    function getNextId($table) {
    
        //Auslesen der h?chsten ID
        //inkrementieren der ausgelesenen ID
        return getMaxId($table)+1;
    }


    MfG
    stulle
  10. 2**s

    Hallo!

    Also autoincrement sollte man sein lassen, dass ist nicht wirklich sch?n und sauber.



    Ach so.
    Und was ist daran nicht sauber und nicht sch?n?
    Wieso sollte man sich arbeit machen, ein riesiges skript schreiben, wenn eine entsprechende Funktionalit?t vom DBMS schon angeboten wird.
    Die Entwickler der DBs haben sich bestimmt schon was dabei gedaht, solch ein funkion anzubieten.

    Wenn du also gegen Auto_increment bist, dann w?re es nett, auch zu erfahren warum.
    Es ist bestimmt nicht f?r alle f?lle einsetzbar und optimal, aber um ID zu erzeugen, die eh nur zu identifizierung eines Datensatzes steht und keine weitere information besitzt ist dies doch vollkommen ausreichend
  11. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Wie schon gesagt...

    Dass es die alte Eintragung nicht mehr l?scht, hab ich hinbekomen,
    jetzt brauche ich nur noch ein Script, mit dem ?berpr?ft wird, ob der Nickname schon vorhanden ist...
    Dann sollte es eine Fehlermeldung rausgeben, dass der Nick-name schon da ist...
  12. 2**s

    Dazu musst du doch einfach bevor du den namen in die DB schreibst gucken, ob der name ind er Tabelle ist

    $result = mysql_query("SELECT COUNT(*) AS ANZAHL FROM <TABELLE> WHERE USERNAME = '$username' ");
    $line = mysql_fetch_array($result);
    if ($line["ANZAHL"] > 0 ) echo "Username $username schon vergeben!";
    else {
    // Namen Eintragen
    }

  13. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Aha, OK, danke vielmals...

    Ich muss jetzt halt noch anpassen... an die php-Datei...

    Nur noch eins: Was bedeutet diese Fehlermeldung:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/webpages/lima-city/schrotti12/html/login/anlegen.php on line 19
    Benutzer erfolgreich angelegt.
  14. i******u

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/webpages/lima-city/schrotti12/html/login/anlegen.php on line 19.


    tipp : erweitere die stelle so-
    mysql_fetch_array()or die(mysql_error());
    dann bekommst du eine erweiterte fehlermeldung.
    ich sch?tze das du in deiner mySQL eingabe (INSERT usw.)
    ein schreibfehler hast. und der script dadurch nicht ausf?hbar ist.
    (hatte ich ganz oft^^)
  15. Autor dieses Themas

    schrotti12

    Moderator Kostenloser Webspace von schrotti12

    schrotti12 hat kostenlosen Webspace.

    Danke f?r die Hilfe...

    Ich habe jetzt alles, was ich brauche...
    Wenn Ihr wollts, k?nnts Ihr das hier jetzt schlie?en...

    Also, Danke nochmal an alle, die mir geholfen haben...
  16. k*********2

    Dieses Thema wurde mit folgender Begr?ndung von kenny197902 geschlossen:

    Auf Userwunsch geschlossen!

    (Dies ist eine automatische Antwort durch das System).
  17. 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!