Problème lors de la mise en ligne de mon site

Fermé
Signaler
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012
-
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012
-
Bonjour,


J'apprend le php et je bute sur un problème que j'ai déjà croisé dans les forums : lors de la création du site en local, tout se passe bien mais lors de sa mise en ligne, j'ai l'erreur suivante :
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /homez.501/rectangl/www/php/portfolio.php on line 1


Je fais des mises en ligne régulières à chaque étapes importantes de la construction du site. Jusque là tout allait bien.
La page qui pose problème est certainement un peu plus complexe en imbrication que les autres, le problème vient peut-être de là.

Peut-être ai-je fait une erreur de concaténation. J'ai lu quelques posts et je me dis que je n'ai peut-être pas bien compris ça.

Si quelqu'un a un peu de temps pour m'aider à relire mon fichier, ça m'aiderait beaucoup, je trop de points virgules dans les yeux je crois !

Je travaille avec Notepad++. Le fichier est encodé en utf-8(sans BOM)...


Le code de la page :


<?php
require 'connexion.php';

if(isset($_GET['id_rubrique'])){ // si tu n'as pas mémorisé $_GET['id'] la première fois
$id_rubrique=$_GET['id_rubrique']; // alors mémorise-le
}

$rub=$id_rubrique;
$rubrique=$rub;
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Rectangluti_Portfolio</title>

<link href="../css/css.css" rel="stylesheet" type="text/css" />

<!-- Spécifications pour IE 5 et supérieur : -->
<!--
[if gte IE 5]>
<link type="text/css" rel="stylesheet" href="styles-ie.css" />
<![endif]
-->

<!-- AFFICHAGE ACCORDEON GALERIES -->
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript" src="../js/effet.js"></script>

<!-- COLORBOX -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="../js/colorbox/jquery.colorbox.js"></script>
<script>
$(document).ready(function(){
//Examples of how to assign the ColorBox event to elements
$(".group1").colorbox({rel:'group1', width:"75%", height:"75%"});
$(".group2").colorbox({rel:'group2', width:"75%", height:"75%"});
$(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
$(".group4").colorbox({rel:'group4', slideshow:true});
$(".ajax").colorbox();
$(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
$(".iframe").colorbox({iframe:true,rel:'group1', width:"75%", height:"75%"});
$(".inline").colorbox({inline:true, width:"40%"});
$(".callbacks").colorbox({
onOpen:function(){ alert('onOpen: colorbox is about to open'); },
onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
});

//Example of preserving a JavaScript event for inline calls.
$("#click").click(function(){
$('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
return false;
});
});
</script>


</head>

<body>
<div id="conteneur">
<div id="header"> <!-- début "header" -->
<h1><a href="../index.php">Anne Basaille</a></h1>
</div> <!-- fin "header" -->

<div id="menu"> <!-- menugeneral -->
<ul>
<li><a href="../index.php">Accueil</a></li>
</ul>

<ul>
<li><a href="presentation.php">Présentation</a></li>
</ul>

<ul>
<!-- Affichage du menu -->
<?php
// fais une connexion
foreach($connexion->query('SELECT * FROM rubriques') as $ligne){
echo '<li>';
echo '<a href="portfolio.php?id_rubrique='.$ligne['id_rubrique'].'">';
echo $ligne['nom_rubrique'];
echo '</a>';
echo '</li>';
}
?>
</ul>
</div> <!-- /menu -->

<div id="main"> <!-- main -->
<div class="serie">
<ul>
<?php
foreach($connexion->query("SELECT * FROM projets WHERE rub='$rub' ") as $ligne){
$id_projet=$ligne['id_projet'];

echo '<li>';
echo '<div class="serieIcone">'; // div serieIcone
echo '<img src="../images/flecheMarron.gif">';
echo '</div>'; // fin div serieIcone

echo '<div class="serieTitre">'; // div serieTitre
echo $ligne['nom_projet'];
echo '</div>'; // fin div serieTitre

echo '<div class="serieGalerie">'; // div serieGalerie
// on récupère les variables qu'on connait et dont on aura besoin
$id_rubrique=$_GET['id_rubrique'];
$projet=$id_projet;

if($ligne['resume_projet']!=''){
echo '<div class="serieIntro">'; // div serieIntro
echo $ligne['resume_projet'];
echo '</div>'; // fin div serieIntro
}

foreach($connexion->query("SELECT * FROM oeuvres WHERE projet='$projet'") as $ligne){
if($ligne['image']!=''){
echo '<div class="vignettesSite">'; // vignette
echo '<a class="group1" href="../images/'.$ligne['rubrique'].'/'.$ligne['projet'].'/images/'.$ligne['image'].'" title="'.$ligne['titre'].'"><img src="../images/'.$ligne['rubrique'].'/'.$ligne['projet'].'/vignettes/'.$ligne['vignette'].'" /></a>';
echo '</div>'; // /vignette
}
elseif($ligne['video']!=''){
echo '<div class="vignettesSite">'; // vignette
echo '<a class="iframe" href="../images/'.$ligne['rubrique'].'/'.$ligne['projet'].'/videos/'.$ligne['video'].'" title="'.$ligne['titre'].'"><img src="../images/'.$ligne['rubrique'].'/'.$ligne['projet'].'/vignettes/'.$ligne['vignette'].'" /></a>';
echo '</div>'; // /vignette
}
}
echo '</div>'; // fin div serieGalerie
echo '</li>';
}
?>
</ul>
</div> <!-- /série -->

</div> <!-- /main -->

<div id="footer">
<a href="contact.php">Contact</a> - <a href="infosLegales.php">Informations légales</a> - <a href="admin/identification.php">Administration</a> - Copyright 2012
</div>

</div> <!-- /conteneur -->
</body>
</html>


Merci d'avance !!!





17 réponses

Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
Sur ta première ligne de php il manque des parenthèse
sinon si tu es chez ovh ajoute :
SetEnv PHP_VER 5_3 
SetEnv REGISTER_GLOBALS 0


dans le .htaccess à la racine de l'hébergement

et tu peux aussi ajouter ça :

options -indexes -MultiViews


même si ca n'a pas grand chose a voir
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

Hello !

Les parenthèse sur le require ne changent rien.
J'ai ajouté options -indexes -MultiViews sur le htaccess. Il avait déjà les 2 autres spécifications. (je suis bien chez ovh oui)

Je continue à chercher une erreur dans la concaténation. Pour l'instant, aucune trouvaille...
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

Par exemple, est-ce que ces lignes sont correctes au niveau de la syntaxe ?

foreach($connexion->query("SELECT * FROM oeuvres WHERE projet='$projet'") as $ligne){
	if($ligne['image']!=''){
		echo '<div class="vignettesSite">'; // vignette
			echo '<a class="group1" href="../images/'.$ligne['rubrique'].'/'.$ligne['projet'].'/images/'.$ligne['image'].'" title="'.$ligne['titre'].'"><img src="../images/'.$ligne['rubrique'].'/'.$ligne['projet'].'/vignettes/'.$ligne['vignette'].'" /></a>';
		echo '</div>'; // /vignette
	}
	elseif($ligne['video']!=''){
		echo '<div class="vignettesSite">'; // vignette
			echo '<a class="iframe" href="../images/'.$ligne['rubrique'].'/'.$ligne['projet'].'/videos/'.$ligne['video'].'" title="'.$ligne['titre'].'"><img src="../images/'.$ligne['rubrique'].'/'.$ligne['projet'].'/vignettes/'.$ligne['vignette'].'" /></a>';
		echo '</div>'; // /vignette
	}
}
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
je ne vois pas

par contre il y a beaucoup de variables inutiles
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

grrumpf, je continue
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
je pense avoir trouvé

ca doiit venir de ces lignes

$rub = $id_rubrique;
$rubrique = $rub;

si $id_rubrique n'est pas déclaré ca risque de poser problème
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
ça ne sert a rien ce jeux de variable, pourquoi tu fais ça ?

fait attention aux injections sql il faut utiliser pdo et prepare comme ca tu es sure que niveau injection sql tu es cool
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
j'envois en petit bloque parce que le boutton "créer un nouveau sujet" est super mal placé je clic dessus quasiment a chaque fois que je veux envoyer (faudrait manifester pour qu'ils nous enlèvent ça)
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

très bien les ptits blocs !

Je fais tout ce jeu de variables parce que je galère, je présume !!

Je crois voir ce que tu dis quand à l'utilisation de pdo et prepare. Je vais essayer de réécrire ça correctement
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

ok je regarde ça de plus près.
Mais je ne comprends pas quand tu dis "si $id_rubrique n'est pas déclaré ca risque de poser problème".
id_rubrique est déclaré comme étant = à la valeur que lui renvoie le navigatreur (via $_GET['id_rubrique'])
par d"déclaré", est-ce que tu entends, appelé plus bas dans la page ?

Dans mes tables, j'ai 3 variables qui équivalent à id_rubrique. Je fais appel aux une ou aux autres selon les tables que j'appelle justement...

Ceci dit, je ne suis pas étonnée que tu trouves pleins de variables en trop. Je vais essayer d'épurer.

Merci !
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

Est-ce que tu veux parler d'un truc du genre :

$bdd = new PDO('mysql:host='.$hote.';dbname='.$bd, $utilisateur, $passe);

$sql = $bdd->prepare('SELECT * FROM luxe);
$sql->execute();

et après, à la place de mes ligne foreach...

while ($resultat = $sql->fetch(PDO::FETCH_ASSOC)){
.....................
}
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
pour pdo c'est ça. un conseil n'utilise que ca et sous cette forme le plus souvent possible

et pour la variable elle n'est déclaré que si le get existe


if(isset($_GET['id_rubrique'])){ // si tu n'as pas mémorisé $_GET['id'] la première fois
$id_rubrique=$_GET['id_rubrique']; // alors mémorise-le
}

mais il n'y a pas de else donc sinon elle n'existe pas et tu donne une valeur a rub qui n'existe pas

si tu faisais :


$rub = (isset($_GET['id_rubrique']))? (int)$_GET['id_rubrique'] : 0;


au lieu de :


if(isset($_GET['id_rubrique'])){ // si tu n'as pas mémorisé $_GET['id'] la première fois
	$id_rubrique=$_GET['id_rubrique']; // alors mémorise-le
}

$rub = $id_rubrique;
$rubrique = $rub;


la variable $rubrique n'est appelé nul par dans la page

tu aurais le même résultat sans les problèmes de variable inexistante

a la ligne 95 et 109 tu te tapes un bon délire aussi.

ligne 95 : $id_projet=$ligne['id_projet'];
ligne 108 : $id_rubrique=$_GET['id_rubrique']; (tu redéfinit $id_rubrique sans vérifier que le get existe et pour lui donner la même valeur que tu lui a donné au début
ligne 109 : $projet=$id_projet; tu met dans une autre variable $ligne['id_projet']

utilise directement $ligne['id_projet'] et $rub pour c'est 2 cas la

après il y a peut être d'autre chose que je n'ai pas remarqué
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
j'ai pas tout effacé cette fois c'est cool

sinon juste pour ajouter que c'est peut être register global 0 du .htaccess qui fait l'erreur mais qu'il faut mieux laisser le .htaccess comme ça et modifier ton code
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

Bon, je vais essayer de reprendre comme tu me conseilles.

Mais la variable $id_rubrique est déclarée dans le get. J'avais justement vérifié avec des echo.

Après, selon les tables que j'appelle, je fais appel aux variables de ces tables qui ont la même valeur que id_rubrique.

bon, j'ai dû rater un truc...

Je m'y recolle.

Merci !
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
voilà qui devrait fonctionné

<?php
require_once('connexion.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Rectangluti_Portfolio</title>

<link href="../css/css.css" rel="stylesheet" type="text/css" />

<!-- Spécifications pour IE 5 et supérieur : -->
<!--
[if gte IE 5]>
<link type="text/css" rel="stylesheet" href="styles-ie.css" />
<![endif]
-->

<!-- AFFICHAGE ACCORDEON GALERIES -->
<script type="text/javascript" src="../js/jquery.js"></script>
<script type="text/javascript" src="../js/effet.js"></script>

<!-- COLORBOX -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="../js/colorbox/jquery.colorbox.js"></script>
<script>
$(document).ready(function(){
//Examples of how to assign the ColorBox event to elements
$(".group1").colorbox({rel:'group1', width:"75%", height:"75%"});
$(".group2").colorbox({rel:'group2', width:"75%", height:"75%"});
$(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
$(".group4").colorbox({rel:'group4', slideshow:true});
$(".ajax").colorbox();
$(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
$(".iframe").colorbox({iframe:true,rel:'group1', width:"75%", height:"75%"});
$(".inline").colorbox({inline:true, width:"40%"});
$(".callbacks").colorbox({
onOpen:function(){ alert('onOpen: colorbox is about to open'); },
onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
});

//Example of preserving a JavaScript event for inline calls.
$("#click").click(function(){
$('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
return false;
});
});
</script>


</head>

<body>
<div id="conteneur">
<div id="header"> <!-- début "header" -->
<h1><a href="../index.php">Anne Basaille</a></h1>
</div> <!-- fin "header" -->

<div id="menu"> <!-- menugeneral -->
<ul>
<li><a href="../index.php">Accueil</a></li>
</ul>

<ul>
<li><a href="presentation.php">Présentation</a></li>
</ul>

<ul>
<!-- Affichage du menu -->
<?php
// fais une connexion
foreach($connexion->query('SELECT * FROM rubriques') as $ligne){
	echo '<li><a href="portfolio.php?id_rubrique='.$ligne['id_rubrique'].'">'.$ligne['nom_rubrique'].'</a></li>';
}
?>
</ul>
</div> <!-- /menu -->

<div id="main"> <!-- main -->
<div class="serie">
<ul>
<?php

$rub = (isset($_GET['id_rubrique'])) $_GET['id_rubrique'] : 0;
foreach($connexion->query('SELECT * FROM projets WHERE rub=\''.$rub.'\'') as $rubLine){

	echo '<li>'.
		'<div class="serieIcone"><img src="../images/flecheMarron.gif"></div>'. // fin div serieIcone
		'<div class="serieTitre">'.$rubLine['nom_projet'].'</div>'. // div serieTitre
		'<div class="serieGalerie">'; // div serieGalerie

	if($rubLine['resume_projet'] != '') echo '<div class="serieIntro">'.$rubLine['resume_projet'].'</div>';

	foreach($connexion->query('SELECT * FROM oeuvres WHERE projet=\''.$rubLine['id_projet'].'\'') as $oline){
		if($oline['image']!='' || $oline['video']!=''){
			echo '<div class="vignettesSite">'; // vignette
			if($oline['image']!= '' ) {
				$class = ($oline['image']!= '' )? 'group1' : 'iframe';
				$href = ($oline['image']!= '' )? '/images/'.$oline['image'] : '/videos/'.$oline['video'];
			}
			echo '<a class="'.$class.'" href="../images/'.$oline['rubrique'].'/'.$oline['projet'].$href.'" title="'.$oline['titre'].'">'.
			'<img src="../images/'.$oline['rubrique'].'/'.$oline['projet'].'/vignettes/'.$oline['vignette'].'" /></a>'.
			'</div>'; // /vignette
		}
	}
	echo '</div>'. // fin div serieGalerie
	'</li>';
}
?>
</ul>
</div> <!-- /série -->

</div> <!-- /main -->

<div id="footer">
<a href="contact.php">Contact</a> - <a href="infosLegales.php">Informations légales</a> - <a href="admin/identification.php">Administration</a> - Copyright 2012
</div>

</div> <!-- /conteneur -->
</body>
</html> 
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
tu nommes mal tes variables et du coup tu t'embrouilles avec

de plus ton code contient trop de répétitions ça embrouille d'autant plus la lecture.

dit toi qu'en générale plus un code est court pour faire une tâche donnée plus il est efficace. mis à part la longueur du nom des variables qui ne change pas grand chose

$ligneRubrique vaut mieux que $ligne ou $lr parce que c'est plus clair
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

argh, non ça ne marche pas.

Je sais bien que plus le code est court, plus clair c'est.
Mais comme j'apprends, je crois que je décortique. Certainement que je me mélange les pinceaux !!

Et alors, je n'ai absolument pas appris à écrire comme tu le fais.

Je continue donc...
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
un code plus court au niveau algorithmique.

évité de répéter plusieurs fois la même chose ce n'est pas qu'au niveau de la lisibilité que c'est important pour l'optimisation ce l'est également.

pour le code que je t'ai donnée si il ne fonctionne pas j'ai peut être fait une erreur je n'ai aps pu le tester vu que je n'ai pas de base de donnée pour

pour la synthaxe tu parles de ca ?
$rub = (isset($_GET['id_rubrique']))? $_GET['id_rubrique'] : 0;


si c'est pour ça c'est tout simplte ca revient a faire

if((isset($_GET['id_rubrique'])) $rub = $_GET['id_rubrique'];
else $rub = 0;


je vient de me rendre compte que j'avais oublié le "?" pour la condition

il faut l'ajouter

ca se présente sous cette forme

$var = (condition)? 'valeur si la condition retourne true' : 'valeur si la condition retourne false';
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

Bon, j'essaie de suivre tes conseils mais ça ne marche pas.

De toute façon, si le reste du site fonctionne, c'est que ma manière d'écrire n'est pas si pourrie que ça.
Je continue à optimiser mes déclarations de variables, ce sera déjà ça de fait.
Messages postés
1935
Date d'inscription
mercredi 25 juin 2008
Statut
Membre
Dernière intervention
11 mai 2014
274
pour la façon d'écrire ça ne change rien c'est juste plus rapide

si vraiment tu ne trouve pas il faudrait que tu m'envoies le contenu complet de ce fichier et de connexion.php
Messages postés
11
Date d'inscription
samedi 13 octobre 2012
Statut
Membre
Dernière intervention
15 octobre 2012

alors j'ai refait le fichier en mettant le script de connexion plus bas et en réécrivant le ifset et ses 3 variables différemment.
La connexion plus bas, c'est pas très catholique mais ça passe.

Je crois que ce qui faisait bugger, ce sont mes div dans les div pour afficher un menu déroulant.

En théorie, ça devrait marcher puisque ça marche en local...

Mais, ça ira bien comme ça pour l'instant.
En fait, je dois faire valider un examen basique de php la semaine prochaine, donc les subtilités de webdesign sont remises à plus tard.

En tout cas, je note bien tes conseils, et je suis bien d'accord sur le fait d'optimiser. C'est logique.
Je continue donc dans ce sens.

Merci beaucoup pour ton aide !!