Php site perso chez free; pb accès à la BD

Résolu
letyz12 -  
 letyz12 -
Bonjour,

Je renouvelle ma demande d'aide :

J'ai réalisé un petit site perso que j'ai mis en ligne chez free : transfert de mes fichiers (via filezilla), transfert également de ma BD; Tout à l'air ok.

La page d'accueil se charge bien; des liens également de page à page se font bien.
Mais ya un bug dès qu'il y a appel à la BD, du moins lorsqu'il y a lecture de résultats après exécution de requetes.
Mais c'est bizarre car cela le fait pas pour tout les appels à la BD, dans certains cas cela marche.

voici des messages d'erreur reçus :

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /mnt/102/sdb/c/4/letyz12/vis/vis_resultat.php on line 32

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /mnt/102/sdb/c/4/letyz12/vis/vis_resultat.php on line 44

Et voici mon code correspondant :

//aucune critère spécifié, on affiche donc tous les restaurants de la base de données

$select="SELECT count(nom) FROM restaurants";
$result = mysql_query($select);
$row = mysql_fetch_row($result);
$nb = $row[0];

$rqt = "SELECT nom, adresse, telephone, site_web, nom_image, commentaires, cuisine, prix, avis_fav, avis_defav FROM restaurants ORDER BY nom";
$exec = mysql_query($rqt);

if ($nb=='0') { echo "<center><h2>Aucun restaurant n'a été trouvé</h2></center>";}
if ($nb=='1'){ echo "<center><h2>$nb restaurant a été trouvé</h2></center>"; }
if ($nb>='2') { echo "<center><h2>$nb restaurants ont été trouvés</h2></center>"; }

echo "<table>";

while ($courant=mysql_fetch_object($exec)){
$total_avis = $courant->avis_fav+$courant->avis_defav;
echo "<tr><td><img src=../images/$courant->nom_image></td><td><b>$courant->nom</b> - $courant->adresse<br>$courant->telephone - $courant->site_web<br>Type : $courant->cuisine - Fourchette prix : $courant->prix<br>$courant->commentaires<br><br><font color='blue'>$total_avis avis déposé(s)<br>$courant->avis_fav avis favorable(s) et $courant->avis_defav avis défavorable(s)</font></td><td>Appréciez-vous ce restaurant?<br><form name=rep method=post action=val_avis.php>
<input type=\"hidden\" value=\"$courant->nom\" name=\"nom\">
<p>
<label>
<input type=radio name=rep value=OUI>
OUI</label>
<br>
<label>
<input type=radio name=rep value=NON>
NON</label>
<br>
</p>
<input type=submit value=VOTER>
</form></td></tr>"; }
echo "</table>";
}


Merci.
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. Apaachee Messages postés 261 Statut Membre 47
     
    Pour commencer, met ton code entre balises , ca simplifie la lecture.
    Ensuite,

    $select="SELECT count(nom) FROM restaurants";
    $result = mysql_query($select);
    $row = mysql_fetch_row($result);
    $nb = $row[0]; 
    


    Ton code est entier ? Si oui, il faut dabord que tu te connectes à ta BD.
    0
    1. letyz12
       
      Pardon, oui je me connecte bien à ma base de données.


      voici une partie du code avec en gras les lignes ou ça plante :

      <?php session_start(); ?>
      <html>
      <head>
      <title>Recherche</title>
      <link href="style.css" rel="stylesheet" type="text/css">
      </head>
      <body>
      <hr>
      <center>
        <h1>Espace Visiteur : R&eacute;sultat de la recherche</h1>
      </center>
      <hr>
      
      <?php
      require("../connecter.php");
      
      //aucune critère spécifié, on affiche donc tous les restaurants de la base de données 
      
      $select="SELECT count(nom) FROM restaurants"; 
      $result = mysql_query($select); 
      $row = mysql_fetch_row($result); 
      $nb = $row[0]; 
      
      $rqt = "SELECT nom, adresse, telephone, site_web, nom_image, commentaires, cuisine, prix, avis_fav, avis_defav FROM restaurants ORDER BY nom"; 
      $exec = mysql_query($rqt); 
      
      if ($nb=='0') { echo "<center><h2>Aucun restaurant n'a été trouvé</h2></center>";} 
      if ($nb=='1'){ echo "<center><h2>$nb restaurant a été trouvé</h2></center>"; } 
      if ($nb>='2') { echo "<center><h2>$nb restaurants ont été trouvés</h2></center>"; } 
      
      echo "<table>"; 
      
      while ($courant=mysql_fetch_object($exec)){ 
      $total_avis = $courant->avis_fav+$courant->avis_defav; 
      echo "<tr><td><img src=../images/$courant->nom_image></td><td><b>$courant->nom</b> - $courant->adresse<br>$courant->telephone - $courant->site_web<br>Type : $courant->cuisine - Fourchette prix : $courant->prix<br>$courant->commentaires<br><br><font color='blue'>$total_avis avis déposé(s)<br>$courant->avis_fav avis favorable(s) et $courant->avis_defav avis défavorable(s)</font></td><td>Appréciez-vous ce restaurant?<br><form name=rep method=post action=val_avis.php> 
      <input type=\"hidden\" value=\"$courant->nom\" name=\"nom\"> 
      <p> 
      <label> 
      <input type=radio name=rep value=OUI> 
      OUI</label> 
      <br> 
      <label> 
      <input type=radio name=rep value=NON> 
      NON</label> 
      <br> 
      </p> 
      <input type=submit value=VOTER> 
      </form></td></tr>"; } 
      echo "</table>"; 
      } 
      
      
      ?>
      
      <br>
      <br>
      <a href=vis_rech.php>Retour &agrave; la recherche</a><br>
      <a href=menu_vis.php>Retour &agrave; l'espace Visiteur</a><br>
      <a href=../index.html>Retour &agrave; l'accueil</a>
      </body>
      </html>
      
      0
  2. toto
     
    Bonjour

    Si ça marchait en local, ça peut être un problème de casse : ta table s'appelle-t-elle bien restaurants en minuscules ?

    Quelle que soit l'erreur, tu auras des précisions en affichant le message d'erreur :

    $result = mysql_query($select) or die (mysql_error());
    0
    1. letyz12
       
      oui ma table s'écrit ien comme ça, il n'y a pas d'erreur de casse.


      En retestant apres modif, il me sort cette erreur :
      Impossible de se connecter

      Je ne comprend pas trop; voici la structure de mon fichier connecter.phph, qui doit se connecter à ma base :

      <?php    /* Fichier connecter.php
      ici les parametres pour la connexion
         1)pour connexion Distante sur serveur MYSQL de free
      	 ----------------------------------------------------
         $serveur="sql.free.fr"; 
      	 $utilisateur ="webprogression"; //chez free l'utilisateur et la base ont le meme nom
         $passe="Votre mot de passe de chez free"; 
      	 $base="webprogression"; 
      	 
      	 2)pour connexion Locale sur serveur MYSQL de ma machine
      	 --------------------------------------------------------
         $serveur="localhost"; 
      	 $utilisateur ="root"; 
         $passe=""; 
      	 $base="webprogression"; 
      	 					*/
      
      
      # FileName="Connection_php_mysql.htm"
      # Type="MYSQL"
      # HTTP="true"
      $hostname_connecter = "sql.free.fr";
      $database_connecter = "moi";
      $username_connecter = "moi";
      $password_connecter = "monpass";
      //effectuer la connexion à MYSQL
         $link = mysql_connect("$serveur","$utilisateur","$passe") or die ("Impossible de se connecter").mysql_error();
         //sélectionner la base de données de Mysql (locale ou distante)
         mysql_select_db ("$base") or die ("Impossible d'accéder à la base de données");
      ?>
      
      0
  3. toto
     
    mysql_connect("$serveur","$utilisateur","$passe")
    où les variables $serveur, etc sont-elles initialisées ? Celles que tu initialises s'appellent $hostname_connecter, etc..
    D'ailleurs (mais ça n'est pas ça qui empêche de marcher) à quoi peuvent bien servir les guillemets autour de "$serveur", "$utilisateur" et "$passe" ???
    0
    1. letyz12
       
      Ca s'est arrangé; c'était en effet un souci de nom de variable!

      Donc là je vois qu'il se conencte bien à ma base de données.

      par contre, il y a toujours un souci avec l'exécution de requetes à certains moments :

      Erreur :
      Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /mnt/102/sdb/c/4/letyz12/vis/vis_resultat.php on line 276

      Voici une aprtie du code ou cela plante par ex :

      $select="SELECT count (nom) FROM restaurants WHERE nom LIKE '%$nom%' AND cuisine= \"$cuisine\"";
      $result = mysql_query($select);
      $row = mysql_fetch_row($result);
      $nb = $row[0];

      Peut-etre ya til un souci de ' ou " dans ma requete ?
      0
      1. letyz12 > letyz12
         
        En essayant le $result = mysql_query($select) or die (mysql_error()); ,

        Il me sort : FUNCTION letyz12.count does not exist

        C'est bizarre; j'explique vite fait comment fonctionne ma page :

        En fait, l'utilisateur peut rechercher des restaurants par le nom (saisie manuelle dans une zone de texte) ET/OU par un type de cuisine (sélection dans une zone de liste) ET/OU par prix (également sélection dans une zone de liste)

        Bizarrement, ya un souci dès que le nom tapée par l'utilisateur, s'il y en a un, entre en jeu.

        Sinon,cela marche bien.
        0
      2. letyz12 > letyz12
         
        c'est bon je viens de trouver la solution :

        en fait, j'écrivais select count (nom) avec un espace entre "count" et (nom) alors qu'il n'en faut pas..

        Cependant, décidément, j'en aurais vu, un autre problème est présent.

        Sur mon site, il y aune zone dite "Accès membre" ou l'on peut se connecter avec un nom d'uilisateur et un mot de passe.

        Voici l'erreur affichée lorsque je me connecte (a fortiori normalement correctement):

        Warning: main() [function.main]: open_basedir restriction in effect. File(../connecter.php) is not within the allowed path(s): (/mnt/102/sdb/c/4/letyz12) in /mnt/102/sdb/c/4/letyz12/fct/fct_menu.inc.php on line 3

        Warning: main(../connecter.php) [function.main]: failed to open stream: Operation not permitted in /mnt/102/sdb/c/4/letyz12/fct/fct_menu.inc.php on line 3

        Fatal error: main() [function.require]: Failed opening required '../connecter.php' (include_path='/mnt/102/sdb/c/4/letyz12/include:.:/usr/php4/lib/php') in /mnt/102/sdb/c/4/letyz12/fct/fct_menu.inc.php on line 3



        Voici le fichier fct_menu.inc.php dont il est question :

        <?php session_start(); ?>
        <?php
        require("../connecter.php");
        /********************************************************************************************/
        function verif ($log, $pwd, $droit) {
        	$rqt = "SELECT droit FROM profils WHERE login ='$log' AND pass='$pwd'";
        	$res = mysql_query($rqt);
        	$profil_courant = mysql_fetch_object($res);
        	$droit=$profil_courant->droit;
        	return $droit;
        }
        
        function menu_admin () {
        echo "
        		<table>
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><a href=../admin/profils.php>Gestion des profils</a><br></td>
        			</tr>
        			
        		</table>";
        }
        /***************************************************************************************************************************/
        
        function menu_sec () {
        echo "
        		<table>			
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><a href=../sec/sec_profils.php>Les profils</a><br></td>
        			</tr>
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><br></td>
        			</tr>			
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><a href=../sec/messages.php>Gestion des messages du livre d 'or</a><br></td>
        			</tr>
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><br></td>
        			</tr>			
        			
        		</table>";
        }
        /***************************************************************************************************************************/
        function menu_adh () {
        echo "
        		<table>			
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><a href=../adh/adh_profils.php>Les profils</a><br></td>
        			</tr>
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><br></td>
        			</tr>			
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><a href=../adh/restaurants.php>Gestion des restaurants</a><br></td>
        			</tr>
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><br></td>
        			</tr>			
        			
        		</table>";
        }
        
        /***************************************************************************************************************************/
        function menu_vis () {
        echo "
        		<table>			
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><a href=../vis/vis_rech.php>Rechercher un restaurant</a><br></td>
        			</tr>
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><br></td>
        			</tr>			
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><a href=../vis/vis_livre_or.php>Livre d'or</a><br></td>
        			</tr>
        			<tr>
        				<td class=\"td25\"></td>
        				<td class=\"td75\"><br></td>
        			</tr>
        				
        			
        		</table>";
        }
        
        ?> 


        L'erreur a vraisemblablement lieu au require (../connecter.php); l'appel me semble prtant bon, identique aux autres..
        0
  4. toto
     
    Avec un nom comme ça, fct_menu.inc.php est sûrement un fichier inclus.
    Dans ce cas, le répertoire courant est celui du script, c'est à dire du fichier principal, pas celui de fct_menu.inc.php.
    Si ce fichier est à la base de ton site, pour inclure connecter.php, comme ils sont dans le même répertoire, il faut faire simplement require("connecter.php"), pas require("../connecter.php"). Même si le require, lui, se trouve dans un fichier qui est dans un sous-répertoire.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. letyz12
     
    Mon fichier fct_menu.inc.php est bien un fichier que j'inclue e til n'est pas direct sous laracine du site mais dans un sous-repertoire

    malgré des améliorations, ya toujours des bugs; le mieux est que je mette tous mes fichiers sous la racine du site et modifie mes appels aux pages.

    Je vais voir ce que cela donne.
    0
    1. letyz12
       
      Le problème est réglé;

      En fait, lors du transfert de ma base de mon localhost chez free, les données déjà incluses dans ma base se sont mal transférées; tous les caractères accetnués (é, è, à) se sont changés en "?" .

      Merci bcp pour votre aide.
      0