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

Résolu
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

3 réponses

  1. Contributeur
    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
    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
  2. 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
    1. 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
    2. 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
  3. Modérateur
    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
    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