Une page qui se créée automatiquement ...

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 : Une page qui se créée automatiquement ...

par iclo » 14 déc. 2005, 15:34

Tu peux avoir différentes versions dans une même base de données, tout est une question de modélisation et d'optimisation de la structure. Ce que tu décris est un système relativement fréquent, et ne pose pas de problèmes particuliers.

L'usage d'une base de donnée permet justement d'avoir la plus grande souplesse possible.

Pour les systêmes de cache, c'est sujet intéressant. mais ce genre de procédé vient généralement en "surcouche" en venant doublonner une base de donnée. Mais la base de donnée reste le stockage où se trouve toutes informations (Sinon problême de cohérence entre le cache et la Db)

par jobherzt » 14 déc. 2005, 00:42

je sais que je parasite un peu ce post en le faisant partir sur un autre debat, mais ca m'interresse : il me semble que les logiciels que j'evoquias integraient un systeme de "cache". qu'est ce que c'est si ce n'est pas ce dont je parlais ? ( ca n'est pas une question oratoire, c'est une vraie question, je ne pretends pas avoir la reponse :-) ). accessoirement, dans mon cas :

- j'ai une serie de fiches, rangee dans une ou plusieurs categorie, ecrite dans un langage style bbcode/spip/wikipedia pour la mise en forme, avec codage des caractere sepciaux avant affichage
- tout le monde peut creer / modifier un article, mais je verifie avant de publier. accessoirement, j'aimerais qu'il soit possible de faire / modifier un article en plusieurs fois, ie de pouvoir laisser un article "en plan", inachevé sans que cela soit vu par les visiteurs. donc a priori :

- pour creer l'article, je dois l'afficer, mais aussi afficher les categorie qui le contiennet, l'auteur, + d'autres infos -> bcp d'appels a la base
- dans tous les cas, je dois avoir, me semble t il, 2 versions du meme article : la version "presentable", et la version "en developpement" ( que ce soit pour cause de travail en cours ou d'attente de validation de ma part )
- mon systeme de codage du texte fait que le contenu resultant pour l'affichage differe sensiblement de ce que l'utilisateur a tapé. or, pour pouvoir modifier un article dans de bonne condition, il faut qu'il retrouve ce qu'il a tapé, ie l'article dans mon pseudo langage avec des letres normales.
- le codage pseudo code -> html me semble forcement un peu bourrin, je n'imagine guere le faire a chauqe affichage de l'article.

dans ce cas, et dans ce cas seulement, ne croit tu pas que les avantages que je cherche necessitent forcement 2 versions, dont une en dur tant qu'a faire, de mes fiches ( au detriment, c'est vrai, de la place sur le disque, mais ai-je le choix ? et n'y gagne t'on pas en confort ?) ? ( encore une fois, je ne cherche pas a te convaincre que j'ai raison, il s'agit bien d'une question ouverte )

si tu as des elements de reponse, je suis preneur..

accessoirement, dans tous les cas wikipedia conserve x versions differentes de ses articles, puisque il y a un systeme d'historique, donc dur ou pas ils ont choisi de sacrifier de l'espace disque ( beaucoup ! ) pour ajouter une fonctionnalité interressante

par iclo » 13 déc. 2005, 22:31

jobherzt : non, à ma connaissance les applications dont tu parles ne travaillent pas avec des fichiers en "dur", mais bien avec des pages dynamiques, mais le tout est caché par de l'url rewriting. (une recherche te renseignera mieux que moi sur le sujet)
Quand à différencier les versions d'un article avec stockage Db et stockage en dur, cela va avant tout augmenter considerablement l'espace de stockage nécessaire, donc....

flyxter1: l'idée y est tout à fait; juste une remarque : il vaudrait mieux utiliser un id unique dans le lien plutot que le titre de l'article.(si tu n'as pas d'in unique dans ta db, ajoutes un champ autoincrémenté) ce qui te garantira qu'il n'y aura pas de risque de confusion (cas de deux articles avec le même titre) et limitera les risques de problême en cas d'espace dans le titre.
<?php

    $reponse4 = mysql_query('SELECT id, titre FROM creer_un_article');
    while ($donnees4 = mysql_fetch_array($reponse4))
    {
    echo '<a href="article.php?id='.$donnees4[id'].'">'.$donnees4['titre'].'</a></br>';
    }
?>

Ensuite dans la page qui affichera le texte de l'article, il te suffit de récuperer l'id avec $_GET['id']
Ce qui te donnera :
<?
$reponse4 = mysql_query('SELECT * FROM creer_un_article where  id='.$_GET['id']);
$donnees4 = mysql_fetch_array($reponse4))
echo '"$donnees4['text'];

?>

Reste à rafinner un peu, notamment en ne récuperant dans le select que les champs utiles.

par Invité » 13 déc. 2005, 21:55

En fait, J'ai fais ce lien :
<?php

	$reponse4 = mysql_query('SELECT * FROM creer_un_article');
	while ($donnees4 = mysql_fetch_array($reponse4))
	{
	echo '<a href="article.php?'.$donnees4['titre'].'">'.$donnees4['titre'].'</a></br>';
	}
?>
Et dans la page article.php, je dois faire un $_GET ? si oui, je dois mettre une condition ou pas ?

par jobherzt » 13 déc. 2005, 21:50

le fait d'ecrire en dur des fichiers a plusieurs avantages :

- allegement de la charge du serveur
- modification des articles : si tu as un truc qui code les accents, ou un langage style bbcode, tu stocke dans la base la version non codée ( donc facile a modifier ) et en dur la version codee.
- en plus, si tu as des articles consequent, ou que tu veux exercer un controle sur la pulication de modification, tu peux stocker dans la base la version modifiee tant qu'elle n'est pas terminee / validée, et la reecrire en dur seulement quand tu l'as valide. en gros, c'est le meilleur moyen pour gere une version brouillon / modifiable et une version validee / publiable

pour le design, il suffit de fonctionner avec des include et des feuilles de style, et la modification globale ne pose aucun probleme.

il me semble que SPIP, ou Wikipedia par exemple fonctionnent comme ca. effectivement, la place prise est plus importante, mais ca amene des avantages qui sont interressant, notamment dans le cadre d'un site collaboratif ou tout le monde peut ecrire voire modifier des articles. apres, tout depend du fonctionnement du site, c'est une technique qui colle a certain cas precis ( le mien, en l'occurence ), et comme c'est ce qu'avait l'air de vouloir faire notre ami, j'essayais de l'aider dans ce sens. mais il est tout a fait possible que ce soit une erreur dans son cas.

par Invité » 13 déc. 2005, 21:34

Ben, j'ai appris le php !
Je sais les requètes Mysql etc ... pour effacer, enregistrer ...

Mais en fait c'est pour mon lien :
	$reponse4 = mysql_query('SELECT * FROM creer_un_article');
	while ($donnees4 = mysql_fetch_array($reponse4))
	{
	echo '<a href="'.$donnees4['titre'].'.php">'.$donnees4['titre'].'</a></br>';
	}
Je dois mettre quoi dans le lien alors ?

par iclo » 13 déc. 2005, 21:28

La solution (ou en tout cas, celle qui est très majoritairement utilisée)
c'est en gros une seule page php, qui servira pour afficher les articles.
Les articles sont sauvegarder dans une base de donnée.
A partir d'une information, (par exemple passée un lien) le fichier d'affichage, va savoir quel article il doit afficher.

On obtiendra donc des liens du style:
article.php?id=23

Pour pouvoir mettre en oeuvre cette solution tu dois maitriser un minimum les bases de données, je te conseillerais donc de commencer par lire le tutorial sur le sujet :
http://www.phpfrance.com/tutoriaux/index.php/p2
(Les premiers tutoriaux sur mysql te seronr utils)

par Invité » 13 déc. 2005, 21:21

Oui c'est exact, mais tu as beaucou plus d'xperience que moi ...
Et je sus totalement pommé ! Alors si tu pourrais m'aider comme jobherzt, ce serait sympa ...

par iclo » 13 déc. 2005, 21:20

C'est quoi l'interet de créer des fichiers en dur pour chaque article, vous pensez vraiment que c'est comme ça que ça marche pour les sites proposant un tant soit peu de contenu.

Et que se passe-t-il lors que vous voulez faire une modification même mineure dans le graphisme de l'affichage d'un article? Vous devez tout remodifier, et si il y a 200 articles ou plus ??
Et on ne parle même pas de l'espace perdu, quand on estime la partie de code commune à tous les articles, on obtient un overhead de 100%
Soyons sérieux.... :D

par Invité » 13 déc. 2005, 21:16

Je te donne mon site pour que tu puisse voir un aperçu !!!
http://www.stopinfo.info
Regarde dans liste des articles, les 2 dernier articles, tu auras beau cliquer dessus, les pages ne s'afficheront pas car elles n'existre pas .. Mais les autres, elles existe car j'avais gardé la méthode pour créer des pages ...

par Invité » 13 déc. 2005, 21:14

En plus, tu dis bien, tu créé un fichier 'article13.php' ...
C'est bien ce que ej disais, tu es obligé de créer des fichiers ...

par Invité » 13 déc. 2005, 21:11

Je comprends très bien ça ...
Mais je ne vois pas vraiment pas comment faire ça ...
Surtout que fopen, fwrite, je l'ai ai utilisé, mais pour créer des fichiers automatiquement ... Alors je ne vois pas l'utilisation dans le cas que tu m'expliques. Là, je suis vraiment pomé pour faire ce que tu me dis ...

par jobherzt » 13 déc. 2005, 21:07

comme ton code est un peu long, je vais te repondre sans savoir si c'est ce que tu veux vraiment. d'une maniere ou d'une autre, a cahque fois que tu cree un article il faut que tu recupere un identifiant pour cet article. ca peut etre son nom, mais c'est plus sage de prenre un n°.

par exemple un type veut creer un article. tu lui affecte le n° 13. en utilisant les fonctions de php ( fopen, fwrite,..voir la doc officielle ), tu cree un fichier 'article13.php', dans lequel tu insere ce que le type a marque dans le formulaire. et pour que l'article s'integre au site, tu y mets aussi le code de tes menus, tes styles, etc... du coup tu auras vraiment un fichier "en dur" qui contiendras l'article.

par Invité » 13 déc. 2005, 20:44

C'est plus principalement cette partie que je ne comprends pas ...
- tu cree un fichier article_[numero unique].php, dans lequel tu ecris les donnees du formulaire, et les elements qui ne varient pas d'un article a un autre.

par Invité » 13 déc. 2005, 20:41

En fait, moi j'enregistre les articles et je créé une nouvelle page, je fais les 2 !!
Donc c'est inutile !!!

Par contre si vous pouvez m'expliquer très clairement car je débute en php !!! Merci beaucoup !!!





Voila mes codes :

Code de la page où l'on écrit les articles

...
<?php
session_start();
?>


<HTML>


<HEAD>
<TITLE>Stopinfo : La bibliothèque de la connaissance</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<link href="format.css" rel="stylesheet" type="text/css" />

<script language="javascript">
function code(bbcode, textarea)
{
document.getElementById(bbcode).value == bbcode

        var textarea = document.getElementById(textarea);
        textarea.value +=  bbcode ;
}
</script>


		<script type="text/javascript">
var timer=0;
var ptag=String.fromCharCode(5,6,7);
function  visualisation()
{
	t=document.forms[0].titre.value
	if (document.getElementById) document.getElementById("apercu_titre").innerHTML=t
	
	c=document.forms[0].contenu.value
	c=nl2br(c)
	if (document.getElementById) document.getElementById("apercu_contenu").innerHTML=c
	
	if (document.forms[0].auto.checked) timer=setTimeout(visualisation,50)
}
function cacher()
{
	tabler = document.getElementById('apercu');
	if (document.forms[0].auto.checked)
	{
		tabler.style.display="";
	}
	else
	{
		tabler.style.display="none";
	}
}
function automatique()
{
	if (document.forms[0].auto.checked) visualisation()
	else cacher()
}
function nl2br(c)
{
	texte=new String(c);
	return texte.replace(/\n/g,'<br />');
}
</script>




</HEAD>


<body>

<div class="global"> <!-- Il contient tous les autres blocs -->

<?php
if (isset($_POST['envoyer']))
{

if (isset($_POST['envoyer']))
{
?>



<!------------------------------------------>
<!------------- BLOC MENU ----------->
<!------------------------------------------>

<?php
include("blocmenu.php");
?>

<!-------------------------------------------->
<!---------- BLOC CONTENU ---------->
<!-------------------------------------------->


<div class="lebloccontenu">
	<div class="lebloccontenutitre">
	Accueil <?php include("connectes.php"); ?>
	</div>
	<div class="titre1">
	Accueil 
	</div>
	<div class="texte">
	<hr></br>
		<div class="texte_presentation">
		<strong>Bienvenue sur Stopinfo, la Bibliothèque de la Connaissance.</strong>
		</div></br></br></br></br>



<?php


		mysql_connect("db203.unetun.com","dbo147502165","6GYQFHSV");
		mysql_select_db("db147502165");

	
	$reponse2 = mysql_query('SELECT * FROM creer_un_article ORDER BY id DESC LIMIT 0,1');
	$donnees2 = mysql_fetch_array($reponse2);
		
	if ($_SESSION['titre_article'] != $donnees2['titre'])
	{
	
	if ($_POST['id_creer_un_article'] != 0)
    {
         // C'est une modification, on met juste à jour le titre et le contenu
         mysql_query("UPDATE creer_un_article SET titre='" . $_SESSION['titre_article'] . "', contenu='" . $_SESSION['contenu_article'] . "' WHERE id=" . $_POST['id_creer_un_article']);
    
    }
    else
    {
       // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
	   $retour = mysql_query("INSERT INTO creer_un_article VALUES('','".$_SESSION['pseudo']."','".$_SESSION['titre_article']."','".$_SESSION['contenu_article']."', '')");
    }
	
	
	}

$contenu1 = $_SESSION['contenu_article'];
$titre = $_SESSION['titre_article'];
$fichier = ''.$titre.'.php'; //le nom de ton fichier .php et le même que le titre que tu donnes plus //haut
if (!file_exists($fichier)) 
{ //si le fichier n'existe pas
umask(0000); 
touch("$fichier"); 
$open_file = fopen("$fichier","w+"); 
fwrite($open_file,'<?php
session_start();
?>
<HTML>
<HEAD>
<TITLE>Stopinfo : La bibliothèque de la connaissance</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<link href="format.css" rel="stylesheet" type="text/css" />
		<script type="text/javascript">
var timer=0;
var ptag=String.fromCharCode(5,6,7);
function  visualisation()
{
	t=document.forms[0].titre.value
	if (document.getElementById) document.getElementById("apercu_titre").innerHTML=t
	
	c=document.forms[0].contenu.value
	c=nl2br(c)
	if (document.getElementById) document.getElementById("apercu_contenu").innerHTML=c
	
	if (document.forms[0].auto.checked) timer=setTimeout(visualisation,50)
}
function cacher()
{
	tabler = document.getElementById(\'apercu\');
	if (document.forms[0].auto.checked)
	{
		tabler.style.display="";
	}
	else
	{
		tabler.style.display="none";
	}
}
function automatique()
{
	if (document.forms[0].auto.checked) visualisation()
	else cacher()
}
function nl2br(c)
{
	texte=new String(c);
	return texte.replace(/\n/g,\'<br />\'); // rajouter les 2 slash.............
}
</script>
</HEAD>
<body onload="automatique()">
<div class="global"> <!-- Il contient tous les autres blocs -->
<!------------------------------------------>
<!------------- BLOC MENU ----------->
<!------------------------------------------>
<?php 
include("blocmenu.php")
?>
<!-------------------------------------------->
<!---------- BLOC CONTENU ---------->
<!-------------------------------------------->
<div class="lebloccontenu">
	<div class="lebloccontenutitre">
	Accueil 
	</div>
	<div class="titre1">'
	.$titre.
	'</div>
	<div class="texte">
	<hr></br>'
	.$contenu1.
	'<a href="creer_un_article1.php?modifier_un_article='.$titre.'">Modifier</a>
<a href="creer_un_article1.php?supprimer_news=<?php' . $donnees['id'] .'?>">Supprimer</a>
	</div>
</body>
</html>'); 
fclose($open_file); 

	
}
$reponse3 = mysql_query('SELECT * FROM creer_un_article');
	while ($donnees3 = mysql_fetch_array($reponse3))
	{
	echo '<a href="'.$donnees3['titre'].'.php">'.$donnees3['titre'].'</a></br>';
	}

}
?>


<?php

	

?>

<?php
}
else
{
?>



<!------------------------------------------>
<!------------- BLOC MENU ----------->
<!------------------------------------------>

<?php
include("blocmenu.php");
?>

<!-------------------------------------------->
<!---------- BLOC CONTENU ---------->
<!-------------------------------------------->


<div class="lebloccontenu">
	<div class="lebloccontenutitre">
	Accueil <?php include("connectes.php"); ?>
	</div>

	<div class="texte">
	</br>
		<div class="texte_presentation">
		<strong>Liste des nouveaux articles.</strong>
		</div></br></br></br></br>
<?php

		mysql_connect("db203.unetun.com","dbo147502165","6GYQFHSV");
		mysql_select_db("db147502165");

	$reponse4 = mysql_query('SELECT * FROM creer_un_article');
	while ($donnees4 = mysql_fetch_array($reponse4))
	{
	echo '<a href="'.$donnees4['titre'].'.php">'.$donnees4['titre'].'</a></br>';
	}
?>
<?php
}
?>
</div>


</body>
</html>

Code pour la page qui recoit les articles !!! quand je cliquye sur envoyer
<?php
session_start();
?>


<HTML>


<HEAD>
<TITLE>Stopinfo : La bibliothèque de la connaissance</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<link href="format.css" rel="stylesheet" type="text/css" />

<script language="javascript">
function code(bbcode, textarea)
{
document.getElementById(bbcode).value == bbcode

        var textarea = document.getElementById(textarea);
        textarea.value +=  bbcode ;
}
</script>


		<script type="text/javascript">
var timer=0;
var ptag=String.fromCharCode(5,6,7);
function  visualisation()
{
	t=document.forms[0].titre.value
	if (document.getElementById) document.getElementById("apercu_titre").innerHTML=t
	
	c=document.forms[0].contenu.value
	c=nl2br(c)
	if (document.getElementById) document.getElementById("apercu_contenu").innerHTML=c
	
	if (document.forms[0].auto.checked) timer=setTimeout(visualisation,50)
}
function cacher()
{
	tabler = document.getElementById('apercu');
	if (document.forms[0].auto.checked)
	{
		tabler.style.display="";
	}
	else
	{
		tabler.style.display="none";
	}
}
function automatique()
{
	if (document.forms[0].auto.checked) visualisation()
	else cacher()
}
function nl2br(c)
{
	texte=new String(c);
	return texte.replace(/\n/g,'<br />');
}
</script>




</HEAD>


<body>

<div class="global"> <!-- Il contient tous les autres blocs -->

<?php
if (isset($_GET['action']) and ($_GET['action'] == 'creer_un_article') and isset($_SESSION['pseudo']) AND isset($_SESSION['mot_de_passe']))
{
?>

<!------------------------------------------>
<!------------- BLOC MENU ----------->
<!------------------------------------------>

<?php
include("blocmenu.php");
?>

<!-------------------------------------------->
<!---------- BLOC CONTENU ---------->
<!-------------------------------------------->


<div class="lebloccontenu">
	<div class="lebloccontenutitre">
	Accueil <?php include("connectes.php"); ?>
	</div>
	<div class="titre1">
	Accueil 
	</div>
	<div class="texte">
	<hr></br>
		<div class="texte_presentation">
		<strong>Bienvenue sur Stopinfo, la Bibliothèque de la Connaissance.</strong>
		</div></br></br></br></br>


<?php
mysql_connect("localhost", "root", "");
mysql_select_db("essai_php");

if (isset($_POST['contenu']) and isset($_POST['titre'])) // Si on demande de modifier une news
{
    
    // On place le titre et le contenu dans des variables simples
    $titre = $_POST['titre'];
    $contenu = $_POST['contenu'];

	
	
	
}
else // C'est qu'on rédige une nouvelle news
{
    // Les variables $titre et $contenu sont vides, puisque c'est une nouvelle news
    $titre = '';
    $contenu = '';
    $id_creer_un_article = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
	
	
}
?>
	
<form action="" method="post" name="formulaire">
<p>Titre : <input type="text" size="30" name="titre" value="<?php echo $titre; ?>" id="titre"/></p>

<p>
    Contenu :<br />
    <textarea name="contenu" cols="50" rows="10" id="contenu">
	<?php echo $contenu; ?>
    </textarea><br/>
    
    <input type="hidden" name="id_news" value="<?php echo $id_news; ?>" />
    <input type="submit" value="Prévisualiser" />
	
</p>
</form>



	
		
<?php
}
else
{
echo '<div class="cadre_connexion_erreur"><strong>Vous devez vous identifier.</strong></br></br><a href="index.php">Suivant</a></div>';
}
?>



<?php
if (isset($_POST['contenu']) and isset($_POST['titre']))
{
?>

<div class="cadre_news1">
    
        <?php echo ''.$_POST['titre'].''; ?>
		</div>
       
		
<div class="cadre_news2">

	<?php
    // On enlève les éventuels antislash PUIS on crée les entrées en HTML (<br />)
	
    $contenu = nl2br(stripslashes(htmlentities($_POST['contenu'])));

    echo $contenu.'</br><br>';
	
	$_SESSION['contenu_article'] = $contenu;
	$_SESSION['titre_article'] = $_POST['titre'];
	
?>	
	</div>

<form action="liste_article.php" method="post" name="formulaire">
<input type="submit" value="Envoyer" name="envoyer"/>
</form>	
<?php	
}
?>

</body>
</html>