8722 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Voila, j'ai un petit soucis avec ma page PHP qui m'affiche les boutiques de mon site (je dois créer un site e-commerce de toutes pièces pour un dossier de candidature à IP-Formation à Paris).
Lors de mes tests en local, tout fonctionne parfaitement mais lors de la mise en upload sur le serveur, lorsque j'accède à mon fichier, celui-ci me retourne une erreur 500. Savez-vous de quoi il en retourne ? Je vous joins mon code.

<?php
session_start();
?>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<link rel="stylesheet" href="style.css" type="text/css" />
		<title>A ma Zone.fr</title>
	</head>
	
	<body>
		<div id="contenu">
<?php
include_once('header.inc.php');
?>

			<section>	
				<aside>
					Test ARF
				</aside>
				<article>
					<H1>Bienvenue sur les boutiques d'A ma Zone.fr</H1>
					<?php
					$bdd = connectBDD();
/*PAGE SBOUTIQUES*/	if((isset($_GET['id']))&&(!isset($_GET['bid'])))
					{
						$sql = 'SELECT id, nom FROM boutique WHERE id='.$_GET['id'];		
						$req = $bdd->query($sql);
						while($d = $req->fetch())
						{
						?>
						<H2><?php=$d['nom'];?></H2>
							<?php
							$sql2 = 'SELECT id, bid, nom FROM sous_boutique WHERE bid='.$d['id'].'';
							$req2 = $bdd->query($sql2);
							while($d2 = $req2->fetch())
							{
							echo '<H3><a href="boutique.php?id='.$d2['bid'].'&bid='.$d2['id'].'">'.$d2['nom'].'</a></H3>';
							echo '<br/>';
							}
						}
						$reponse->closeCursor();
					}
/*PAGE PRODUITS*/    elseif((isset($_GET['id']))&&(isset($_GET['bid'])))
					{
					?>
					<?php
						$sql = 'SELECT * FROM boutique WHERE id='.$_GET['id'].'';
						$reponse = $bdd->query($sql);
						while($donnees = $reponse->fetch())
						{
							echo '<H2>';
							echo '<a href="boutique.php">Boutiques</a> > ';
							echo '<a href="boutique.php?id='.$donnees['id'].'">'.$donnees['nom'].'</a>';
							echo ' > ';
						}
						$sql = 'SELECT * FROM sous_boutique WHERE id='.$_GET['bid'].'';
						$reponse = $bdd->query($sql);
						while($donnees = $reponse->fetch())
						{
							echo '<a href="boutique.php?id='.$donnees['bid'].'&bid='.$donnees['id'].'">'.$donnees['nom'].'</a>';
							echo '</H2>';
						}
						?>
						<p>&nbsp;</p>
							<table>
								<tr>
									
						<?php
						// Récupération de nombre de résultats
						$sql = 'SELECT * FROM produits WHERE bid='.$_GET['id'].' AND sbid='.$_GET['bid'].'';
						$req = $bdd->query($sql);
						$res = $req->fetchAll();
						$count = count($res);
						
						// Initialisation de $i qui nous permet de savoir quand placer le TR
						$i = 1;
						$diviseur = $count / 3;
						$diviseur = ceil($diviseur);
						
						// Requête d'affichage des résultats
						$sql = 'SELECT * FROM produits WHERE bid='.$_GET['id'].' AND sbid='.$_GET['bid'].'';
						$req = $bdd->query($sql);
						while($res = $req->fetch())
						{
							?>
									<td class="affichageProduits">
										<a href="produit.php?id=<?php echo $res['id'];?>" title="Lien vers le produit"><img src="img/produits/<?php echo $res['id']?>_1.jpg" class="imageProduits"></a>
										<br/>
										<?php echo $res['nom']?>
										<br/>
										<span class="prixBoutique">Prix : EUR <?php echo $res['prix']?></span>
										<br/>
										<?php
										// Récupération de la note moyenne des commentaires pour ce produit
										$sql = 'SELECT AVG(note) FROM commentaires WHERE pid='.$res['id'].'';
										$sousReponse = $bdd->query($sql);
										while($sousDonnees = $sousReponse->fetch())
										{
											if($sousDonnees['AVG(note)'] != 0)
											{
												$moyenne = round($sousDonnees['AVG(note)'], 2);
												echo 'Note : '.$moyenne;
												
												// Récupération du nombre de commentaires
												/*$sql = 'SELECT * FROM commentaires WHERE pid=\''.$res['id'].'\'';
												$req = $bdd->query($sql);
												$res = $req->fetchAll();
												$nb = count($res);
												echo ' <sup>('.$nb.')</sup>';*/
											}
											else
											{
												echo 'Aucun commentaire client';
											}

										}

										
										// Ajout de la nouvelle TR le cas échéant
										$nombre = $i /3;
										if(is_int($nombre))
										{
										?>
										</tr><tr>
										<?php
										}
										?>
									<?php
									$i++;
									?>
									</td>
						<?php
						}
						?>
								</tr>
							</table>
						<?php					
						$reponse->closeCursor();
						?>
						<?php
					}
/*PAGE BOUTIQUES*/	else
					{
					?>
						<div id="affichageBoutiques">
						<?php
						$sql = 'SELECT id, nom FROM boutique';
						$reponse = $bdd->query($sql);
						while($donnees = $reponse->fetch())
						{
						?>
							<br/>
							<H3><a href="boutique.php?id=<?=$donnees['id']?>"><?=$donnees['nom']?></H3>
							<br/>
							<?php
							$sql = 'SELECT id, nom FROM sous_boutique WHERE bid='.$donnees['id'];
							$sousReponse = $bdd->query($sql);
							while($sousDonnees = $sousReponse->fetch())
							{
							echo '<a href="?id='.$donnees['id'].'&bid='.$sousDonnees['id'].'">'.$sousDonnees['nom'].'</a>';
							echo '<br/>';
							}
						}
						$reponse->closeCursor();
					}
					?>
						</div>
				</article>
			</section>
<?php
include_once('footer.inc.php');
?>
		</div>
	</body>
</html>

Après un mini-débuggage, il s'avère que c'est la première condition qui pose problème :
/*PAGE SBOUTIQUES*/	if((isset($_GET['id']))&&(!isset($_GET['bid'])))
		{


Merci à tous pour votre aide !
Modifié par destroydaworld (23 Feb 2013 - 16:02)
Bonjour,

une erreur 500, c'est une erreur interne serveur.
$_GET...mouais, ton serveur accepte les variables globales, je veux dire c'est à "on" dans le php.ini? A tout hasard...
Et oui, mais c'est très étrange que l'erreur serveur apparaisse sur uniquement cette page. Oui, mon serveur PHP en ligne accepte très bien les superglobales, je m'en sers partout ...
okay, par contre j'avoue ne pas bien comprendre la structure de tes requêtes...humm, là :


if((isset($_GET['id']))&&(!isset($_GET['bid'])))


et le else if qui va avec :


 elseif((isset($_GET['id']))&&(isset($_GET['bid'])))
Bah si dans le menu, le mec a cliqué sur une boutique (fait passer id en GET) ou une sous-boutique (fait passer id et bid en GET) dans le menu du header, il affiche les sous boutiques en fonction de la boutique cliquée.
bah non....tu remplis la condition première, si celle-ci est remplie, tu peux ensuite passer aux sous-conditions. exemple :


if (isset($_GET['id']) {

$sql = 'SELECT id, nom FROM boutique WHERE id='.$_GET['id'];
// entre autres...pour éviter les redondances. elle apparait 2 fois au moins cette requête
 
                            if (isset($_GET['bid']) {
                                      //tu passes aux requêtes sql suivantes
                            }
                           else {
                                     //dans le cas contraire autres requêtes sql
                            }

              }  // fin de ta condition globale


mélanger le php et l'html, oui, bien sûr mais plus à ce niveau là, il est difficile de t'aider avec précision, le code est confus, mélangé, trop mélangé voire illisible. Mets en place des classes, des méthodes, enfin bref sépare un peu ton php de l'html, sur ce coup-là.
Modifié par FloydinBremen (27 Feb 2013 - 19:53)