Erreur php - mysql_num_rows()

Petit nouveau ! | 7 Messages

05 mai 2018, 16:51

Bonjour à tous,
suite à une migration d'un site sur un nouveau serveur, je rencontre un message d'erreur Apache lors d'un test de connexion à une console d'administration alors que cette connexion fonctionne très bien sur l'ancien serveur.
Sur le nouveau, j'ai le message "Accès refusé, identifiants invalides" ($message_identifiant ) voir code ci-dessous.
Petit précision, l'accès à la base de donnée et OK.

Le code erreur Apache est le suivant :
mod_fcgid: stderr: PHP Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /var/www/vhosts/xxxxxxx.com/httpdocs/admin/admin.php on line 17, referer: http://xxxxxx.com/admin/admin.php
n'étant pas encore très familier encore avec les erreurs apaches, je me pose la question suivante :
le problème peut il être provoqué par une version supérieur de Mysql ou php par rapport à l'ancien serveur ?
merci pour votre avis

Voici le code php pour la connexion
<?php session_start();
$message_identifiant = "";

if (isset($_POST["tb_identifiant"])) {
  // Connexion à la BD Imersion
  require_once('../connect.php');
  
  // Nettoyage des éléments
  $login_imersion = mysql_real_escape_string(trim($_POST["tb_identifiant"]["login"]));
  $password_imersion = mysql_real_escape_string(trim($_POST["tb_identifiant"]["password"]));
  
  // Test identifiant et mot de passe
  if ($login_imersion != "" && $password_imersion != "") {
  
    // Vérification si l'utilisateur est administrateur Imersion
    $req = mysql_query('select * from Users where Login="'.$login_imersion.'"');
    if (mysql_num_rows($req) != 0) { // L'utilisateur existe, on vérifie le mot de passe
      $res = mysql_fetch_assoc($req);
      if (sha1($password_imersion.$res['GDS']) == $res['MDP']) { // L'utilisateur est un administrateur, on créé la session
      //if ( $password_imersion == $res['MDP'] && $res['type'] == 'Admin') {
      
        $_SESSION['Type'] = $res['type'];
        $_SESSION['ID'] = $res['id_user'];
        $_SESSION['Nom'] = $res['Nom'];
        $_SESSION['Prenom'] = $res['Prenom'];
        $_SESSION['MDP'] = $res['MDP'];
        $_SESSION['GDS'] = $res['GDS'];
        
        echo "<script language='javascript' type='text/javascript'>
					<!--
					window.location.replace('gestion-acc.php');
					-->
					</script>";
					
				} else {
    		$message_identifiant = "<h4>Acc&egrave;s refus&eacute;, identifiants invalides</h4>";
   			}
  		} else {
  			$message_identifiant = "<h4>Acc&egrave;s refus&eacute;, identifiants invalides</h4>";
  		}
  }
} 

?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 mai 2018, 17:26

Bonjour,

Essaye de faire un petit peu de debug :
mysql_num_rows() expects parameter 1 to be resource, boolean given
Cela veut dire que la variable que tu as mis en 1er paramètre à la fonction mysql_num_rows() est un booléen alors que ça ne devrait pas être ça.
Du coup dans ton code, regarde de quelle variable on parle, fais un var_dump() de ce paramètre et si effectivement c'est un booléen (probablement false pour indiquer une erreur) alors il faut que tu remontes à l'endroit où cette variable est créée pour comprendre d'où vient l'erreur.

Il y a de grandes chances que ce soit :
- soit un problème de connexion à ta base mysql (il faut que tu vérifies l'adresse du serveur SQL et les identifiants SQL)
- soit une incompatibilité lors du changement de version, notament toutes les fonctions mysql_* sont obsolètes depuis PHP 5.5 (sorti en 2013) et supprimées complètement depuis PHP 7 (sorti en 2016) => si tu es dans ce cas là, il faut que tu passes aux fonctions mysqli_* ou à PDO, ça veut dire qu'il faut que tu reprennes une grosse partie de ton code.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 7 Messages

05 mai 2018, 19:36

Merci de cette réponse, ça confirme ce que je pensais... version Mysql 5.1.63 alors que sur le nouveau serveur je suis en 5.6.33.
Y a plus qu'a me pencher pour modifier le code ;-)
merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 mai 2018, 19:59

MySQL évolue relativement peu d'une version sur l'autre pour toutes les requêtes basiques donc il y a rarement des pb de compatibilité.

C'est la version de PHP qui compte ici et PHP 7 est une évolution très importante du langage (et beaucoup + performante) ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 7 Messages

06 mai 2018, 20:56

Si je comprends bien, l'erreur ne viendrais pas de la version de Mysql mais plutôt de PHP ??
L'ancien serveur était en 5.2 (php) et là j'ai mis la version 5.3.2 (php).
En tout cas, merci pour la réponse

Mammouth du PHP | 2703 Messages

06 mai 2018, 21:30

il y a cette erreur quand la requête sql est invalide, voir le premier exemple de http://php.net/manual/fr/function.mysql-query.php

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 mai 2018, 21:30

Si tu as PHP 5.3.2 alors le problème n'est probablement pas là.
Il faut que tu fasses ton debugage comme je te l'ai indiqué pour savoir à quel niveau ça ne fonctionne pas.

Par ailleurs, c'est un peu bizarre de changer pour un nouveau serveur avec une version de PHP (5.3.2) qui est sorti en mars 2010 ! Tu t'expose à des failles de sécurité à rester sur des versions aussi anciennes
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 7 Messages

06 mai 2018, 22:16

Je sais... ce n'est pas une bonne pratique, mais c'est temporaire. Car je suis entrain de développer une nouvelle version du site. La personne n'a pas renouvelé l'hébergement (l'ancien) car il souhaité le mettre sur un autre serveur. donc en attendant que le nouveau site soit opérationnel, le seul moyen pour moi de faire fonctionné la version du site actuel est de l'installer sur la plus vielle version que mon serveur dispose :-(
Encore merci.