Php site perso chez free; pb accès à la BD
Résolu
letyz12
-
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.
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
-
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.-
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é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 à la recherche</a><br> <a href=menu_vis.php>Retour à l'espace Visiteur</a><br> <a href=../index.html>Retour à l'accueil</a> </body> </html>
-
-
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());-
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"); ?>
-
-
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" ???-
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 ?- 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. - 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..
-
-
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. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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.