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

Résolu/Fermé
Madriax Messages postés 96 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 7 août 2016 - Modifié par NHenry le 18/07/2015 à 20:13
Madriax Messages postés 96 Date d'inscription dimanche 23 mars 2014 Statut Membre Dernière intervention 7 août 2016 - 19 juil. 2015 à 00:23
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 mercredi 29 juillet 2009 Statut Contributeur Dernière intervention 1 mai 2022 92
18 juil. 2015 à 20:13
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 dimanche 23 mars 2014 Statut Membre Dernière intervention 7 août 2016 1
19 juil. 2015 à 00:15
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 jeudi 7 juin 2007 Statut Membre Dernière intervention 24 avril 2016 11
18 juil. 2015 à 20:14
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 jeudi 7 juin 2007 Statut Membre Dernière intervention 24 avril 2016 11
18 juil. 2015 à 20:16
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 dimanche 23 mars 2014 Statut Membre Dernière intervention 7 août 2016 1
19 juil. 2015 à 00:18
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 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
18 juil. 2015 à 20:16
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 dimanche 23 mars 2014 Statut Membre Dernière intervention 7 août 2016 1
19 juil. 2015 à 00:23
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