Signaler

[php] la page n'affiche rien [Fermé]

Posez votre question fabrice11901 790Messages postés dimanche 31 juillet 2005Date d'inscription 12 juillet 2007 Dernière intervention - Dernière réponse le 12 juin 2006 à 11:51 par Thom@s
Bonjour
J'ai fais un script permettant de cherchant dans la base de donnée une info taper par le visiteur grace à un formulaire html.
Cette page php qui récupère le $_post, et qui fais la recherche dans la bdd doit envoyer comme résultat : pas bon ou elle existe. Mais quand je cherche depuis le formulaire un mot rien ne s'affiche dans la page même pas un parce erreor rien du tout. PS : pour l'instant je n'ai rien dans la table sql ça devrait quand même m'afficher le message "pas bon"?
voici le code :

<? $entreprise=$_POST['entreprise']; ?>

<? $dbc = @mysql_connect ("localhost", "zone_zone", "****");

if(!mysql_errno($dbc)) {
  mysql_select_db("zone_bdd");

$query = "
SELECT * FROM telephonie WHERE
entreprise='$entreprise'";
$result = mysql_query($query);
while ($donnees = mysql_fetch_array($result) )
if(mysql_num_rows($result)==0)
	{
echo 'pas bon';} else{     echo 'elle existe';} } mysql_close(); ?>

merci de m'aider
Utile
+0
plus moins
Salut !

Essaie peut-être comme ça :
<? $entreprise=$_POST['entreprise']; ?>

<?
$dbc = @mysql_connect ("localhost", "zone_zone", "****");

if(!mysql_errno($dbc)) {
      mysql_select_db("zone_bdd");

      $query = "SELECT * FROM telephonie WHERE".
      "entreprise='$entreprise'";
      $result = mysql_query($query);
      while ($donnees = mysql_fetch_array($result) ) {
            // boucle vide ?
      }
      if(mysql_num_rows($result)==0) {
            echo 'pas bon';
      }
      else {
            echo 'elle existe';
      }
}
mysql_close();
?>

Si ça marche, c'est que ça venait du fait que le if(mysql_num_rows... était inclus dans le while.
Or comme il n'y avait aucun résultat, le while ne n'exécutait pas, donc le if non plus (car inclus dans le while), et le else non plus (car lié au if, donc inclus dans le while aussi :-)

A+ :)
Utile
+0
plus moins
salut
merci
en fait ça marche car j'avais pas mi d'infos dans la table mais :
si une entreprise est présente, j'ai bien "elle existe" mais si le nom taper dans le formulaire n'existe pas dans la bdd, le script ne m'affiche rien? est-ce que ça vient toujours du {} dans while?
merci
Thom@s 3434Messages postés mardi 4 mars 2003Date d'inscription ModérateurStatut 27 août 2010 Dernière intervention - 10 juin 2006 à 11:55
Re,

est-ce que ça vient toujours du {} dans while?
Ben oui, c'est ce que je dis à la fin de mon message précédent :)

Si tu laisses le code comme il était :
- Si l'entreprise est présente dans la base, ça marche, parce que le while s'exécute, et donc le couple if/else (qui est inclus dans le while) s'exécute aussi.
- Mais si l'entreprise n'existe pas, le while ne s'exécute pas, et donc le couple il/else (qui est inclus dans le while) ne s'exécute pas non plus.

Il faut donc que le while d'une part, et le if/else d'autre part, soient clairement indépendants et séparés, et pour ça, il est préférable d'utiliser des accolades.

En règle générale, il vaut mieux mettre toujours des accolades pour toutes les structures (if, while, etc...), sans quoi le code risque d'être, comme ici, mal interprété :-)

Au fait, as-tu essayé avec le code que je t'ai donné ?
Normalement, ça devrait marcher (même dans le cas où l'entreprise recherchée n'est pas présente dans la base).

A+ :)
Utile
+0
plus moins
re
maintenant avec les {} c'est l'inverse ! quand l'entreprise existe, on ne voit pas les résultats et quand l'entreprise n'existe pas on voit bien le message d'erreur !
code actuel :
<? $entreprise=$_POST['entreprise']; ?>

<? $dbc = @mysql_connect ("localhost", "zone_zone", "****");

if(!mysql_errno($dbc)) {
  mysql_select_db("zone_bdd");

$query = "
SELECT * FROM telephonie WHERE
entreprise='$entreprise'";
$result = mysql_query($query);
while ($donnees = mysql_fetch_array($result) ){ }

if(mysql_num_rows($result)==0)
	{?> <html> Cette entreprise n'existe pas </html> <?
} else{?> <html><table><tr><td>  <br> Voici les résultats trouvés : <br> Entreprise :<? echo $donnees['entreprise'];?> <br> Numero non surtaxé :<?echo $donnees['numero1'];?> <br> Numero surtaxé :<? echo $donnees['numero2'];?> <br> Description :<? echo $donnees['description'];?> </td> </tr> </table></html> <?     } } mysql_close(); ?>

Thom@s 3434Messages postés mardi 4 mars 2003Date d'inscription ModérateurStatut 27 août 2010 Dernière intervention - 10 juin 2006 à 13:06
Salut !

Je ne sais pas si ça vient de là, mais on ne sait jamais ;-)

1°) Le requête, je l'écrirais plutôt comme ça :
$query = "SELECT * FROM telephonie WHERE entreprise='$entreprise'";
(sans retour à la ligne)

2°) Pour les tests, je ferais l'inverse :
if (mysql_num_rows($result)>0) {
     echo "L'entreprise existe";
}
else {
     echo "L'entreprise n'existe pas";
}

Si ça ne marche toujours pas, j'essaierai de tester le code, pour tenter de voir d'où vient le problème :)

A+ :)
Utile
+0
plus moins
re
j'ai fais comme tu m'as dis mais :
j'ai remplacer ==0 par >0 et :
si je met des echo dans le if et dans le else, j'ai le bon message l'ors de la demande d'entreprise mais moi mon script doit faire :
si il trouve l'entreprise, il affiche : entreprise , numero non surtaxé, numero surtaxé, description. Mais comme ça, il ne me met pas les résultats de mysql tu comprend?
avec le code ci-dessous si l'entreprise est présente, il ne me met pas les résultats de mysql mais sinon il met bien les messages d'erreurs, si l'entreprise n'existe pas peux-tu me corriger ça?
merci
<? $entreprise=$_POST['entreprise']; ?>

<? $dbc = @mysql_connect ("localhost", "zone_zone", "*****");

if(!mysql_errno($dbc)) {
  mysql_select_db("zone_bdd");

$query = "SELECT * FROM telephonie WHERE entreprise='$entreprise'";
$result = mysql_query($query);
while ($donnees = mysql_fetch_array($result) ){ } 

if(mysql_num_rows($result)>0)
	{?> <html> Entreprise :<? echo $donnees['entreprise'];?> <br> Numéro non surtaxé :<? 

echo $donnees['numero1'];?> <br> Numéro surtaxé :<? echo $donnees['numero2'];?> <br> Description :<? echo 

$donnees['description'];?> <br> </html> <?
} else{?> <html> Désolé, mais aucun numéros non surtaxés, n'est présent 

dans la base de donnée pour cette entreprise </html> <?  } } mysql_close();?> 

Utile
+0
plus moins
salut
alors tu trouve quelque chose?
merci
Utile
+0
plus moins
Re,

Normalement, ça devrait marcher comme ça :
<? $entreprise=$_POST['entreprise']; ?>

<? $dbc = @mysql_connect ("localhost", "zone_zone", "*****");

if(!mysql_errno($dbc)) {
  mysql_select_db("zone_bdd");

  $query = "SELECT * FROM telephonie WHERE entreprise='$entreprise'";
  $result = mysql_query($query);

  if(mysql_num_rows($result)>0) {
    while ($donnees = mysql_fetch_array($result) ){ 
      echo '<html> Entreprise :'.$donnees['entreprise'].'<br>
      Numéro non surtaxé :'.$donnees['numero1'].'<br>
      Numéro surtaxé :'.$donnees['numero2'].'<br>
      Description :'.$donnees['description'].'<br> </html>';
    }
  }
  else {
      echo '<html> Désolé, mais aucun numéros non surtaxés, n\'est présent
      dans la base de donnée pour cette entreprise </html>';
  } 
} 

mysql_close();
?>

• Notes :
- Le while doit donc être inclus dans le if(num>0),
- Les instructions d'affichage (le code qui sert à afficher les informations) doivent absolument être dans le while.
- Plutôt que de fermer/ouvrir tout le temps la balise <? ?>, il est préférable, lorsque le texte affiché n'est pas très long, comme ici, d'utiliser echo 'mon texte'.$ma_variable.'mon texte suite';

A+ :)
Utile
+0
plus moins
Salut
C'est bon ça marche !
Effectivement j'avais pas pensé à mettre le if au-dessus de while !
merci beaucoup !
Fabrice
Thom@s 3434Messages postés mardi 4 mars 2003Date d'inscription ModérateurStatut 27 août 2010 Dernière intervention - 12 juin 2006 à 11:51
De rien ;-)

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !