Warning: mysql_num_rows() expects parameter 1 to be resource, bo

Fermé
juancelyramos Messages postés 4 Date d'inscription jeudi 2 janvier 2014 Statut Membre Dernière intervention 2 janvier 2014 - 2 janv. 2014 à 21:02
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 3 janv. 2014 à 14:11
Bonjour,
je souhaite mettre en place un système de NewsLetter.

Pour cela:
1. je crée un formulaire
avec un INPUT "mail" et un BOUTON "envoyer"
2. j'intègre le PHP directement à la page:

<?php
session_start();

$message = "";

if (!empty($_POST)){
	extract($_POST);
	if (isset($newsLetter)){
		if (empty($newsLetter) or !preg_match('/^[a-z0-9]+(\.[a-z0-9]+)*@[a-z0-9]+(\.[a-z0-9]+)*(\.[a-z]{2,3})$/',$newsLetter)) {
			$message = "<div class='newsLetterErrorMessage'>Adresse courriel non valide ou non indiquée</div>" ;
		}
		if (!empty($newsLetter) and preg_match('/^[a-z0-9]+(\.[a-z0-9]+)*@[a-z0-9]+(\.[a-z0-9]+)*(\.[a-z]{2,3})$/',$newsLetter)){
			$message = "<div class='newsLetterValidMessage'>Vous allez recevoir un courriel de confirmation, merci de bien vouloir vérifier vôtre boîte mail</div>";
			
			$_SESSION['newsLetter'] = $newsLetter;

			if (isset($_SESSION['newsLetter'])) {
				$DB = mysql_connect( "localhost", "Admin", "popol123" ) OR die('Erreur de connexion');
						mysql_select_db('newsLetter', $DB) OR die('Erreur de selection DB');
				$newsLetter = mysql_real_escape_string($newsLetter);
				$query = mysql_query('SELECT id FROM newsletter WHERE mail = "$newsLetter"');
				if (mysql_num_rows($query)==1) {
					$message="Cette adresse courriel existe déjà";
				}
				else{
					mysql_query('INSERT INTO newsletter (adresse) VALUE ("$newsLetter")');
				}
				
				mysql_close();
			}
		}		
	}	
}
?>


mais j'obtiens cette erreur:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given;

j'ai lu sur le site de php que l'extention mysql_num_rows est obsolète depuis PHP 5.5.0,

http://be2.php.net/function.mysql-num-rows,

je cherche et cherche mais je ne trouve pas!

je suis novice dans le php,

D'avance merci pour votre aide;

PS: Aussi, est ce que mon script est sécurisé?

3 réponses

InformatiWeb Messages postés 1648 Date d'inscription lundi 21 juillet 2008 Statut Membre Dernière intervention 11 décembre 2021 449
Modifié par InformatiWeb le 2/01/2014 à 21:22
Effectivement les fonctions PHP "mysql_" sont des fonctions PHP 4 et tu devrais donc penser à apprendre celles de PHP5. Il s'agit de PDO.
Pour apprendre la PDO, je te conseille le site du zéro.
Note : Pour sécuriser ton code en PHP 5, tu devra utiliser les requêtes préparées de PDO.

Pour ton code, tu as oublié de spécifier la connexion MySQL a utiliser.
Remplace donc :
$query = mysql_query('SELECT id FROM newsletter WHERE mail = "$newsLetter"');

par :
$query = mysql_query('SELECT id FROM newsletter WHERE mail = "$newsLetter"',$DB);


et :
mysql_query('INSERT INTO newsletter (adresse) VALUE ("$newsLetter")');

par :
mysql_query('INSERT INTO newsletter (adresse) VALUE ("$newsLetter")',$DB);


Dans l'informatique, Il y a toujours une solution
0
juancelyramos Messages postés 4 Date d'inscription jeudi 2 janvier 2014 Statut Membre Dernière intervention 2 janvier 2014
2 janv. 2014 à 21:32
Super merci beaucoup, j'ai apporter les deux corrections mentionnées.
mais j'ai toujours cette erreur, je vais lire sur le PDO, et voir comme ça se passe Merci encore pour cette info!
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 3/01/2014 à 14:11
Salut,

Pas besoin de spécifier la connexion MySQL si on n'en a qu'une seule, les fonctions mysql_* vont automatiquement reprendre la dernière connexion ouverte avec mysql_connect().

Ton erreur vient du fait que la variable $query, correspondant au retour de la fonction mysql_query(), est un booléen égal à FALSE : donc que ta requête n'est pas correcte.

Il faut toujours gérer les possibles erreurs sql :
$query = mysql_query('SELECT id FROM newsletter WHERE mail = "$newsLetter"');

// on vérifie que la requête s'est bien exécutée
if (!$query) {
    echo 'Erreur SQL : ' . mysql_error();
} else {
    // si il n'y a pas d'erreurs, on traite les résultats
    if (mysql_num_rows($query)==1) // ... etc ...
}


Attention à ne pas utiliser de guillemets doubles dans tes requêtes sql et à protéger les données utilisateurs contres les failles SQL. Tu devrais donc construire ta requête comme ceci (avec l'extension mysql_*) :
$query = mysql_query("SELECT id FROM newsletter WHERE mail = '" . mysql_real_escape_string($newsLetter) . "'");


Bonne journée
0