PHP Warning: mysql_fetch_array() expects parameter 1 to be ....

Résolu
Madriax Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   -  
Madriax Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, bonsoir.
Cela fait déjà plusieurs heures que je lis et relis mon code, mais rien ne marche. Je recois l'erreur suivante de php:
PHP Warning: mysql_fetch_array() expects parameter 1 to be resource

Voici mon code:

<?php

if (isset($_POST['register'])) {
  if (isset($_POST['pseudo']) AND !empty($_POST['pseudo']) AND isset($_POST['email']) AND !empty($_POST['email']) AND isset($_POST['pass1']) AND !empty($_POST['pass1']) AND isset($_POST['pass2']) AND !empty($_POST['pass2']) AND isset($_POST['nom']) AND !empty($_POST['nom']) AND isset($_POST['prenom']) AND !empty($_POST['prenom']) AND isset($_POST['birth']) AND !empty($_POST['birth'])) {
    $pseudo = mysql_real_escape_string($_POST['pseudo']);
    $email = mysql_real_escape_string($_POST['email']);
    $pass1 = sha1($_POST['pass1']);
    $pass2 = sha1($_POST['pass2']);
    $nom = mysql_real_escape_string($_POST['nom']);
    $prenom = mysql_real_escape_string($_POST['prenom']);
    $birth = mysql_real_escape_string($_POST['birth']);
    
    if ($pass1 == $pass2) {
      $req1 = mysql_query('SELECT pseudo FROM membres WHERE pseudo = "'.$pseudo.'"');
      $rep1 = mysql_fetch_array($req1);
      if (!isset($rep1['pseudo'])) {
        $req2 = mysql_query('SELECT email FROM membres WHERE email = "'.$email.'"');
        $rep2 = mysql_fetch_array($req2);
        if (!isset($rep2['email'])) {
          $req3 = mysql_query('SELECT nom FROM membres WHERE nom = "'.$nom.'"');
          $rep3 = mysql_fetch_array($req3);
          if (!isset($rep3['nom'])) {
            $register = mysql_query('INSERT INTO membres VALUES("","'.$pseudo.'","'.$email.'","'.$pass1.'","'.$nom.'","'.$prenom.'","'.$birth.'","0","")');
            ?>

            <div class="container">
              <div class="row">
                <div class="alert alert-dismissible alert-success">
                  <button type="button" class="close" data-dismiss="alert">×</button>
                  <h4>Félicitation!</h4>
                  <p>Votre compté est maintenant crée !</p>
                  <br/>
                  <a href="connect.php" class="btn btn-info">Connection</a>
                </div>
              </div>
            </div>

            <?php
          } else {
            $error_nom = 1;
            $error = 'Ce nom est déjà enregistré';
          }
        } else {
          $error_email = 1;
          $error = 'Cet email est déjà enregistré';
        }
      } else {
        $error_pseudo = 1;
        $error = 'Le pseudo est déjà enregistré.';
      }

    } else {
      $error_pass = 1;
      $error = 'Les mots de passe sont différents';
    }

  } else {
    $error_all = 1;
    $error = 'Veuillez remplir tout les champs.';
  }
}



Merci d'avance pour votre aide.

Alexandre
A voir également:

3 réponses

miramaze Messages postés 1429 Date d'inscription   Statut Contributeur Dernière intervention   92
 
Hello,
tu devrais réécrire ton code déjà, les if-else imbriqués, c'est pas bon. Pareil pour le énorme if avec les empty et isset qui peut-être réécris avec un foreach pour améliorer la lisibilité et éviter de se répéter.
0
Madriax Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour Miramaze,

Merci pour votre réponse, je sais que mon code est assez illisible, mais je ne suis pas encore un expert en PHP :/
Et merci pour vos conseil :-)
0
nichola Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   11
 
Salut,

C'est probablement dû au fait que ta requête provoque une erreur.

Exécute ta requête de la manière suivante pour voir :

$req1 = mysql_query('SELECT pseudo FROM membres WHERE pseudo = "'.$pseudo.'"') or die("ERREUR SQL !!!<br/>".mysql_error());
0
nichola Messages postés 111 Date d'inscription   Statut Membre Dernière intervention   11
 
J'ai fais un exemple avec la première requête, mais en gros faudrait le faire a chaque requête pour voir précisément d'où vient le problème
0
Madriax Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour nichola,
J'ai rajouté ça après toutes mes requêtes, et cela me signale que je n'ai pas sélectionné de base de données. Pourtant, et j'ai encore vérifié, c'est fait..
 mysql_select_db('madriaxf_bdd'); 
0
NHenry Messages postés 15221 Date d'inscription   Statut Modérateur Dernière intervention   366
 
Pour commencer :
Petit rappel, l'extension mysql est obsolète


Le message indique que tu as une erreur dans ta requête SQL.

Il est d'usage lors d'un INSERT INTO de préciser les champs concernés par l'ajout, cela permet de lire plus facilement la requête et d'éviter les problèmes d'inversion de champs.
Aussi, les champs numériques n'ont pas besoin de " pour délimiter leur valeur.
Précision, les champs auto-incrémentés n'ont pas à être assignés dans un INSERT INTO, MySql s'en charge tout seul.
0
Madriax Messages postés 96 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour NHenry,

Merci pour le partage de cet article, je comprends donc mieux pourquoi ma connexion à la base de donnée ne marche donc pas.
Merci aussi pour toutes ces précisions ! Je vais donc retirer les "" pour les champs numériques.
Et je suis déjà au courant que les champs auto-incrémentés n'ont pas à être assignés.

Je pense donc me tourner vers PDO afin de résoudre mes problèmes.

Cordialement,
0