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

Résolu/Fermé
letyz12 - 3 janv. 2009 à 17:38
 letyz12 - 3 janv. 2009 à 22:12
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.

5 réponses

Apaachee
Messages postés
248
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
25 août 2011
47
3 janv. 2009 à 17:49
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
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
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
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
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
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
letyz12 > letyz12
3 janv. 2009 à 19:22
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
letyz12 > letyz12
3 janv. 2009 à 19:29
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
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

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.
0
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