• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

MySQL Query

Status
Für weitere Antworten geschlossen.
C

ChristianG

Guest
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:
Warning: mysql_query() expects parameter 2 to be resource, string given in /Applications/XAMPP/xamppfiles/htdocs/mdg_core/functions/users.php on line 4

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:
<?php
function user_exists($username) {
$username = sanitize ($username);    
$result = mysql_query("SELECT user_id, password FROM users WHERE username='%s'", $username );
return (mysql_result($result, 1));}

Die Funktion wird von einer login.php aufgerufen via einer init.php aufgerufen:
init.php:
PHP:
<?php
session_start(); //Starting Session
//error_reporting(0); //Turning Errors off
if (error_reporting() !== 0) {
echo "WARNING! ERROR REPORTING IS ON!";
}
require 'database/connect.php';
require 'functions/users.php';
require 'functions/general.php';
$errors = array(); //Array for Error Messages?>

Und
login.php:
PHP:
<?php
include 'mdg_core/init.php';
if (user_exists('christian') === true) {
echo "toll";}
die();
if (empty($_POST) === false) {    
$username = $_POST['username'];    
$password = $_POST['password'];
    if (empty($username) === true|| empty($password) === true) {        
$errors[] = 'Du musst einen Nutzernamen und ein Passwort angeben!';   
 } else if (user_exists($username) === false) {        
$errors[] = 'Wir konnten keinen Nutzer mit diesem Namen finden!';    }

}

?>
Und das bekommt durch folgendes Formular die Daten:
HTML:
<h2>Log in/Register</h2>    <div class="inner">
        <form action="login.php" method="post">
            <ul id="login">
                <li>
                    Nutzername:<br>
                    <input type="text" name="username">
                </li>
                <li>
                    Passwort:<br>
                    <input type="password" name="password">                
                </li>
                <li>
                    <input type="submit" value="Log in">
                </li>
                <li>
                    <a href="register.php">Registrieren</a>
                </li>                
            </ul>
        </form>
    </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...
 
Zuletzt bearbeitet von einem Moderator:

Crafter6432

Workaholic
Registriert
22 Dezember 2011
Beiträge
681
Diamanten
1
Müsste ungefähr so sein:
Code:
[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]
 

winofi

Minecrafter
Registriert
17 November 2012
Beiträge
17
Diamanten
0
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:
$result = mysql_query("SELECT `user_id`, `password` FROM `users` WHERE `username`='".$username."'");

MfG winofi
 
Zuletzt bearbeitet:
C

Chrisliebaer

Guest
Dein erster Fehler ist hier:
PHP:
$result = mysql_query("SELECT user_id, password FROM users WHERE username='%s'", $username );

Dies muss mindestens so aussehen:
PHP:
$result = mysql_query("SELECT user_id, password FROM users WHERE username='" . $username . "'");

Am besten aber gleich ganz korrekt:
PHP:
$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

Rückgabewerte

Für SELECT, SHOW, DESCRIBE, EXPLAIN und andere Anweisungen, die eine Ergebnismenge zurückgeben, gibt mysql_query() eine Kennung resource bei Erfolg zurück oder FALSE bei Fehlern.

Für alle anderen von SQL Anweisungen wie INSERT, UPDATE, DELETE, DROP, etc, gibt mysql_query() TRUE bei Erfolg zurück oder FALSE bei Fehlern.

Die zurückgegebene Ergebnis Ressource sollte an mysql_fetch_array() oder andere Funktionen, die mit Ergebnis Tabellen umgehen, übergeben werden, um auf die erhaltenen Daten zuzuzugreifen.

Nutzen sie mysql_num_rows() um zu erfahren, wieviele Zeilen für eine SELECT Anweisungen zurückgegeben wurden oder mysql_affected_rows() um zu erfahren, wieviele Zeilen von einer DELETE, INSERT, REPLACE oder UPDATE Anweisung betroffen waren.

mysql_query() wird ebenfalls fehlschlagen und FALSE zurückgeben, wenn der Nutzer nicht die Rechte hat, auf die Tabellen, die in der Anweisung referenziert wurden, zuzugreifen.

Also solltest du noch das hier machen:
PHP:
if(!$result)
{
//skript beenden
exit();
}

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.
 
Zuletzt bearbeitet von einem Moderator:
C

ChristianG

Guest
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...
 
Status
Für weitere Antworten geschlossen.
Oben