Probleme "!empty($_POST"

Eléphanteau du PHP | 19 Messages

18 oct. 2010, 20:20

Bonjour à tous,

J'ai créé un formulaire de recherche avec les champs "N° licence" et "nom joueur" ... je récupère donc "$_POST['nom_joueur']" ou $_POST['licence']

Mon problème c'est que lorsque rien n'est indiqué dans les champs, tous les joueurs sont listés #-o ce qui génère un temps de chargement de la page important sans intérêt...

Voici mon code :

Code : Tout sélectionner

mysql_query("SET NAMES 'utf8'"); $sql = 'SELECT joueur.id_joueur, joueur.nom, joueur.prenom, joueur.date_naiss, joueur.rang, ' .'joueur.div_N, equipe.label_equipe, association.label_asso ' .'FROM association JOIN etablissement ON association.id_asso = etablissement.id_asso ' .'JOIN equipe ON etablissement.id_etabl = equipe.id_etabl ' .'JOIN joueur ON equipe.id_equipe = joueur.id_equipe ' .'WHERE div_N <> "" '; if(isset($_POST['nom_joueur']) && !empty($_POST['nom_joueur'])) { $sql = $sql.'AND joueur.nom = "'.quote_smart($_POST['nom_joueur']).'" '; } if(isset($_POST['licence']) && !empty($_POST['licence'])) { $sql = $sql.'AND joueur.id_joueur = "'.quote_smart($_POST['licence']).'" '; } $req_joueur = mysql_query($sql) or die('Erreur SQL !<br />'.$req_joueur.'<br />'.mysql_error()); if(($data = mysql_fetch_array($req_joueur)) != NULL) { echo '<table bgcolor="#FFFFFF" width="650px">'."\n"; echo '<tr height="25" id="legend">'; echo '<td align="center" class="Style2"><b>Nom</b></td>'; echo '<td align="center" class="Style2"><b>Pr&eacute;nom</b></td>'; echo '<td align="center" class="Style2"><b>Equipe</b></td>'; echo '<td align="center" class="Style2"><b>Division</b></td>' ; echo '<td align="center" class="Style2"><b>N&deg; licence</b></td>' ; echo '<td align="center" class="Style2"><b>Rang</b></td>'; echo '<td align="center" class="Style2"><b>Association</b></td>'; echo '</tr>'."\n"; do { echo '<tr>'; echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['nom'].'</td>'; echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['prenom'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_equipe'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['div_N'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['id_joueur'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['rang'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_asso'].'</td>'; echo '</tr>'."\n"; }while(($data = mysql_fetch_array($req_joueur)) != NULL); echo '</table>'."\n"; ?> <br /> <?php } else { } $sql = 'SELECT joueur.id_joueur, joueur.nom, joueur.prenom, joueur.date_naiss, joueur.rang, ' .'joueur.div_N, etablissement.label_etabl, association.label_asso ' .'FROM joueur JOIN espoir ON joueur.id_espoir = espoir.id_espoir ' .'JOIN etablissement ON etablissement.id_etabl = espoir.id_etabl ' .'JOIN association ON association.id_asso = etablissement.id_asso ' .'WHERE joueur.div_N <> "" '; if(isset($_POST['nom_joueur']) && !empty($_POST['nom_joueur'])) { $sql = $sql.'AND joueur.nom = "'.quote_smart($_POST['nom_joueur']).'" '; } if(isset($_POST['licence']) && !empty($_POST['licence'])) { $sql = $sql.'AND joueur.id_joueur = "'.quote_smart($_POST['licence']).'" '; } $req_esp = mysql_query($sql) or die('Erreur SQL !<br />'.$req_esp.'<br />'.mysql_error()); if(($data = mysql_fetch_array($req_esp)) != NULL) { echo '<table bgcolor="#FFFFFF" width="650px">'."\n"; echo '<tr height="25" id="legend">'; echo '<td align="center" class="Style2"><b>Nom</b></td>'; echo '<td align="center" class="Style2"><b>Pr&eacute;nom</b></td>'; echo '<td align="center" class="Style2"><b>Etablissement</b></td>'; echo '<td align="center" class="Style2"><b>Division</b></td>' ; echo '<td align="center" class="Style2"><b>N&deg; licence</b></td>' ; echo '<td align="center" class="Style2"><b>Rang</b></td>'; echo '<td align="center" class="Style2"><b>Association</b></td>'; echo '</tr>'."\n"; do { echo '<tr>'; echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['nom'].'</td>'; echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['prenom'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_etabl'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['div_N'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['id_joueur'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['rang'].'</td>'; echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_asso'].'</td>'; echo '</tr>'."\n"; }while(($data = mysql_fetch_array($req_esp)) != NULL); echo '</table>'."\n"; } elseif(($data = mysql_fetch_array($req_joueur)) != NULL) { echo "<p>Aucun r&eacute;sultat ne correspond &agrave; votre recherche.</p>"; } elseif(($data = mysql_fetch_array($req_esp)) != NULL) { echo "<p>Aucun r&eacute;sultat ne correspond &agrave; votre recherche dans les joueurs Espoirs.</p>"; } ?>
Merci d'avance pour votre aide.

ViPHP
xTG
ViPHP | 7331 Messages

18 oct. 2010, 21:28

Quelle est la question ?

Au passage :
if(isset($_POST['nom_joueur']) && !empty($_POST['nom_joueur'])) 
C'est la même chose que :
if(!empty($_POST['nom_joueur'])) 

Eléphanteau du PHP | 19 Messages

19 oct. 2010, 07:54

La question c'est pourquoi la requête s'effectue alors que les champs de recherche restent vide ...

Si l'utilisateur ne rentre rein et clic sur "envoyer" la page générée affiche tous les joueurs (elle liste tous les joueurs ~ 30000 !).

ViPHP
xTG
ViPHP | 7331 Messages

19 oct. 2010, 08:36

Si la clause where est vide ta requête renvoie tous les enregistrements de la table.
Tu devrais mettre en place un système de pagination pour résoudre ton problème.

Eléphanteau du PHP | 19 Messages

19 oct. 2010, 08:43

Un système de pagination ? pour avoir l'affichage des données sur plusieurs pages ??
En fait moi j'aimerai plutôt que rien ne s'affiche si les champs sont vides ...

Y'a t-il un moyen pour que la requête n'ai lieu QUE si le/les champs soient remplis ? ou faut-il que je n'ai qu'un seul choix ? (numéro de licence OU nom joueur)

Eléphanteau du PHP | 19 Messages

19 oct. 2010, 11:12

Bon finalement j'ai tout englobé dans :
if(empty($_POST['nom_joueur']) AND empty($_POST['licence'])) 
{
    echo "<p>Vous n'avez pas indiqu&eacute; de nom ou de num&eacute;ro de licence.</p>";
    exit();
}
else 
{
...et ça fonctionne now =D>

ViPHP
ViPHP | 5462 Messages

19 oct. 2010, 11:14

pourquoi tu fais des &eacute; ?

Eléphanteau du PHP | 19 Messages

19 oct. 2010, 11:24

sinon j'ai des problèmes d'accents !

L'affichage se fait au sein d'un CMS Joomla, et sans ça il remplace les accents par des ?

Une autre méthode ?

ViPHP
ViPHP | 5462 Messages

19 oct. 2010, 11:36

oui écrire é tout simplement et bien mettre t'es entête et ton encodage de fichier

faq-tutoriels/encodage-utf-t245062.html

Eléphanteau du PHP | 19 Messages

20 oct. 2010, 13:18

Re Bonjour,

J'ai encore un problème ... :roll:

Je souhaiterai que si les deux requêtes sont NULL alors affichage de :
"Aucunes données ne correspondent à votre recherche"

reprenons ...

Un champ "nom" et un champ "licence", si les deux champs sont vident alors -> vu plus haut ça c'est bon :lol:
si un champ est rempli alors recherche du/des Joueur(s) adulte(s) dont le nom ou le n° de licence correspond
sinon recherche du/des joueurs Espoirs dont le nom ou le n° de licence correspond ...

Voici ce qui se passe actuellement :

Ex : recherche de "dupond"
1 joueur adulte correspond et s'affiche
2 joueurs espoirs correspondent et s'affichent
-> la phrase ne s'affiche pas = OK

Ex : recherche de "dubois"
3 joueurs espoirs correspondent et s'affichent
-> la phrase ne s'affiche pas = OK

Ex : recherche de "zxwsyjm"
Aucun joueur ne correspond
-> la phrase s'affiche = OK

Ex : recherche de "martin"
6 joueurs adultes correspondent et s'affichent
-> la phrase s'affiche :|


Je remet le code ci-après (quelque peu modifié après plusieurs tentatives ...) :
<?php

mysql_query("SET NAMES 'utf8'");

if(empty($_POST['nom_joueur']) AND empty($_POST['licence'])) 
{
    echo "<div align='center'><h2>Vous n'avez pas rien indiqu&eacute;...</h2></div>";
    echo "<script type='text/javascript'>window.setTimeout('window.history.back(1);',900);</script>" ;
    exit();
}
else 
{

// on recherche parmis les joueurs licenciés
$sql = 'SELECT joueur.id_joueur, joueur.nom, joueur.prenom, joueur.date_naiss, joueur.rang, '
        .'joueur.div_N, equipe.label_equipe, association.label_asso '
        .'FROM association JOIN etablissement ON association.id_asso = etablissement.id_asso '
        .'JOIN equipe ON etablissement.id_etabl = equipe.id_etabl '
        .'JOIN joueur ON equipe.id_equipe = joueur.id_equipe '
        .'WHERE div_N <> "" ';
        
if(isset($_POST['nom_joueur']) && !empty($_POST['nom_joueur'])) 
{
    $sql = $sql.'AND joueur.nom = "'.quote_smart($_POST['nom_joueur']).'" ';
}

if(isset($_POST['licence']) && !empty($_POST['licence'])) 
{
    $sql = $sql.'AND joueur.id_joueur = "'.quote_smart($_POST['licence']).'" ';
}

$req_joueur = mysql_query($sql) or die('Erreur SQL !<br />'.$req_joueur.'<br />'.mysql_error());

if(($data = mysql_fetch_array($req_joueur)) != NULL)
{        
        echo '<table bgcolor="#FFFFFF" width="650px">'."\n";
           echo '<tr height="25" id="legend">';
           echo '<td align="center" class="Style2"><b>Nom</b></td>';
           echo '<td align="center" class="Style2"><b>Pr&eacute;nom</b></td>';
           echo '<td align="center" class="Style2"><b>Equipe</b></td>';
           echo '<td align="center" class="Style2"><b>Division</b></td>' ;
        echo '<td align="center" class="Style2"><b>N&deg; licence</b></td>' ;
        echo '<td align="center" class="Style2"><b>Rang</b></td>';
        echo '<td align="center" class="Style2"><b>Association</b></td>';
           echo '</tr>'."\n";
    do
    {
        echo '<tr>';
         echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['nom'].'</td>';
          echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['prenom'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_equipe'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['div_N'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['id_joueur'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['rang'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_asso'].'</td>';
          echo '</tr>'."\n";

    }while(($data = mysql_fetch_array($req_joueur)) != NULL);

    echo '</table><br />'."\n";
}

// on recherche les espoirs licencies
$sql = 'SELECT joueur.id_joueur, joueur.nom, joueur.prenom, joueur.date_naiss, joueur.rang, '
        .'joueur.div_N, etablissement.label_etabl, association.label_asso '
        .'FROM joueur JOIN espoir ON joueur.id_espoir = espoir.id_espoir '
        .'JOIN etablissement ON etablissement.id_etabl = espoir.id_etabl '
        .'JOIN association ON association.id_asso = etablissement.id_asso '        
        .'WHERE joueur.div_N <> "" ';

if(isset($_POST['nom_joueur']) && !empty($_POST['nom_joueur'])) 
{
    $sql = $sql.'AND joueur.nom = "'.quote_smart($_POST['nom_joueur']).'" ';
}

if(isset($_POST['licence']) && !empty($_POST['licence'])) 
{
    $sql = $sql.'AND joueur.id_joueur = "'.quote_smart($_POST['licence']).'" ';
}


$req_esp = mysql_query($sql) or die('Erreur SQL !<br />'.$req_esp.'<br />'.mysql_error());
if(($data = mysql_fetch_array($req_esp)) != NULL)
{
        echo '<table bgcolor="#FFFFFF" width="650px">'."\n";
           echo '<tr height="25" id="legend">';
           echo '<td align="center" class="Style2"><b>Nom</b></td>';
           echo '<td align="center" class="Style2"><b>Pr&eacute;nom</b></td>';
           echo '<td align="center" class="Style2"><b>Etablissement</b></td>';
           echo '<td align="center" class="Style2"><b>Division</b></td>' ;
        echo '<td align="center" class="Style2"><b>N&deg; licence</b></td>' ;
        echo '<td align="center" class="Style2"><b>Rang</b></td>';
        echo '<td align="center" class="Style2"><b>Association</b></td>';
           echo '</tr>'."\n";
    do
    {
        echo '<tr>';
         echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['nom'].'</td>';
          echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['prenom'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_etabl'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['div_N'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['id_joueur'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['rang'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_asso'].'</td>';
          echo '</tr>'."\n";

    }while(($data = mysql_fetch_array($req_esp)) != NULL);

    echo '</table>'."\n";

}
else{

    echo "<p>Aucun r&eacute;sultat ne correspond &agrave; votre recherche.</p>";
}
    exit();
}
?>
D'avance merci pour vos conseils

ViPHP
xTG
ViPHP | 7331 Messages

20 oct. 2010, 13:46

Une simple utilisation de mysql_num_rows devrait faire l'affaire. :)

Eléphanteau du PHP | 19 Messages

20 oct. 2010, 14:42

manifestement je ne dois pas bien m'y prendre :
<?php

mysql_query("SET NAMES 'utf8'");

if(empty($_POST['nom_joueur']) AND empty($_POST['licence'])) 
{
    echo "<div align='center'><h2>Vous n'avez pas rien indiqu&eacute;...</h2></div>";
    echo "<script type='text/javascript'>window.setTimeout('window.history.back(1);',900);</script>" ;
    exit();
}
else 
{

// on recherche parmis les joueurs licenciés
$sql = 'SELECT joueur.id_joueur, joueur.nom, joueur.prenom, joueur.date_naiss, joueur.rang, '
        .'joueur.div_N, equipe.label_equipe, association.label_asso '
        .'FROM association JOIN etablissement ON association.id_asso = etablissement.id_asso '
        .'JOIN equipe ON etablissement.id_etabl = equipe.id_etabl '
        .'JOIN joueur ON equipe.id_equipe = joueur.id_equipe '
        .'WHERE div_N <> "" ';
        
if(isset($_POST['nom_joueur']) && !empty($_POST['nom_joueur'])) 
{
    $sql = $sql.'AND joueur.nom = "'.quote_smart($_POST['nom_joueur']).'" ';
}

if(isset($_POST['licence']) && !empty($_POST['licence'])) 
{
    $sql = $sql.'AND joueur.id_joueur = "'.quote_smart($_POST['licence']).'" ';
}

$req_joueur = mysql_query($sql) or die('Erreur SQL !<br />'.$req_joueur.'<br />'.mysql_error());

if(($data = mysql_fetch_array($req_joueur)) != NULL)
{        
        echo '<table bgcolor="#FFFFFF" width="650px">'."\n";
           echo '<tr height="25" id="legend">';
           echo '<td align="center" class="Style2"><b>Nom</b></td>';
           echo '<td align="center" class="Style2"><b>Pr&eacute;nom</b></td>';
           echo '<td align="center" class="Style2"><b>Equipe</b></td>';
           echo '<td align="center" class="Style2"><b>Division</b></td>' ;
        echo '<td align="center" class="Style2"><b>N&deg; licence</b></td>' ;
        echo '<td align="center" class="Style2"><b>Rang</b></td>';
        echo '<td align="center" class="Style2"><b>Association</b></td>';
           echo '</tr>'."\n";
    do
    {
        echo '<tr>';
         echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['nom'].'</td>';
          echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['prenom'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_equipe'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['div_N'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['id_joueur'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['rang'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_asso'].'</td>';
          echo '</tr>'."\n";

    }while(($data = mysql_fetch_array($req_joueur)) != NULL);

    echo '</table><br />'."\n";
}

// on recherche les espoirs licencies
$sql = 'SELECT joueur.id_joueur, joueur.nom, joueur.prenom, joueur.date_naiss, joueur.rang, '
        .'joueur.div_N, etablissement.label_etabl, association.label_asso '
        .'FROM joueur JOIN espoir ON joueur.id_espoir = espoir.id_espoir '
        .'JOIN etablissement ON etablissement.id_etabl = espoir.id_etabl '
        .'JOIN association ON association.id_asso = etablissement.id_asso '        
        .'WHERE joueur.div_N <> "" ';

if(isset($_POST['nom_joueur']) && !empty($_POST['nom_joueur'])) 
{
    $sql = $sql.'AND joueur.nom = "'.quote_smart($_POST['nom_joueur']).'" ';
}

if(isset($_POST['licence']) && !empty($_POST['licence'])) 
{
    $sql = $sql.'AND joueur.id_joueur = "'.quote_smart($_POST['licence']).'" ';
}


$req_esp = mysql_query($sql) or die('Erreur SQL !<br />'.$req_esp.'<br />'.mysql_error());
if(($data = mysql_fetch_array($req_esp)) != NULL)
{
        echo '<table bgcolor="#FFFFFF" width="650px">'."\n";
           echo '<tr height="25" id="legend">';
           echo '<td align="center" class="Style2"><b>Nom</b></td>';
           echo '<td align="center" class="Style2"><b>Pr&eacute;nom</b></td>';
           echo '<td align="center" class="Style2"><b>Etablissement</b></td>';
           echo '<td align="center" class="Style2"><b>Division</b></td>' ;
        echo '<td align="center" class="Style2"><b>N&deg; licence</b></td>' ;
        echo '<td align="center" class="Style2"><b>Rang</b></td>';
        echo '<td align="center" class="Style2"><b>Association</b></td>';
           echo '</tr>'."\n";
    do
    {
        echo '<tr>';
         echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['nom'].'</td>';
          echo '<td bgcolor="#f3fbff" class="Style1" height="25">&nbsp;'.$data['prenom'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_etabl'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['div_N'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['id_joueur'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['rang'].'</td>';
          echo '<td bgcolor="#f3fbff" align="center" class="Style1" height="25">'.$data['label_asso'].'</td>';
          echo '</tr>'."\n";

    }while(($data = mysql_fetch_array($req_esp)) != NULL);

    echo '</table>'."\n";
$nbr_joueur = mysql_num_rows($req_joueur);
$nbr_espoir = mysql_num_rows($req_esp);
}
elseif(($nbr_joueur > 0) && ($nbr_espoir == 0))
      {
              echo "<div align='center'><h2>Aucun r&eacute;sultat ne correspond &agrave; votre recherche dans les Espoirs.</h2></div>";
      }
elseif(($nbr_joueur == 0) && ($nbr_espoir > 0))
      {
              echo "<div align='center'><h2>Aucun r&eacute;sultat ne correspond &agrave; votre recherche dans les joueurs.</h2></div>";
      }
elseif(($nbr_joueur == 0) && ($nbr_espoir == 0))
      {
              echo "<div align='center'><h2>Aucun r&eacute;sultat ne correspond &agrave; votre recherche.</h2></div>";
      }
    exit();
}
?>
...toujours l'affichage de la phrase "Aucun résultats..." alors qu'il trouve bien des joueurs :priere:

ViPHP
xTG
ViPHP | 7331 Messages

20 oct. 2010, 17:25

Un petit algo pour comprendre :

Code : Tout sélectionner

mysql_query() Si mysql_num_rows > 0 Alors Faire Tant que data = mysql_fetch_array afficher data Fin Tant que Sinon Afficher "Aucun résultat" Fin Si
Cela t'en dit-il plus sur la façon de l'utiliser ?

Eléphanteau du PHP | 19 Messages

20 oct. 2010, 18:46

Merci ça fonctionne !

Petite question toutefois ...

J'ai remplacé (avant de faire marche arrière, puisque ça fonctionne :shock: ) :
if(($data = mysql_fetch_array($req_esp)) != NULL)
{
        echo '<table bgcolor="#FFFFFF" width="650px">'."\n";
        echo '<tr height="25" id="legend">';
...
Par :
if(mysql_num_rows($req_joueur) > 0)
{
        echo '<table bgcolor="#FFFFFF" width="650px">'."\n";
           echo '<tr height="25" id="legend">';
...
Ça fonctionne également sauf qu'une première ligne dans le tableau apparait sans données ... pourquoi ? :roll:

ViPHP
xTG
ViPHP | 7331 Messages

20 oct. 2010, 18:55

Changes tes do...while() par des while() ;)