Ergebnis 1 bis 20 von 41

Thema: PHP und MySQL

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Du hattest $aql statt $sql geschrieben.

  2. #2
    aso



    Den Primäschlüssel, kann man doch nur einmahl setzten oder?, weil es gibt ja Seiten wo man einen Loginnamen und ein Nickname hat, beide können ja nur einmahl vorkommen, wie machen die den das?

  3. #3
    Afaik musst du dafür das Attribut unique setzen, das geht genauso wie primary key. Also etwa CREATE TABLE `users` (<Felder>, PRIMARY KEY (`id`), UNIQUE(`username`)

  4. #4
    Wenn du es so wie bei masterquest machst, bekommt der Key den selben Namen wie das Feld. Wenn du also einen UNIQUE-Schlüssel für das Feld `username` machst, heisst dein Key auch "username".

    Das vom Orc geht aber auch

  5. #5
    Nun bin ich dran ein Loginscript zu schreiben, aber bin wohl zu blöd dafür.

    Ich habe mir nun ne Tabelle gemacht die so aussieht.
    CREATE TABLE users(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    Loginname VARCHAR( 30 ) UNIQUE KEY ,
    Nickname VARCHAR( 30 ) UNIQUE KEY ,
    Mailadresse VARCHAR( 50 ) ,
    Passwort VARCHAR( 50 ) ,
    zahl INT
    )

    Also, bei dem Loginformular schicht man dann die Daten mit Post, den Loginname und das Passowort.
    Nun soll ja geprüft ob es die Kombination aus Loginname und Passwort gibt, da gibt es schon probleme und ich weiß nicht wie ich es machen soll, das es in der Datenbank geprüft wird.
    Wenn das Passwort und der Loginname stimmt,soll in die Tabelle bei zahl eine zufallszahl gesetzt werden und dann ein Cookie, auch mit dieser zahl, am rechner und nur wenn die Zahl die im Cookie und in der Datenbank bei zahl steht gleich ist, kann man dann den anderen bereich betreten.
    Ist das sinnvoll es so zu machen, weil wenn nicht brauche ich erst gar nicht anzufangen.

  6. #6
    Ich kopier einfach mal meins.
    Bevor hier wieder irgendwelche Klugscheisser kommen; man kann auch gleich $_POST['name'] im mysql_query einsetzen
    PHP-Code:

      session_start
    ();
      
    $name $_POST['name'];
      
    $passwort $_POST['passwort'];
        include 
    "global.php";
        
    $result mysql_query("SELECT `id` FROM mitglieder WHERE `name`='$name' AND `passwort`='".md5($passwort)."'");
        
    $row mysql_fetch_array($result);
        echo 
    mysql_error();
        if(
    mysql_num_rows($result) > 0) {
        
    $_SESSION["id"] = $row['id'];
        } 

    Edit: Das session startgedöns kannst du natürlich weglassen, genauso kannst du in der if abfrage beliebig irgendetwas einsetzen.

    Geändert von rgb (19.04.2005 um 16:29 Uhr)

  7. #7
    Also ich kann damit nichts anfangen, wie wäre es den mit einer Erklährung

    Warum "SELECT `id`", das versteh ich nicht, eigendlich versteh ich fast alles nicht.

  8. #8
    Er speichert die ID des Benutzers in der Session, damit er später wieder Informationen über diesen Benutzer abrufen kann und auch auf weiteren Seiten noch die Login-Kontrolle hat.
    Er könnte auch den Namen speichern und SELECT name machen, völlig egal. Die ID ist normalerweise relativ klein, damit bietet sich diese an.

    Er macht also eine SQL Abfrage der ID, bei der der Name gleich dem eingegebenen Namen und das Passwort gleich dem eingegebenen Passwort ist. Wenn das Ergebnis (hier rows) größer Null ist, dann speichert er die ID in der Session.

    Ganz einfach.

  9. #9
    Nach einen dummes fehler von mir habe ich meine ganze Datenbank gelöscht, wollt eigendlich nur eine Tabelle löschen, nun wollt ich sie neu anlegen, nun gibt es bei den Tabellen aber ein problem, es klappt nicht mehr. Er sagt in der zweiten Zeile ist ein Fehler.

    CREATE TABLE user(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    Loginname VARCHAR( 30 ) UNIQUE KEY ,
    Nickname VARCHAR( 30 ) UNIQUE KEY ,
    Mailadresse VARCHAR( 50 ) ,
    Passwort VARCHAR( 50 ) ,
    Geburtstag DATE,
    Wohnort VARCHAR( 40 ) ,
    Text TEXT,
    )



    auch das mit den Datenändern in einer Tabelle bekomme ich nicht hin.
    PHP-Code:
       $sql7 "UPDATE `user` SET `Passwort` = 'abc', `Text`=  'adasfhjasofhasdasfpashfas' WHERE `Loginname` = 'Tobias'";
      
    mysql_query(sql7); 
    Es kommt kein Fehler es passiert einfach nichts.

  10. #10
    Lass dir mal den mysql_error ausgeben.

    PHP-Code:
     $sql7 "UPDATE `user` SET `Passwort` = 'abc', `Text`=  'adasfhjasofhasdasfpashfas' WHERE `Loginname` = 'Tobias'";
      
    mysql_query(sql7) or die(mysql_error()); 

  11. #11
    Zu deinem ersten Problem:
    Primarykeys müssen in einer Extrazeile definiert werden:

    ...
    `id` INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`)
    ...

    Und zu deinem zweite Problem:
    Ich würde mal annehmen, dass es keinen Eintrag gibt, bei dem der Loginname "Tobias" ist...

    Geändert von Manni (27.04.2005 um 12:49 Uhr)

  12. #12
    Ich versteh das nicht, wenn ich das eingeben gehts
    CREATE TABLE asdasdasd(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    Loginname VARCHAR( 30 ) UNIQUE KEY ,
    Nickname VARCHAR( 30 ) UNIQUE KEY ,
    Mailadresse VARCHAR( 50 ) ,
    Passwort VARCHAR( 50 ) ,
    Geburtstag DATE,
    Wohnort VARCHAR( 40 ) ,
    )

    aber wenn ich das eingebe
    CREATE TABLE user(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    Loginname VARCHAR( 30 ) UNIQUE KEY ,
    Nickname VARCHAR( 30 ) UNIQUE KEY ,
    Mailadresse VARCHAR( 50 ) ,
    Passwort VARCHAR( 50 ) ,
    Geburtstag DATE,
    Wohnort VARCHAR( 40 ) ,
    Text TEXT,
    )

    kommt der Fehler:
    #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'user(
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    Loginname

    es ist egal ob ich es so schreibe wie oben oder so wie Manni_the_Dark es gesagt hat, es passiert das selbe.



    Zu dem anderen Problem von mir, also es gab einen Eintrag wo Loginnamen Tobias stand.

  13. #13
    Versuchs mal damit:
    CREATE TABLE `user` (
    `id` INT NOT NULL AUTO_INCREMENT ,
    `Loginname` VARCHAR( 30 ) NOT NULL ,
    `Nickname` VARCHAR( 30 ) NOT NULL ,
    `Mailadresse` VARCHAR( 50 ) NOT NULL ,
    `Passwort` VARCHAR( 50 ) NOT NULL ,
    `Geburtstag` DATE NOT NULL ,
    `Wohnort` VARCHAR( 40 ) NOT NULL ,
    PRIMARY KEY ( `id` ) ,
    UNIQUE (`Loginname` , `Nickname`)
    );

    Das zweite Problem liegt daran, dass es in deiner Tabelle kein Feld mit dem Namen "Text" gibt...

  14. #14
    Das mit der Tabelle klappt nun, danke, hab halt noch ein Feld mit Text hinzu gefügt.
    Nun zu meinem anderen Problem, es ist jedes Feld da, das Script klapt auch, aber nur wenn ich die Seite mehrfach lade, sonst passiert nichts, woran kann das liegen.
    Hier noch mahl das Programm, hatte auch einen Tippfehler drin, hatte sql statt $sql geschrieben.
    PHP-Code:
      include("zugriff.inc.php");
       
    $sql "UPDATE `user` SET `Text`='adasfhaaaaaaaaaaafpashfas' WHERE `Loginname`='tobias' LIMIT 1";
      
    mysql_query($sql);
      echo 
    "fertig"

  15. #15
    Mir ist gerade mahl aufgefallen das es egal ist ob man mysql_close() setzt oder nicht. Ich versteh nicht wofür es dann gut sein soll. Kann mir da jemand helfen, schon mahl danke.


    Noch ein anderes Problem.
    Wenn ich zum Beispiel im Gästebuch haben will das alle Einträge die älter als 7 Tag sind automatisch gelöscht werden, wie mach ich das? Ich habe ein Datum zum Beispiel 01.30.1989, da wurde der Beitrag geschrieben oder soll ich nicht das Datum speichern sondern die eine Zeit da (ich meine die eine Zeit die irgendwann mahl begonnen hat und immer weiter geht, komm im moment nicht auf den Namen, ich denk ihr wisst was ich meine) plus die Zeit die dann in Sieben tagen vergangen ist speichern und das Script schaut dann ob die Zeit die in der Tabelle steht kleiner ist asl die Andere, wenn ja wird der Beitrag gelöscht. Oder wie macht man das?

  16. #16
    Ich würde da einfach den Unix-Timestamp in die Datenbank schreiben (kriegst du mit der Funktion time()) und bei jedem Aufruf des Gästebuches alle Einträge aus der Tabelle löschen, bei denen der Timestamp kleiner ist als time() - 604800 (7 Tage sind 604800 Sekunden). In ein menschenlesbares Format kannst du das dann auch mit date() fummeln, übergib einfach als zweites Argument den Timestamp.

    Zu mysql_close(): die bestehenden MySQL-Verbindungen werden beim Beenden des Scripts automatisch geschlossen. Die Funktion dient lediglich dazu, die Verbindung manuell zu schließen, wenn man sie z.B. nur am Anfang des Scripts benötigt.

  17. #17
    Wenn am Anfang dann zum Beispiel ein Wert aus der Tabelle ausgelesen wird und das wars dann, und wenn man dann nicht die mysql_close() hinsetzt, bleibt der zugang bestehen, wie lange denn, doch nur so lange bis die seite 100% anfgerufen ist oder? Wenn man sie nicht schließt, wächst dann der Traffic, ist er mehr als wenn man den Zugang geschlossen hätte?

  18. #18
    Zitat Zitat von Mays
    Wenn am Anfang dann zum Beispiel ein Wert aus der Tabelle ausgelesen wird und das wars dann, und wenn man dann nicht die mysql_close() hinsetzt, bleibt der zugang bestehen, wie lange denn, doch nur so lange bis die seite 100% anfgerufen ist oder? Wenn man sie nicht schließt, wächst dann der Traffic, ist er mehr als wenn man den Zugang geschlossen hätte?
    Hajo. Das ist immer eine Frage von Relationen. Eine geöffnete Verbindung zur DB belegt immer etwas RAM und knabbert, wenn auch wenig, wenn gerade nichts abgefragt wird, an der CPU-Performance.

    Nun ist allerdings die Frage ob es sinnvoll ist mysql_close() zu verwenden wenn die Verbindung halt nur ein paar Millisekunden früher geschlossen wird. Wenn ihr mich fragt, ist das für den gewöhnlichen Anwender unnötig.
    Erst wenn man mit gewaltigen Datenmängen hantiert oder man ein Mammutprojekt betreibt.
    Ich mächte wetten, das man bei einem Projekt wie Wikipedia vielleicht gut 2-5% Performance noch heraus kitzeln kann wenn man mysql_close() einsetzt. Und das bedeutet bei einem so großen Projekt oft, dass man sich einen Server sparen kann.

  19. #19
    mysql_close() muss man doch nur dann verwenden, wenn eine Seite auf zwei Datenbänke zugreift oder kann man einfach beide öffnen?

    Nun zum Gästebuchscript, mein Problem ist es, dass nichts passiert, die daten werden weder geladen noch gespeichert und es kommt kein Fehler.
    Das Abschickformular:
    <form action="<?php $_SERVER[PHP_SELF]; ?>" method="post">
    <table>
    <tr><td>Name: </td><td><input type="text" name="schreiber"></input></td></tr>
    <tr><td>Email-adresse </td><td><input type="text" name="email"></input></td></tr>
    </table>
    <textarea name="eintrag" cols="40" rows="7"></textarea><br>
    <input type="submit" name="submit" value="abschicken"></input>
    </form>
    Der Code der es ausließt:
    PHP-Code:
      <?php
       $eintrag 
    "SELECT * FROM gaestebuch ORDER BY id";
       
    $result mysql_query($eintrag);
       while (
    $row mysql_fetch_assoc($result)) {
        echo 
    '<p><b><a href="mailto:' $mailadresse '>' nl2br(htmlspecialchars($row["schreiber"])) . '</a></b> schrieb am ' $row["datum"] . '<br>' nl2br(htmlspecialchars($row["eintrag"])) . '</p><hr>';
       }
      
    ?>
    Das Script was die daten speichert:
    PHP-Code:
    <?php
     
    include("zugriff.php");
     if (isset(
    $_POST['submit'])) {
      
    $schreiber $_POST['schreiber'];
      
    $email $_POST['email'];
      
    $eintrag $_POST['eintrag'];
      
    $sql_eintrag "INSERT INTO `gaestebuch` ( `id` , `schreiber` , `eintrag` , `mailadresse` , `zeit` , `datum` ) VALUES ('','" $schreiber "','" $eintrag "','" $email "', time(), now())";
      
    mysql_query($sql_eintrag);
      echo 
    "gemacht";
     }
    ?>
    Einen Schreibfehler schließe ich aus, ich denk das ich irgendwie was Falsch denke, also ich hab wohl einen logischen Fehler gemacht oder ein ganz Dummen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •