Web MySQL Query

Dieses Thema im Forum "Programmierung" wurde erstellt von ChristianG, 18. November 2012.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. ChristianG
    Online

    ChristianG

    Hallo,

    ich bin gerade für ein kleines Intranet ein Login-System zu schreiben (in PHP).

    Ich bekomme nur immer eine Fehlermeldung bei der MySQL-Abfrage...
    PHP:
    1. Warning: mysql_query() expects parameter 2 to be resource, string given in /Applications/XAMPP/xamppfiles/htdocs/mdg_core/functions/users.php on line 4
    2.  
    3. Warning: mysql_result() expects parameter 1 to be resource, null given in /Applications/XAMPP/xamppfiles/htdocs/mdg_core/functions/users.php on line 6

    Ich muss leider zugeben, dass ich das nicht so genau verstehe (technisch gesehen). Wo genau soll ich denn ein TRUE bzw. FALSE durch eine 1 bzw. 2 ersetzten?

    Mein Source Code von der users.php

    PHP:
    1. <?php
    2. function user_exists($username) {
    3. $username = sanitize ($username);    
    4. $result = mysql_query("SELECT user_id, password FROM users WHERE username='%s'", $username );
    5. return (mysql_result($result, 1));}
    Die Funktion wird von einer login.php aufgerufen via einer init.php aufgerufen:
    init.php:
    PHP:
    1.  
    2. <?php
    3. session_start(); //Starting Session
    4. //error_reporting(0); //Turning Errors off
    5. if (error_reporting() !== 0) {
    6. echo "WARNING! ERROR REPORTING IS ON!";
    7. }
    8. require 'database/connect.php';
    9. require 'functions/users.php';
    10. require 'functions/general.php';
    11. $errors = array(); //Array for Error Messages?>

    Und
    login.php:
    PHP:
    1.  
    2. <?php
    3. include 'mdg_core/init.php';
    4. if (user_exists('christian') === true) {
    5. echo "toll";}
    6. die();
    7. if (empty($_POST) === false) {    
    8. $username = $_POST['username'];    
    9. $password = $_POST['password'];
    10.     if (empty($username) === true|| empty($password) === true) {        
    11. $errors[] = 'Du musst einen Nutzernamen und ein Passwort angeben!';  
    12.  } else if (user_exists($username) === false) {        
    13. $errors[] = 'Wir konnten keinen Nutzer mit diesem Namen finden!';    }
    14.  
    15. }
    16.  
    17. ?>
    18.  
    Und das bekommt durch folgendes Formular die Daten:
    HTML:
    1.  
    2. <h2>Log in/Register</h2>    <div class="inner">
    3.         <form action="login.php" method="post">
    4.             <ul id="login">
    5.                 <li>
    6.                     Nutzername:<br>
    7.                     <input type="text" name="username">
    8.                 </li>
    9.                 <li>
    10.                     Passwort:<br>
    11.                     <input type="password" name="password">                
    12.                 </li>
    13.                 <li>
    14.                     <input type="submit" value="Log in">
    15.                 </li>
    16.                 <li>
    17.                     <a href="register.php">Registrieren</a>
    18.                 </li>                
    19.             </ul>
    20.         </form>
    21.     </div>
    Dies ist auf der Startseite.

    Ich weiß jetzt nicht so wirklich, was genau ich ändern soll...

    Hoffe ihr könnt mir helfen.
    P.S. Der Code wurde leider umformatiert...
     
    #1
  2. Crafter6432
    Offline

    Crafter6432

    Registriert seit:
    22. Dezember 2011
    Beiträge:
    686
    Müsste ungefähr so sein:
    Code (Text):
    1. [COLOR=#DD0000][FONT=monospace]"SELECT user_id, password FROM users WHERE username like '%s'"[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$username [/FONT][/COLOR]
     
    #2
  3. winofi
    Offline

    winofi

    Registriert seit:
    17. November 2012
    Beiträge:
    17
    Minecraft:
    winofi
    Ich verstehe nicht ganz was ihr hier genau meint aber der zweite Parameter bei mysql_query ist die Verbindung zu MySql nicht irgendwas, was gesucht wird versuch mal:

    PHP:
    1. $result = mysql_query("SELECT `user_id`, `password` FROM `users` WHERE `username`='".$username."'");
    MfG winofi
     
    #3
  4. Chrisliebaer
    Online

    Chrisliebaer

    Dein erster Fehler ist hier:
    PHP:
    1.  
    2. $result = mysql_query("SELECT user_id, password FROM users WHERE username='%s'", $username );
    Dies muss mindestens so aussehen:
    PHP:
    1. $result = mysql_query("SELECT user_id, password FROM users WHERE username='" . $username . "'");
    Am besten aber gleich ganz korrekt:
    PHP:
    1. $result = mysql_query("SELECT `user_id`, `password` FROM `users` WHERE `username` = '" . $username . "'");
    Dein zweites Problem entsteht durch das erste, sollte jedoch dennoch sauber geprüft werden. Das Problem ist, dass mysql_query einen Fehler lieferte und dein Programm einfach weiter macht. Du muss immer wenn du eine Funktion benutzt auch gucken, ob das funktioniert hat. Dafür nimmt man sicht einfach die Dokumentation und schlägt die Funktion nach. In deinem Fall hier ist das mysql_query
    http://php.net/manual/de/function.mysql-query.php

    Also solltest du noch das hier machen:
    PHP:
    1. if(!$result)
    2. {
    3. //skript beenden
    4. exit();
    5. }
    Oder am besten versuchen den Fehler im Programm zu lösen.

    Guck dir nochmal das zusammensetzten von Strings an. Das was du hier versucht hast war irgendweine Mischung aus einem printf, die du vermutlich irgendwo anderst aufgegriffen hast. Für printf gibt es in PHP KEINEN Bedarf. Es ist absolut schlechter Stil und macht die Sache nur kompliziert, wenn du printf verwendest. Für ausgaben, kannst du einfach echo verwenden.

    Wenn du diese Seite übrigens wirklich online bringen willst, dann les dir bitte noch zu diesem Thema was durch:
    https://www.google.de/search?q=sql+...&rls=org.mozilla:de:official&client=firefox-a

    Ansonsten ist deine Datenbank nach wenigen Tagen brei.
     
    #4
  5. ChristianG
    Online

    ChristianG

    Vielen Dank für die ausführliche Antwort!
    Jetzt habe ich es hinbekommen.
    Zum Thema SQL-Injection:
    Ich jage ja die Eingaben durch die Funktion "sanitize", die macht genau das. MySQL "Zeichen" raushauen...
    Außerdem: wenn du den ersten Satz gelesen hättest, dann wüsstest du, dass ich nie vor hatte die Seite online zustellen, sondern nur für ein kleines Intranet.
    Um genau zu sein: 5 Event-Techniker werden das nutzen...
     
    #5
Status des Themas:
Es sind keine weiteren Antworten möglich.