Warning: mysql_num_rows() expects parameter 1 to be resource, bo
juancelyramos
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
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:
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é?
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é?
A voir également:
- Warning: mysql_num_rows() expects parameter 1 to be resource, bo
- Warning zone telechargement - Accueil - Outils
- Téléchargement et streaming illégal : voici les adresses des sites pirates que les FAI vont bloquer - Accueil - Services en ligne
- Cpu fan fail warning control - Forum Matériel & Système
- Symbole warning word ✓ - Forum Word
- Quota warning free - Guide
3 réponses
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 :
par :
et :
par :
Dans l'informatique, Il y a toujours une solution
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
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!
mais j'ai toujours cette erreur, je vais lire sur le PDO, et voir comme ça se passe Merci encore pour cette info!
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 :
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_*) :
Bonne journée
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