[RESOLU] mysql_num_rows() expects parameter 1 to be resource, boolean

Petit nouveau ! | 7 Messages

06 janv. 2013, 22:13

Bonjour,

Je rencontre une erreur, la voici :
"Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\site\content\admin\login.php on line 9"
Je ne comprends pas pourquoi :/
<?php

if ($_POST["action"] == "send")
{
  $login = $_POST["login"];
  $password = $_POST["password"];

  $req = mysql_query("select iduser from admin_users where login='$login' and password='".md5($password)."' and etat!='0'");
  if (mysql_num_rows($req)==0)
  {
    $_GET["msg"] = "Veuillez vérifier vos informations !";
    $r = mysql_query("insert into admin_users_tentatives values ('',NULL,'$login','$password','$dateheure','$ip')");
  }
  else
  {
    $iduser = mysql_result($req,0,"iduser");

    $_SESSION["admin"]["iduser"] = $iduser;
    $_SESSION["admin"]["login"] = $login;
    $_SESSION["admin"]["password"] = md5($password);

    $r = mysql_query("insert into admin_users_tentatives values ('','$iduser','','','$dateheure','$ip')");

    header("Location: /admin/index.php?".session_name()."=".session_id());
    exit();
  }
}

?>

<div class="container span5">

<h1>Connexion</h1>

<p>Entrez vos informations confidentielles.</p>

<?php

if ($_GET["msg"] != "")
{
  $msg = str_replace("+"," ",$_GET["msg"]);
  $msg = stripslashes($msg);
  echo("<div class=\"alert alert-error\">Veuillez vérifier vos informations !</div>");
}

?>

<form class="form-horizontal" action="login" method="post">
<input type="hidden" name="action" value="send" />
  <div class="control-group">
    <label class="control-label" for="inputLogin">Login</label>
    <div class="controls">
      <input type="text" name="login" id="inputLogin">
    </div>
  </div>
  <div class="control-group">
    <label class="control-label" for="inputPassword">Mot de passe</label>
    <div class="controls">
      <input type="password" name="password" id="inputPassword">
    </div>
  </div>
  <div class="control-group">
    <div class="controls">
      <button type="submit" class="btn btn-danger">Connexion</button>
    </div>
  </div>
</form>

</div>
Merci a vous^^ :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 janv. 2013, 22:47

salut,


ta requête est "foireuse", mysql_query retourne donc false.

il faut toujours tester le retour de mysql_query et afficher un message d'erreur le cas échéant.

par exemple
<?php
$ret = mysql_query(' la requete ');
if($ret === false ) {
    echo 'Erreur SQL : '.mysql_error();
}
?>
utilise une variable pour stocker ta requête sql et pouvoir l'afficher dans le message d'erreur en cas de soucis :)

quand tu affiche ton message d'erreur tu devrais avoir ta solution ;)

Pour info en sql la différence c'est <> et non != ;) (même si cela fonctionne ;) )



@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 7 Messages

07 janv. 2013, 00:33

merci pour la réponse.
voici le message qui s'affiche "Erreur SQL : No database selected"

Je ne comprends toujours pas car voici mon fichier php de connexion a la bdd, aucune erreur...
<?php

// MYSQL

$my_hote = "localhost";
$my_user = "root";
$my_password = "";
$my_bdd = "membres";

$my_connect = mysql_pconnect($my_hote, $my_user, $my_password);
mysql_select_db($my_bdd, $my_connect);

// SESSION

session_start();

?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 janv. 2013, 00:48

pas besoin de connexion permanente ;) mysql_connect suffit.


test les retours des fonctions mysql_connect et mysql_select_db, comme dans les exemples de la doc

http://fr2.php.net/mysql_select_db (exemple N°1)

Le message d'erreur indique que mysql_select_db n'a pas fait sont boulot (donc a priori mauvais non de base ?).


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 7 Messages

07 janv. 2013, 01:14

non, c'est bien le bon nom de bdd.

voici mon fichier config de connexion :
<?php

// MYSQL

$link = mysql_connect('localhost', 'root', '');
if (!$link) {
	die('Impossible de se connecter : ' . mysql_error());
}

$db_selected = mysql_select_db('membres', $link);
if (!$db_selected) {
	die ('Impossible de sélectionner la base de données : ' . mysql_error());
}

// SESSION

session_start();

?>
aucune erreur a l'écran concernant le fichier de connexion a la bdd mais toujours le message d'erreur "Erreur SQL : No database selected" de la page login ainsi que le message d'erreur "Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in" !
un mystère :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 janv. 2013, 01:21

Erreur SQL : No database selected"

pas de base sélectionnée, donc y a forcément un truc qui va pas :)


est ce que sur la page indiquée y a bien le mysql_select_db ?

si tu as cette erreur c'est que soit cette fonction n'est pas appelée, soit elle retourne false ;)


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 7 Messages

07 janv. 2013, 02:09

"est ce que sur la page indiquée y a bien le mysql_select_db ?"

c'est assez surprenant car c'est un script qui fonctionnait très bien avant la mise en place de la nouvelle structure mais je ne comprends pas pourquoi ça ne fonctionne pas.

nouvelle structure, explication : avant pour chaque page il y avait :
- exemple pour la page login.php avant le changement :
include de la page config de bdd
le header du design
la page login
le footer du design


cette structure fonctionne a merveille avec mon script,
mais plusieurs programmeurs m'ont conseillé de changer de structure car c'est un mode de fonctionnement assez ancien / il y a mieux maintenant. J'ai suivi la structure de http://www.grafikart.fr/tutoriels/php/d ... te-php-102

mais une fois la nouvelle structure en place, j'ai eu le message d'erreur... je ne sais plus trop quoi faire :/ qu'en pense tu de la structure que propose grafikart ? il y'en a t'il une meilleure ? pourquoi avec cette structure, mon script ne fonctionne plus ? :/
merci de ton aide.

ViPHP
xTG
ViPHP | 7331 Messages

07 janv. 2013, 09:41

Tu as du t'emmeler les pinceaux, tu as une requête SQL qui se trouve avant la connexion à la bdd.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 janv. 2013, 10:12

pour ce qui est de la structure, ton découpage de base est bon mais pas employé de façon "optimale" de façon a avoir quelque chose des très souple à l'utilisation.

a priori le lien quetu indique se base sur le système de pseudo-frame pour fonctionner. c'est qui manque a ton système.

cela te permet de n'avoir qu'un fichier contenant ta structure et ainsi d'éviter de devoir modifier 500 fichiers lorsque tu souhaite modifier le fonctionnement de ton site (ce que tu fait actuellement ;) )



@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 7 Messages

07 janv. 2013, 12:50

Tu as du t'emmeler les pinceaux, tu as une requête SQL qui se trouve avant la connexion à la bdd.
Je pense pas, j'ai suivi a la lettre le tutoriel sur la structure. voici mon fichier index.php a la racine :
<?php

define("WEBROOT","/site/");

if(!isset($_GET["p"])){$_GET["p"]="index";}
if(!file_exists("content/".$_GET["p"].".php")){$_GET["p"]="404";}
ob_start();
include "content/".$_GET["p"].".php";
$content = ob_get_contents();
ob_end_clean();

include "conf.php"; // le fichier de connexion a la bdd AVANT l'inclusion du fichier template plus bas...
include "fonctions.php"; // un fichier de fonctions
include "template.php"; // le template avec la page en question

?>
que faire dans mon cas :/
pour ce qui est de la structure, ton découpage de base est bon mais pas employé de façon "optimale" de façon a avoir quelque chose des très souple à l'utilisation.
pas optimale a quel niveau ? peut-être qu'il existe un meilleur tutoriel sur la structure d'un site php...
a priori le lien que tu indique se base sur le système de pseudo-frame pour fonctionner. c'est qui manque a ton système.
Cela ressemble a mon système en effet, mais je pense pas qu'il manque quelque chose sinon le contenu ne s'afficherait pas, html, formulaire, etc ? La c'est uniquement un bug de la partie 'connexion a la bdd'. Mais le reste du contenu fonctionne.
cela te permet de n'avoir qu'un fichier contenant ta structure et ainsi d'éviter de devoir modifier 500 fichiers lorsque tu souhaite modifier le fonctionnement de ton site (ce que tu fait actuellement ;) )
? non actuellement j'utilise justement la structure de grafikart, ainsi, si j'ai une modification a faire, c'est seulement sur un seul fichier, pas sur 500 justement... grâce a cette structure.

ViPHP
xTG
ViPHP | 7331 Messages

07 janv. 2013, 14:48

Tu inclus la conf après les fichiers...
Ton premier include intègre les requêtes SQL, le template ne fait que réexploiter les données lui !

Petit nouveau ! | 7 Messages

07 janv. 2013, 18:46

Tu inclus la conf après les fichiers...
Ton premier include intègre les requêtes SQL, le template ne fait que réexploiter les données lui !
Problème résolu ! oui en effet le template ne fait que réexploiter les données je suis c.. parfois^^ merci a toi et mougli