Page 1 sur 1

Erreur

Posté : 08 juin 2016, 08:08
par Henrigo
Salut a tous je suis nouveau en php et je fais un stage dans une firme et malheureusement il n'ya persone chez qui me plie quand j'ai des Problemes et dans cette firme je suis malheureusement qu'avec les Administrateur et ils n'ont aucune idee de la programmation donc c'est la raison pour laquel je me rend sur ce site et j'espere obtenir de bon conseil de votre part merci bien.

j'ai plusieurs script et lorsque j'effectue un essais j'obtiens l'erreur suivante

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\test\login.php on line 24

la ligne 24 du script login.php est la suivante $rows = mysql_num_rows($query);

voila tout le script
<?php
session_start(); 
$error=''; 
if (isset($_POST['submit'])) {
if (empty($_POST['username']) || empty($_POST['password'])) {
$error = "Benutzername ou Password n'est pas valide";
}
else
{

$username=$_POST['username'];
$password=$_POST['password'];

$connection = mysql_connect("localhost", "root", "");

$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

$db = mysql_select_db("company", $connection);

$query = mysql_query("select * from login where password='$password' AND username='$username'", $connection);
$rows = mysql_num_rows($query);
if ($rows == 1) {
$_SESSION['login_user']=$username; 
header("location: profile.php"); 
} else {
$error = "Benutzername ou Password n'est pas valide";
}
mysql_close($connection); 
}
}
?>
merci bien.

Re: Erreur

Posté : 08 juin 2016, 08:26
par Spols
La doc php indique que mysql_query retourne False en cas d'erreur. est visiblement vu le message d'erreur c'est bien ce qu'il se passe.

Tu devrais mettre en place un système de capture d'erreur mysql pour t'aider à débugger.
il y a un exemple dans la doc (exemple#1)
http://php.net/manual/fr/function.mysql-query.php

PS sauvegarder des password en clair dans une database c'est mal !!
PS2 je te conseillerai d'oublier mysql au profit de mysqli ou de pdo, mysql n'est plus supporté dabns php7 et déprécié dés 5.X

Re: Erreur

Posté : 08 juin 2016, 09:31
par Henrigo
Salut je ne comprend pass pourquoi je teste ce code il ne reagit pas le code est suivant:
connection.php
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'kantteile');
define('DB_USER','root');
define('DB_PASSWORD','');

$con=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());
$db=mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " . mysql_error());

function login()
{
session_start();   
if(!empty($_POST['user']))   
{
	$query = mysql_query("SELECT *  FROM UserName where userName = '$_POST[user]' AND pass = '$_POST[pass]'") or die(mysql_error());
	$row = mysql_fetch_array($query) or die(mysql_error());
	if(!empty($row['userName']) AND !empty($row['pass']))
	{
		$_SESSION['userName'] = $row['pass'];
		echo "login reussi";

	}
	else
	{
		echo "votre mot de pass est faux";
	}
}
}
if(isset($_POST['submit']))
{
	SignIn();
}

?>
j'ai cree au prealable une table dans ma base de donnees kantteile comme suit
CREATE TABLE UserName
(
UserNameID int(9) NOT NULL auto_increment,
userName VARCHAR(40) NOT NULL,
pass VARCHAR(40) NOT NULL,
PRIMARY KEY(UserNameID)
);
ensuite j'ai insere deux utilisateurs comme suis
INSERT INTO 
UserName1 (userName, pass) 
UserName2 (userName, pass) 
VALUES
("toto","123");
("tata","234");
malheureusement il ne se connecte pas, ou peut etre le probleme. Merci bien

Re: Erreur

Posté : 08 juin 2016, 10:34
par Spols
fait afficher ta requète et teste la dans phpmyadmin

Et met ton where en MAJUSCULE, cela a une importance en sql

Re: Erreur

Posté : 08 juin 2016, 12:53
par Ryle
Et met ton where en MAJUSCULE, cela a une importance en sql
Non, le langage SQL n'est pas sensible à la casse. WHERE, where ou WhErE fonctionnent tout aussi bien les uns que les autres. Ce qui peut être sensible à la casse en revanche ce sont les données présentes en base.


Quand tu dis qu'il ne se connecte pas c'est parce que tu as le message "votre mot de pass est faux" ?
As-tu d'autres message d'erreur ? Ta requête ne récupère pas correctement les informations envoyée en post (il manque les apostrophes autour des noms des indexes). Ceci devrait être mieux :
$sql = "SELECT *  FROM UserName where userName = '" . $_POST['user'] . "' AND pass = '" . $_POST['pass'] . "'";
et si nécessaire, comme suggéré par Spols, affiche la valeur de $sql et vérifie que la requête s'exécute bien sur ta base :)


Attention : ce code utilise les valeurs soumises par l'utilisateur sans aucun contrôle de ces dernières. Il y a des risques d'injection SQL ou tout simplement d'erreur, qu'il faudra penser à contrôler.

Re: Erreur

Posté : 08 juin 2016, 14:15
par Henrigo
Salut a tous,
merci bien de la question, quand je dis qu'il ne se connecte pas , c'est que j'aurai attendu recevoir le message suivant
"login reussi"

malheureusement je reste sur la page d'entre (html,css) a savoir d'ou j'entre le nom et le mot de passe.
ce que je trouve bizard est que il ne me revoit pas
"Failed to connect to MySQL: "
Ne soyez pas surpprit de ma maniere donc j'ecris avec des fautes je vis en Allemagne

par ailleur Ryle j'ai change les apostrophes autour des noms des indexes mais toujours rien.

mais je ne sais si je le fais mal, donc cette maniere d'ecrire ma requete n'est pas correct?
$query = mysql_query("SELECT *  FROM UserName where userName = '$_POST[user]' AND pass = '$_POST[pass]'") or die(mysql_error());
Merci bien

Re: Erreur

Posté : 08 juin 2016, 15:18
par Spols
dans ton dernier code, tu as tout mis dans une fonction login(). Appel tu cette fonction quelque part ?

Re: Erreur

Posté : 08 juin 2016, 15:32
par Henrigo
bonne question, voila a quoi resemble le code de ma page d'acceuil il sont tous des scripts php
et si le bosion l'oblige je peus meme poster le mon code css
<?php
include('connection.php');
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">. 
<html>
<head>
<title>SYSTEM</title>
  <link href="style.css" rel="stylesheet" type="text/css">
   </head>
      <body>
        <div id="main">
         <h1 style="text-align: center">SYSTEM</h1>
            <div id="login">
              <h2>Login</h2>
                 <form action="" method="post">
                    <label>Benutzername :</label>
                    <input id="name" name="username" placeholder="Benutzername" type="text">    
                  <label>Password :</label>
                 <input id="password" name="password" placeholder="Passwort" type="password">
                <input name="submit" type="submit" value=" Login ">
              <span><?php echo $error; ?></span>
            </form>
          </div>
        </div>
       </body>
</html>

Re: Erreur

Posté : 08 juin 2016, 15:39
par Henrigo
meme en supprimant la ligne suivante
<span><?php echo $error; ?></span>
rien ne change

Re: Erreur

Posté : 08 juin 2016, 15:53
par Ryle
En html, ce sont les noms des champs qui sont envoyés avec le formulaire :
<label>Benutzername :</label>
<input id="name" name="username" placeholder="Benutzername" type="text">    
<label>Password :</label>
<input id="password" name="password" placeholder="Passwort" type="password">
tu vas donc recevoir une variable $_POST['username'] et pas $_POST['user'] qui est l'id du champ. Pour vérifier les valeurs reçues, tu peux faire un print_r() ou un var_dump() de $_POST dans ton script php.


Comme indiqué par Spols, ton traitement de connexion est fait dans la fonction login(), mais à aucun moment dans ton code tu ne fais appel à celle-ci.
if(isset($_POST['submit']))
{
  SignIn();
}
Ici tu appelles une fonction SignIn() qui n'est pas définie au lieu de login(). Il te faut donc modifier cet appel dans ton code, sinon la fonction n'est jamais exécutée (et c'est pour ça que tu n'as pas de message d'erreur ou de confirmation de la connexion).


Enfin, dans cette fonction login(), tu vérifies si la variable $_POST['user'] n'est pas vide. Comme indiqué plus haut, ton formulaire envoi actuellement la variable $_POST['username']. Il faut donc soit modifier le nom de l'input dans ton formulaire (en remplaçant username par user), soit modifier ton traitement php pour utiliser $_POST['username'] et non $_POST['user'] (et c'est aussi pour ça que tu n'as pas de message d'erreur ou de confirmation de la connexion)

Re: Erreur

Posté : 08 juin 2016, 16:12
par Henrigo
Merci a tous,
Merci bien c'etait cela le probleme.
c'est resolu

ce qui est par ailleur bizard est que
lorsque j'entre un faux username ou faux passwort je ne recois aucune erreur en retour.

Re: Erreur

Posté : 08 juin 2016, 16:30
par Ryle
Pour ton message d'erreur, c'est parce que tu définis celui-ci dans une variable $error qui est propre à ta fonction login(). Quand tu demandes à afficher $error en dehors de celle-ci, php considère qu'il s'agit d'une autre variable et du coup n'affiche rien.

Pour éviter cela tu peux soit faire un return dans ta fonction pour renvoyer le message d'erreur ou de confirmation et récupérer celui-ci en retour de la fonction. Tu auras bien alors une variable définie en dehors de la fonction et php pourra l'afficher.

Une autre solution consiste à dire à php que cette variable $error est une variable globale et que si la fonction login() la met à jour, ce n'est pas une nouvelle variable locale qui doit être utilisée, mais bien la variable globale qui se trouve en dehors de la fonction. Pour cela, il suffit d'ajouter l'instruction " global $error; " dans ta fonction :)

Re: [RESOLU] Erreur

Posté : 09 juin 2016, 07:42
par Henrigo
Salut le probleme je l'ai resolu autrement si tu regarde la ligne suvante
$row = mysql_fetch_array($query) or die(mysql_error());
j'ai du juste me debarasse de
or die(mysql_error())
et il la fonctionne.
Merci beaucoup de vos proposition