8791 sujets

Développement web côté serveur, CMS

Bonjour,
(navré si je ne post pas au bon endroit Smiley decu )

Je suis loin d'être un expert en php mais là je suis en plein dedans et j'essaye de manipuler quelque chose qui me dépasse complétement et pourtant au fond de moi je sens que c'est pas compliqué ... après je peut me tromper.
Je suis entrain d'essayer de monter un script de news avec administration simple et tout le bazar. J'ai une page index.php qui liste les titres les news. Quand on clic sur les titres cela nous envois vers une page voir.php?id=id-de-la-news.
Et en fait j'aimerais savoir si c'est possible, simplement, de récupérer le titre de cette news et le faire répéter dans la balise html <title>, afin que le titre de la page soit le même que celui de la news en question ?

Je ne sais pas trop quoi coller comme code, là maintenant, mais n'hésitez pas à en demander XD
Donc je répète, suis loin d'être un expert, je m'aide de bcp de tuto divers et variés pour monter ce truc. Dans tous les cas merci d'avance à ceux qui répondront.

Je vous souhaites une bonne journée à tous Smiley biggrin
Bonjour,

Si je comprend bien, dans la page voir.php, tu affiche le contenu de la news (et donc logiquement son titre aussi).
Je ne sais pas si tu récupère ça d'une base de donnée, d'un fichier externe ou d'autre part, mais dans tous les cas tu devrait avoir à disposition ce titre (dans une variable ou autre), et il suffirait de le mettre dans la balise <title> (avec un echo ou print)
Bonjour,

il faut que tu colles le code qui va permettre l'affichage de l'intitulé de la news entre les balises <title></title>. Ca devrait ressembler à quelquechose comme ça :

<title><?php echo $row_requete['intitule']; ?></title>

Modifié par Zhouzi (12 Jul 2011 - 14:50)
Merci pour vos réponses.

En effet, Romain.E tout se trouve sur une basse de donnée. Le titre et le contenu s'affiche sur voir.php grâce à cette requête :

	$id=$_GET['id'];
	$sql="SELECT * FROM news WHERE id=$id"; 
	$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
	$data=mysql_fetch_assoc($req);
	echo "<h1>{$data["titre"]}</h1>";
	echo "<p>{$data["contenu"]}</p>";


Et donc je viens d'essayer la méthode de Zhouzi qui manifestement fait agir quelque chose, mais pas comme je le voudrais. En effet il récupère des choses que je n'ai jamais codé de ma vie, (en tout cas dans ce projet) et affiche donc dans le titre ceci :

upload/32648-title.jpg

Donc franchement je ne sais pas d'où il sort ce code dans le title ... ? Smiley eek
Au début j'ai pensé au WYSIWYG que j'ai installé (TinyMCE) mais ce dernier n'est pas appliqué au champ "titre" de la news, et bien que à son contenu. Donc mystère en ce qui me concerne Smiley bawling

Merci encore une fois de vos réponses. Smiley biggrin
Vérifie dans la base de données si le contenu du champ "titre" correspond bien au titre lui même (et uniquement le titre). Si ce n'est pas le cas, c'est que tu as déjà un problème au moment de l'insertion en base.
Requête non définie ... Et je vois pas comment la coder Smiley ohwell

"Undefined variable"

Bon en gros voilà le code que j'ai pondu (navré si c'est pas propre Smiley decu )

<?php

	require "config.php"; 
	mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
	mysql_select_db(DB_BDD); 		
	if(isset($_GET['titre']))
		{
		
			$requete="SELECT * FROM news WHERE news = ".$_GET['titre']; // requete
			$exeRequete = mysql_query($requete, $cnx_mysql) or die (mysql_error());
			$donnees = mysql_fetch_assoc($exeRequete);	
			
		}

			$titre_page = "News: ". $donnees['titre'];
			
?>
<!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><?php if($titre_page == NULL) { echo 'News'; } else { echo ''.$titre_page; } ?></title>
</head>

<body>

Modifié par Ste137 (12 Jul 2011 - 18:47)
Salut,

Plusieurs problèmes dans ton code :

Tu appelles $_GET['titre'] mais d'après ta table et ton code précédemment posté c'est plutôt $_GET['id'].

Tu insères une variable provenant du navigateur ($_GET) directement dans ta requête SQL sans la protéger. Cela ouvre une faille par injection qui permet de faire plein de trucs "sympas" avec ta base de données (par exemple effacer ou modifier des données).

Tu dois absolument filtrer les données de type GET, POST, COOKIE, SESSION avant de les utiliser dans tes requêtes.

Comme id est un entier tu peux filtrer la variable avec intval(). Pour du texte tu utiliserai mysql_real_escape_string().

Ta déclaration $titre_page doit se faire dans ta condition sinon ton test pour savoir si la variable n'est pas null sera toujours faux.

if($titre_page == NULL) pour tester si une variable existe tu dois utiliser isset() ou empty() sinon PHP produit une erreur de type notice.

Ton code corrigé :


<?php 
 
require "config.php";  
mysql_connect(DB_HOST,DB_LOGIN,DB_PASS); 
mysql_select_db(DB_BDD);

$id = !empty($_GET['id']) ? intval($_GET['id']) : FALSE;

if ($id !== FALSE) 
{ 
  $requete="SELECT * FROM news WHERE news = ".$id." LIMIT 1"; // requete 
  $exeRequete = mysql_query($requete, $cnx_mysql) or die (mysql_error()); 
  $donnees = mysql_fetch_assoc($exeRequete);     
  $titre_page = "News: ". $donnees['titre']; 
} 
?> 
<!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><?php echo !empty($titre_page) ? $titre_page : 'News'; ?></title> 
</head> 
 
<body>

Modifié par jb_gfx (12 Jul 2011 - 20:15)
Merci pour ta réponse et le conseil de sécurité. Je vais me pencher à cette étude alors dés que ce problème sera fixé. Smiley smile

Je viens d'appliquer ton code, et Wamp me renvois deux erreurs ;

Notice: Undefined variable: cnx_mysql in C:\wamp\www\news\voir.php on line 12

Warning: mysql_query() expects parameter 2 to be resource, null given in C:\wamp\www\news\voir.php on line 12

Donc il dit que ça vient de ça :
  $exeRequete = mysql_query($requete, $cnx_mysql) or die (mysql_error());  
  $donnees = mysql_fetch_assoc($exeRequete);    
Ok c'est fait. Puis j'ai eu une erreur ensuite comme quoi il trouvé pas la base, bref j'ai changé ça :
$requete="SELECT * FROM news WHERE news = ".$id." LIMIT 1";

par ça :
$requete="SELECT * FROM news WHERE titre = ".$id." LIMIT 1";


Vu que je dois récupérer le 'titre', je me plante pas j'espère ?
Du coup la page se ré affiche comme il faut, mais ne change pas le titre et laisse à la place "document sans titre" Smiley confus