Überprüfen und verweigern wenn vorhanden

  • geschlossen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Überprüfen und verweigern wenn vorhanden

    Hey leute,

    habe nen script geschrieben der einen neuen administrator in die datenbank einträgt, mithilfe eines formulars.
    Soweit geht es.
    Ich bekomme es aber einfach nicht hin das er überprüft ob der Benutzername/Administrator schon vorhanden.
    Wenn ja dann fehlermeldung und neuer versuch
    wenn nein dann eintragen und gut ist.
    mir ist eigentlich klar das es eine if-function sein muss, aber ich habe es bisher einfach nicht hinbekommen.
    hier mal der code:

    PHP-Quellcode

    1. <?php
    2. //überprüfen ob Administrator angemeldet ist
    3. require "./session.inc.php";
    4. ?>
    5. <html>
    6. <head><title>Administrationsbereich</title></head>
    7. <body>
    8. <?php
    9. //datenbankverbindung
    10. function datenbank_verbinden()
    11. {
    12. $db_server="localhost";
    13. $db_name="smuv";
    14. $db_user="root";
    15. $db_passwort="";
    16. $db_verbindung=mysql_connect($db_server,$db_user,$db_passwort);
    17. if(!$db_verbindung)
    18. die("Der Server kann nicht erreicht werden.");
    19. if(!mysql_select_db($db_name,$db_verbindung))
    20. die("Die Datenbank kann nicht angesprochen werden.");
    21. return $db_verbindung;
    22. }
    23. ?>
    24. <form action="<?$_SERVER['php_self']?>" method="get">
    25. <table>
    26. <tr><th><b><p align=left>Neuer Administrator:</p></b></th> <th><input type="text" name="na"></th></tr><p align=right><a href=logout.php>Logout</a></p>
    27. <tr><th><b><p align=left>Sein gewünschtes Password:</p></b></th> <th><input type="text" name="gp"></th></tr>
    28. <tr><th><input type="submit" name="ausfuehren" value="Abschicken"></th></tr>
    29. </table>
    30. </form><br><br>
    31. <?php
    32. //Daten überprüfen
    33. function check_eintraege()
    34. {
    35. if(empty($_GET['na']))
    36. {
    37. echo "<b>Fehler! Sie haben keinen Administratornamen angegeben.</b><br><br>";
    38. return false;
    39. }
    40. if(empty($_GET['gp']))
    41. {
    42. echo"<b>Fehler! Sie haben kein Passwort angegeben.</b><br><br>";
    43. return false;
    44. }
    45. return true;
    46. }
    47. //Neuen Administrator speichern
    48. function schreib_admin($verbindungskennung)
    49. {
    50. $verbindungskennung=datenbank_verbinden();
    51. $eintrag="INSERT INTO administrator (Administrator, Kennwort) VALUES ('$_GET[na]','$_GET[gp]');";
    52. $eintrag=mysql_query($eintrag,$verbindungskennung);
    53. }
    54. // wenn alles okay, dann trage ein
    55. function admin_speichern()
    56. {
    57. $verbindungskennung=datenbank_verbinden();
    58. if(check_eintraege($verbindungskennung))
    59. {
    60. schreib_admin($verbindungskennung);
    61. echo "<b>Der Administrator wurde hinzugefügt!</b><br>";
    62. echo "<b>Er kann sich nun einloggen!</b><br>";
    63. echo "<b>Sie können auch weitere Administrator eingeben.</b>";
    64. }
    65. else
    66. {
    67. echo "<b>Der Administrator wurde <u>nicht</u> hinzugefügt</b><br><br>";
    68. echo "<b>Bitte versuchen sie es nochmal!!</b><br><br><br>";
    69. }
    70. }
    71. //Von hier werden die Funktionen formular() und
    72. // daten_merken() aufgerufen
    73. if (isset($_GET['ausfuehren']))
    74. admin_speichern();
    75. echo "<a href=admin_menu.php> Zurück zum Menü</a>";
    76. ?>
    77. <body>
    78. </html>
    Alles anzeigen


    lg
    und
    thx

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Ryckmaster ()

  • Dafür wäre es sicher hilfreich zuerst die eingetragenen Admins mit einer SELECT Anweisung auszulesen und dann mit dem übergebenen Wert zu vergleichen, bevor die INSERT Anweisung an die Datenbank weiter gereicht wird.
    Der Parameter Deiner Funktion: schreib_admin($verbindungskennung) ist nicht nötig, die Verbindungskennung wird als Rückgabewert von datenbank_verbinden() generiert.
    Deine Funktion: check_eintraege() überprüft nur ob alle Felder ausgefüllt sind, nicht die Datenbank. Vielleicht ist das Dein Denkfehler... . Diese Funktion braucht für diesen Zweck auch nicht die Verbindungskennung... .

    Grundsätzlich: trage bitte niemals ohne Prüfung GET- Variablen in eine Datenbank ein, sieh Dir mal z.B. die PHP Funktion htmlentities() an.
    Ebenso hat fast jede PHP Funktion einen auswertbaren Rückgabewert, der auch benutzt werden sollte... .

    dann ein frohes Neues...
    bye
    Guardian

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Guardian ()

  • Der ganze Code da oben ist (sorry) ein Haufen Müll....

    Zuerst solltest du das entsprechende Feld (Namen des Admins) in der DB als UNIQUE setzen, zum anderen würde ich einfach mit einer SELECT-Abfrage prüfen, ob der Name schon in der DB existiert (bei Nichtvorhandensein liefert dir die Abfrage ein FALSE zurück -> was bedeutet, dass es diesen Admin noch nicht gibt).

    Du brauchst für solche Sachen keine eigenen Funktionen zu deklarieren, alles was du brauchst liefert dir PHP und MySQL von Haus aus mit.

    Gruß thomo
  • okay mit UNIQUE hat es geklappt, hätte ich eigentlich selber drauf kommen können.
    aber nun möchte ich noch das er auch ne fehlermeldung ausgibt.
    wie würde ich das denn am besten machen?

    lg

    hat sich erledigt danke ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Ryckmaster ()