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

Eléphanteau du PHP | 21 Messages

10 déc. 2005, 12:24

Bonjour,

J'aimerais savoir comment faire une page qui se créé automatiquement ! Comme en gros sur le site Wikipedia, lorsque l'on créé un nouvel article, il y a une nouvelle page qui se créé automatiquement !
Jj'aurai voulu savoir comment faire !

Merci ! :)

Eléphant du PHP | 142 Messages

10 déc. 2005, 23:53

sur wikipedia il utilisent un script nomé wiki, dans le cas de wikipedia : http://www.mediawiki.org/

la page est pas réellement créer ..

ce qu'ils font c'est afficher le texte stocker dans une base de donnée ou un fichier.

Eléphant du PHP | 383 Messages

12 déc. 2005, 00:05

le plus simple, c'est de creer un repertoire avec le nom de l'article, et de creer dedans un index.php qui affiche le contenu de l'article. precise un peu ta question, et on precisera la reponses !

flyxter1
Invité n'ayant pas de compte PHPfrance

13 déc. 2005, 13:42

En fait, j'aimerais que chacun de mes visteurs puissent créer un ou plusieurs articles ... Alors j'ai pensé que dès qu'il envoyer leur articles, une page se créée ...

Mais à priori, ce n'est pas la bonne solution ?

Je n'ai pas trop compris ce que vous me proposez ...

Eléphant du PHP | 383 Messages

13 déc. 2005, 15:03

@grummfy : si, la page est reellement crée, meme si l'article est aussi stocke dans la BDD. ca s'appelle la mise en cache et ca soulage le serveur.

quand tu dis envoyer, c'est de quelle maniere ?

la maniere la plus simple de creer des articles, c'est d'utiliser une base de donnee, mais dans tous les cas voici comment ca se passe :

- tu cree un formulaire ou tes visiteurs peuvent creer un article
- a la validation de ce forumlaire, tu enregistre les donnees dans ta base si tu en utilise une, l'avantage etant que cela te permet de recuperer un identifiant unique pour chaque article envoyé. si tu n'utilise pas de base de donne, il faudra que tu trouves un moyen de generer a chaque creation d'article un numero qui n'est pas deja utilise par un autre article.
- 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.

ainis, a chaque creation d'article, une page est genere automatiquement qui contient l'article en question.
Modifié en dernier par jobherzt le 13 déc. 2005, 15:05, modifié 1 fois.

ViPHP
ViPHP | 2144 Messages

13 déc. 2005, 15:04

Le mieuix c'est d'utiliser une base de donnée pour stocker les différents articles.

Invité
Invité n'ayant pas de compte PHPfrance

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>

Invité
Invité n'ayant pas de compte PHPfrance

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.

Eléphant du PHP | 383 Messages

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.

Invité
Invité n'ayant pas de compte PHPfrance

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 ...

Invité
Invité n'ayant pas de compte PHPfrance

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 ...

Invité
Invité n'ayant pas de compte PHPfrance

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 ...

ViPHP
ViPHP | 2144 Messages

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
Modifié en dernier par iclo le 13 déc. 2005, 21:21, modifié 1 fois.

Invité
Invité n'ayant pas de compte PHPfrance

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 ...

ViPHP
ViPHP | 2144 Messages

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)