Lien automatique vers d'autres news.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Lien automatique vers d'autres news.

Re: Lien automatique vers d'autres news.

par JeanJean » 18 janv. 2010, 20:40

En effet, problème réglé. ;)

Re: Lien automatique vers d'autres news.

par AB » 18 janv. 2010, 20:34

Bon alors c'est pas résolu ce problème avec ce que je t'ai dit dans mon message précédent ?

Re: Lien automatique vers d'autres news.

par dunbar » 18 janv. 2010, 20:33


Pour le message d'erreur renvoyé :
La réponse est donnée plus haut

Re: Lien automatique vers d'autres news.

par JeanJean » 18 janv. 2010, 20:28

Plop merci de ta réponse. ;)

Alors dans ma boucle, je dois intégrer tout le reste du script à savoir :
<!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" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
<title>Les Gourmets Explorateurs</title>
</head>

<body>
	<div id="body2">
       	<a href="index.php" class="index"> </a> 
		<div id="calendrier"><center>
		<font face="Comic sans MS" size="2" color="#CC0000"><b><?php echo nl2br(date_fr($date)); ?></b></font>
		</center></div>
        <a href="degustation_10-12.php" class="fleche_gauche"><img src="Boutons/Icone/pre.png" border="0"/></a>
        <div id="titregeant">
		<font face="Tahoma" size="3" color="#000066"><b></i></b>
		<b><?php echo $row['titre']; ?></b>
		</font>
	  </div>
		<div id="cadre"  class="auto">
		<font face="Tahoma" size="2" color="#000066"><br />
		<?php echo nl2br($row['contenu']); ?>
		</font>
		</div>
    	<span class="Roue"><img src="Boutons/Roue/roue.png" /></span>
	  	<a href="degustation.php" class="menu"></a>
		<a href="degustation.php"><img src="Boutons/Police/menu.png" id="Menu" border="0" /></a>
      	<a href="affiche.php" class="Affiche"> </a>
		<a href="affiche.php"><img src="Boutons/Police/affiche.png" id="Affiche" border="0" /></a>
        <a href="interview.php" class="inter"></a>
		<a href="interview.php"><img src="Boutons/Police/interview.png" id="inter" border="0" /></a>
        <a href="reservation.php" class="reservation"></a>     
		<a href="#"><img src="Boutons/Police/reservation.png" id="Reservation" border="0" /></a>
        <div id="DE"><img src="Boutons/Roue/de.png" /></div>
        <div id="ED"><img src="Boutons/Roue/ed.png" /></div>
        <div id="DA"><img src="Boutons/Roue/da.png" /></div>
        <div id="AD"><img src="Boutons/Roue/ad.png" /></div>
        <?php echo '<a href="pdf/'.$row['pdf'].'" class="pdf"> </a>'; ?>
		<a href="index.php" class="Home" /> </a>
		<a href="http://www.facebook.com/pages/Les-gourmets-explorateurs-de-Slow-Food-Paris-Mouffetard/208788453944?ref=search&sid=1033789250.2599145647..1" class="Reseau" /> </a>
		<a href="degustation-construction.php" class="Thematique" /> </a>
		<a href="pdf/recetteFromage1sf_ge.pdf" class="Carnet" /> </a>
		<a href="degustation-construction.php" class="Evenements" /> </a>
		<a href="degustation-construction.php" class="Dos" /> </a>
	</div>
</body>
</html>
En effet, j'ai fais les deux tableaux et c'est beaucoup plus claire !
$tableau_date = explode('-',$row['date']);
$timestamp = mktime(0,0,0,$tableau_date[1],$tableau_date[2],$tableau_date[0]);

$date = date('l j F Y',$timestamp);

$cible = array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday','January','February','March','April','May','June','July','August','September','October','November','December');
$rempl = array('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche','janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobtre','novembre','décembre',);

$date = str_replace($cible,$rempl,$date);
Pour le message d'erreur renvoyé :

Notice: Undefined offset: 1 in D:\wamp\www\GourmetPHP\degustation.php on line 14

Notice: Undefined offset: 2 in D:\wamp\www\GourmetPHP\degustation.php on line 14

Warning: mktime() expects parameter 6 to be long, string given in D:\wamp\www\GourmetPHP\degustation.php on line 14


La ligne en compte :
$timestamp = mktime(0,0,0,$tableau_date[1],$tableau_date[2],$tableau_date[0]);

Re: Lien automatique vers d'autres news.

par AB » 18 janv. 2010, 20:03

$lecture = mysql_query('SELECT * FROM news WHERE categorie="'.$page.'" ORDER BY date DESC LIMIT 0,1');
while($row = mysql_fetch_assoc($lecture)){

}
$tableau_date = explode('-',$row['date']);
$timestamp = mktime(0,0,0,$tableau_date[1],$tableau_date[2],$tableau_date[0]);

$date = date('l j F',$timestamp);

function date_fr(&$date){
$date = str_replace('Monday','Lundi',$date);
$date = str_replace('Tuesday','Mardi',$date);
$date = str_replace('Wednesday','Mercredi',$date);
$date = str_replace('Thursday','Jeudi',$date);
$date = str_replace('Friday','Vendredi',$date);
$date = str_replace('Saturday','Samedi',$date);
$date = str_replace('Sunday','Dimanche',$date);

$date = str_replace('January','janvier',$date);
$date = str_replace('February','février',$date);
$date = str_replace('March','mars',$date);
$date = str_replace('April','avril',$date);
$date = str_replace('May','mai',$date);
$date = str_replace('June','juin',$date);
$date = str_replace('July','juillet',$date);
$date = str_replace('August','août',$date);
$date = str_replace('September','septembre',$date);
$date = str_replace('October','octobtre',$date);
$date = str_replace('November','novembre',$date);
$date = str_replace('December','décembre',$date);
return ($date);
}

?>[/php]

Cependant, j'ai quelques problèmes...
M'étonne pas que tu aies quelques problèmes. Ton while($row = mysql_fetch_assoc($lecture)) liste toutes les lignes dans le vide puisque tu as une accolade fermante juste après l'accolade ouvrante :lol:

Et si comme je te l'ai indiqué, tu pouvais faire des tableaux de remplacement pour utiliser str_replace ça serait plus joli et plus optimisé puisque tu n'utiliserait plus qu'un str_replace quand tu appelles ta fonction date_fr contre 19 actuellement !

EDIT : Quand tu nous recopie un message d'erreur, tu pourrais nous indiquer quelle ligne correspond au numéro indiqué. Comment veux-tu qu'on le devine :?:

Et pourquoi au passage tu passes la date par référence avec &date dans ta fonction date_fr ? Cela devrait fonctionner avec un simple function date_fr($date) { ... }

Re: Lien automatique vers d'autres news.

par dunbar » 18 janv. 2010, 19:32

Notice: Undefined offset: 1 in D:\wamp\www\GourmetPHP\degustation.php on line 14

Notice: Undefined offset: 2 in D:\wamp\www\GourmetPHP\degustation.php on line 14

Warning: mktime() expects parameter 6 to be long, string given in D:\wamp\www\GourmetPHP\degustation.php on line 14

Salut,
Il te dit que $tableau_date[2] et $tableau_date[1] ne sont pas definie ou n'existe pas
Est tu certain que c'est pas
explode(':',$row['date']);
//A la place de 
explode('-',$row['date']);
Un champ date dans MySQL est sous cette forme 00:00:00 si je ne ma trompe pas :wink:

Re: Lien automatique vers d'autres news.

par JeanJean » 18 janv. 2010, 19:04

Ah d'accord désolé. ;)

Edit : Vous pouvez le dire aussi si je n'ai pas été assez claire.

Re: Lien automatique vers d'autres news.

par jojo1000 » 18 janv. 2010, 18:39

les ups sont interdits sur phpfrance, si ta requête ne trouve pas de réponse c'est que personne ne l'a.
Reformule ta question afin d'être mieux compris.
(j'me prends pour un modo!!!) :twisted:

Re: Lien automatique vers d'autres news.

par JeanJean » 18 janv. 2010, 18:27

Up. :)

Re: Lien automatique vers d'autres news.

par JeanJean » 17 janv. 2010, 13:46

1/ Quelques explications sur la gestion des dates. ;)

- Dans la BDD, la date est sous la forme aaaa-mm-jj. Or moi la date doit se trouver dans ce format là : "Dimanche 17 janvier"
- J'utilise explode() afin d'enlever les tirets entre chaque élément de la date.
- Ensuite mktime() me permet de retourner un timestamp avec une date donnée. Dans mon cas, je retourne le tableau associatif crée au préalable avec explode()
- Ensuite, la fonction date() formule la date sous cette forme : "Sunday 17 January" à partir sur timestamp.
- La fontion date_fr() remplace les jours et mois Anglais en Français.

Je suis conscient que la méthode utilisé est vraiment pas très propre, mais totalement fonctionnel.
Avec la méthode que tu me propose, ça reviendra un peu au même non ? Mise à part l'utilisation d'un tableau. ;)

2/ Si, j'y ai déjà pensé en ajoutant un LIMIT 0,1 dans la requête SQL. :
<?php
require 'config.php';
mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
mysql_select_db(DB_BDD);


$page = basename($_SERVER["SCRIPT_NAME"]);

$lecture = mysql_query('SELECT * FROM news WHERE categorie="'.$page.'" ORDER BY date DESC LIMIT 0,1');
while($row = mysql_fetch_assoc($lecture)){

}
$tableau_date = explode('-',$row['date']);
$timestamp = mktime(0,0,0,$tableau_date[1],$tableau_date[2],$tableau_date[0]);

$date = date('l j F',$timestamp);

function date_fr(&$date){
	$date = str_replace('Monday','Lundi',$date);
	$date = str_replace('Tuesday','Mardi',$date);
	$date = str_replace('Wednesday','Mercredi',$date);
	$date = str_replace('Thursday','Jeudi',$date);
	$date = str_replace('Friday','Vendredi',$date);
	$date = str_replace('Saturday','Samedi',$date);
	$date = str_replace('Sunday','Dimanche',$date);
	
	$date = str_replace('January','janvier',$date);
	$date = str_replace('February','février',$date);
	$date = str_replace('March','mars',$date);
	$date = str_replace('April','avril',$date);
	$date = str_replace('May','mai',$date);
	$date = str_replace('June','juin',$date);
	$date = str_replace('July','juillet',$date);
	$date = str_replace('August','août',$date);
	$date = str_replace('September','septembre',$date);
	$date = str_replace('October','octobtre',$date);
	$date = str_replace('November','novembre',$date);
	$date = str_replace('December','décembre',$date);
	return ($date);
}

?>
Cependant, j'ai quelques problèmes :

A/ Le titre et le contenu ne s'affiche plus, et la date : "Jeudi 1 janvier 1970"
B/ Le script me retourne ces erreurs :

Notice: Undefined offset: 1 in D:\wamp\www\GourmetPHP\degustation.php on line 14

Notice: Undefined offset: 2 in D:\wamp\www\GourmetPHP\degustation.php on line 14

Warning: mktime() expects parameter 6 to be long, string given in D:\wamp\www\GourmetPHP\degustation.php on line 14


Merci. ;)

Re: Lien automatique vers d'autres news.

par AB » 16 janv. 2010, 21:39

1/ Non je veux dire de mettre tes éléments à remplacer et tes éléments de remplacement dans un tableau. Un exemple jusqu'à jeudi, je te laisse compléter les tableaux $cible et $remplacement.
$date = 'Wednesday';

$cible = array('Monday','Tuesday','Wednesday','Thursday');
$remplacement =array('Lundi','Mardi','Mercredi','Jeudi');

$date = str_replace($cible,$remplacement,$date);

echo $date;
2/
Pourquoi ne fais tu pas while($row = mysql_fetch_assoc($lecture)) {...} pour récupérer toutes tes valeurs.

Re: Lien automatique vers d'autres news.

par JeanJean » 16 janv. 2010, 16:36

Plop.

1/ J'ai testé en utilisant seulement la première requête. Le second tableau associatif n'affiche rien et quand je test avec un or die('Erreur'); le script me retourne "Erreur". :s
2/ Ça l'est, mais je n'ai pas le choix. ;) J'ai vu pas mal de solution différente sur internet, mais à part la méthode avec un tableau, c'est la seul qui marche.
3/ Ah, mince. Tu ne connaitrais pas par hasard une regex qui permet de sélectionner la ligne d'un tableau à partir du résultat d'un autre tableau ?
4/ Justement, j'ai besoin de se deuxième tableau pour comparer les dates. :D

Merci. ;)

Re: Lien automatique vers d'autres news.

par AB » 16 janv. 2010, 16:09

1/ Quel est l'intérêt de faire deux fois la même requête ?
2/ ça me paraît bien compliqué ta gestion des dates :-k
3/ usort pour simplement trouver une égalité ? D'autre part usort attend une fonction en deuxième paramètre, $row['date'] est-elle une fonction ?

EDIT 4/ Quand tu as plusieurs remplacements à faire avec str_replace, utilises plutôt des tableaux.

Re: Lien automatique vers d'autres news.

par JeanJean » 16 janv. 2010, 13:12

Bonjour.

Finalement après une grande réflexion, j'ai un schéma de conception.

Voilà comment je m'y prend.

1) Je fais un SELECT de tout ce qui se trouve dans ma table news où la page correspond avec la page indiqué lors de la conception de la news. J'ajoute que l'affichage se fait en ordre décroissant : De la date la plus grande à la plus petite.
2) J'utilise mysql_fetch_assoc pour retourner un tableau associatif. Ensuite je peux donc afficher le titre le contenu etc... Attention je n'utilise pas de boucle. De cette façon, c'est la première news du tableau qui est affiché/
3) Maintenant je fais un second SELECT. Cette fois je sélectionne la date des news de la page qui correspond avec la page indiqué lors de la conception de la news. L'affichage est encore en ordre décroissant.
4) Je fais un second tableau associatif mais cette fois j'utilise une boucle pour m'afficher toutes les dates.

Jusque là tout va bien. Cependant, j'ai un problème au point suivant :

5) Je souhaite sélectionner la ligne du second tableau où la valeur est égal à la date qui m'est retourné avec le premier tableau. J'ai farfouiller avec mon ami Google et je suis tombé sur cette regex.
http://www.php.net/manual/fr/function.usort.php
A priori, c'est exactement ce que je cherche. Seul problème, le script me retourne cette erreur :

Warning: usort() expects parameter 1 to be array, boolean given in D:\wamp\www\GourmetPHP\degustation.php on line 46

J'ai déjà eu cette erreur plusieurs fois et à chaque fois c'était une erreur avec mysql_query. Or là, j'ai testé avec un or die, ça ne me retourne aucune erreur. :s

Voilà le code :
<?php
require 'config.php';
mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
mysql_select_db(DB_BDD);


$page = basename($_SERVER["SCRIPT_NAME"]);

$lecture = mysql_query('SELECT * FROM news WHERE categorie="'.$page.'" ORDER BY date DESC');
$row = mysql_fetch_assoc($lecture);

	$tableau_date = explode('-',$row['date']);
	$timestamp = mktime(0,0,0,$tableau_date[1],$tableau_date[2],$tableau_date[0]);

	$date = date('l j F',$timestamp);

function date_fr($date){
	$date = str_replace('Monday','Lundi',$date);
	$date = str_replace('Tuesday','Mardi',$date);
	$date = str_replace('Wednesday','Mercredi',$date);
	$date = str_replace('Thursday','Jeudi',$date);
	$date = str_replace('Friday','Vendredi',$date);
	$date = str_replace('Saturday','Samedi',$date);
	$date = str_replace('Sunday','Dimanche',$date);
	
	$date = str_replace('January','janvier',$date);
	$date = str_replace('February','février',$date);
	$date = str_replace('March','mars',$date);
	$date = str_replace('April','avril',$date);
	$date = str_replace('May','mai',$date);
	$date = str_replace('June','juin',$date);
	$date = str_replace('July','juillet',$date);
	$date = str_replace('August','août',$date);
	$date = str_replace('September','septembre',$date);
	$date = str_replace('October','octobtre',$date);
	$date = str_replace('November','novembre',$date);
	$date = str_replace('December','décembre',$date);
	return ($date);
}

$nbr_news = mysql_query('SELECT date FROM news WHERE categorie="'.$page.'" ORDER BY date DESC') or die("erreur !");
while($data = mysql_fetch_assoc($nbr_news)){
}
$test = usort($data, $row['date']);
echo $test;

?>
Merci. :)

Re: Lien automatique vers d'autres news.

par JeanJean » 15 janv. 2010, 22:55

Wouh ! Que de réponses à mon topic. :p

McGawel à tout a faire cerné ma question. ;)

Je vais être un peu plus explicite.

Dans ma page admin.php, j'ai un formulaire qui contient titre, contenu, pdf, page et date.

pdf : Nom du fichier qui sera linker dans la news.
page : Page concerné.
date : Date de l'évènement.

Retour sur la préparation de mes pages pour accueillir les news. :)

Déjà, je demande à la lecture de la BDD de me retourner exclusivement les news qui répondent au nom de ma page. Si ma page est index.php, je demande que les news pour index.php. Dans mon select, j'ai aussi placé un ORDER BY en ordre décroissant.

Ce que je voudrais par la suite, c'est un script me permettant de déterminer si il y a des news avant et après et ceux avec pour indice la date. Si il y en a avant, il faut afficher un lien vers cette news si il y en a après, on fait de même. :)

Voilà merci. ;)

Edit : Le code en question :
<?php
require 'config.php';
mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
mysql_select_db(DB_BDD);


$page = basename($_SERVER["SCRIPT_NAME"]);

$lecture = mysql_query('SELECT * FROM news WHERE categorie="'.$page.'" ORDER BY date DESC LIMIT 0,1');
$row = mysql_fetch_assoc($lecture);

$tableau_date = explode('-',$row['date']);
$timestamp = mktime(0,0,0,$tableau_date[1],$tableau_date[2],$tableau_date[0]);

$date = date('l j F',$timestamp);

function date_fr($date){
	$date = str_replace('Monday','Lundi',$date);
	$date = str_replace('Tuesday','Mardi',$date);
	$date = str_replace('Wednesday','Mercredi',$date);
	$date = str_replace('Thursday','Jeudi',$date);
	$date = str_replace('Friday','Vendredi',$date);
	$date = str_replace('Saturday','Samedi',$date);
	$date = str_replace('Sunday','Dimanche',$date);

	$date = str_replace('January','janvier',$date);
	$date = str_replace('February','février',$date);
	$date = str_replace('March','mars',$date);
	$date = str_replace('April','avril',$date);
	$date = str_replace('May','mai',$date);
	$date = str_replace('June','juin',$date);
	$date = str_replace('July','juillet',$date);
	$date = str_replace('August','août',$date);
	$date = str_replace('September','septembre',$date);
	$date = str_replace('October','octobtre',$date);
	$date = str_replace('November','novembre',$date);
	$date = str_replace('December','décembre',$date);
	return ($date);
}

?>