Rechercher : dans
Par :

Formulaire PHP qui alimente une page

Dernière réponse le 8 nov 2009 à 13:38:25 94uaehd, le 6 nov 2009 à 20:43:32 
 Signaler ce message aux modérateurs

Bonjour,

Je voudrai créer un mini formulaire PHP où les internautes pourraient laisser une blague (tu texte quoi !) et ensuite je voudrai que toutes les blagues inscrites soient affichées (sur la même page ?)...

Comment faire ?

Configuration: Windows XP
Safari 530.19.1

Meilleures réponses pour « Formulaire PHP qui alimente une page » dans :
[Webmaster] Un formulaire de contact pour votre site VoirCe formulaire permet d'avoir une page pour être contacté sur son site, sans utiliser de logiciel de messagerie. La personne qui vous contacte indique son adresse, l'objet du message et son message (évidemment). Le code est une version...
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
[Webmaster] Afficher facilement le code php/xhtml de vos pages VoirSi vous voulez proposer a vos visiteurs de voir la source de vos fichiers (PHP ou HTML), il y a plusieurs solutions. En php Afficher le code php Afficher le code html En html Informations Voir aussi En php Afficher le code php La...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

1

avion-f16, le 6 nov 2009 à 22:34:50

Tu dois faire ça en PHP avec une base de données.
Quand je dis base de données, je ne penses pas qu'il soit nécessaire de sortir l'artillerie MySQL : autant faire ça avec un fichier XML (qui a, à la base, été créé pour stocker des données lui aussi). Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16

2

94uaehd, le 6 nov 2009 à 22:59:24

Le problème c'est que je ne trouve pas de scripts "tout prêt" pour ça et j'ai beaucoup de mal avec le PHP...

Répondre à 94uaehd

3

avion-f16, le 7 nov 2009 à 00:04:14

Je t'ai codé ça avec DOM en PHP.

Pour commencer, crées un fichier "blagues.xml" avec ce texte :

<?xml version="1.0" encoding="UTF-8"?>
<blagues>
</blagues>
Enregistres-le en UTF-8, envoyes-le sur le FTP et attributs lui les droits en écriture pour le serveur.

Ensuite, renommes ta page avec l'extension .php et voilà le script qu'il faut utiliser pour lire :
<?php
/* -- Lecture des news -- */
$contenu = file_get_contents('blagues.xml');
$xml = new SimpleXMLElement($contenu);
foreach($xml as $blague) {
	echo '<div class="blague">'."\n".
	"\t".'<p class="info">Blague déposée par <strong>'.htmlspecialchars(stripslashes($blague->auteur)).'</strong></p>'."\n".
	"\t".'<p class="texte">'.nl2br(htmlspecialchars(stripslashes($blague->texte))).'<br/>'."\n".
	'</div>'."\n\n";
}
unset($xml);unset($contenu);
?>
Et celui du formulaire :
<h3>Vous aussi, partagez vos blagues !</h3>
<?php
if(get_magic_quotes_gpc()) {
        $_POST = array_map('stripslashes', $_POST);
        $_GET = array_map('stripslashes', $_GET);
        $_COOKIE = array_map('stripslashes', $_COOKIE);
}

$form = '<form method="post" action="">
	<p>
		<label for="auteur">Auteur</label>
		<input type="text" name="auteur" id="auteur" />
	</p>
	<p>
		<label for="texte">La blague</label>
		<textarea name="texte" id="texte" cols="45" rows="8"></textarea>
	</p>
	<p>
		<input type="submit" value="Ajouter" />
		<input type="hidden" name="submitBlague" value="true" />
	</p>
</form>';

if($_POST['submitBlague'] == "true") {
	$auteur = trim($_POST['auteur']);
	$texte = trim($_POST['texte']);
	
	if(empty($auteur) || empty($texte)) {
		echo 'Merci de remplir tous les champs !'."\n".$form;
	} else {
		/* Création de l'objet DOM et chargement du XML actuel */
		$dom = new DOMDocument('1.0', 'UTF-8');
		$dom->load('blagues.xml');
		
		/* Création de la nouvelle blague */
		$blagueTag = $dom->createElement('blague');
		$auteurTag = $dom->createElement('auteur',$auteur);
		$texteTag = $dom->createElement('texte');
		$texteCDATA = $dom->createCDATASection($texte);
		
		/* Assemblage */
		$texteTag->appendChild($texteCDATA);
		$blagueTag->appendChild($auteurTag);
		$blagueTag->appendChild($texteTag);
		$blagues = $dom->getElementsByTagName('blagues');
		$blagues = $blagues->item(0);
		$blagues->appendChild($blagueTag);
		
		/* Sauvegarde */
		if($dom->save('blagues.xml')) {
			echo 'Blague ajoutée';
		} else {
			echo 'Erreur lors de l\'insertion de la blague';
		}
		
		unset($dom);
	}
} else {
	echo $form;
}
?>


PS: Pour enregistres en UTF-8 avec le Bloc-Notes : Fichiers → Enregistrer sous ... → dans la liste, choisis "Unicode"
PS 2 : Pour mettre les droits en écriture avec Filezilla, fait clic-droit puis "Attributs". Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

4

94uaehd, le 7 nov 2009 à 10:29:46

Merci pour ton aide mais sur le formulaire de postage de blague il y a écrit

Notice: Undefined index: submitBlague in /home/revibrevet/public_html/Blagues/index.php on line 79
. Et une fois qu'on a envoyé la blague il y écrit dans la partie pour voir les blagues
Warning: DOMDocument::load() [domdocument.load]: Start tag expected, '<' not found in /home/revibrevet/public_html/Blagues/blagues.xml, line: 1 in /home/revibrevet/public_html/Blagues/index.php on line 88

Fatal error: Call to a member function appendChild() on a non-object in /home/revibrevet/public_html/Blagues/index.php on line 102

Répondre à 94uaehd

5

avion-f16, le 7 nov 2009 à 14:05:03

As-tu bien remplis le fichier "blagues.xml" avec ça ? :

<?xml version="1.0" encoding="UTF-8"?>
<blagues>
</blagues>
Assures-toi de bien avoir PHP5 sur ton hébergeur (même si il le supporte, beaucoup mettent PHP4 par défaut). : pour le savoir, crées un fichier "phpinfo.php" et mets cette ligne dedans : <?php phpinfo(); ?> Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

6

94uaehd, le 7 nov 2009 à 14:16:26

Oui, j'ai bien rempli le fichier blagues.xml et la version PHP est 5.3

Répondre à 94uaehd

7

avion-f16, le 7 nov 2009 à 14:22:39

Bizarre, chez moi ça fonctionne et j'ai aussi PHP 5.3 Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16

10

94uaehd, le 7 nov 2009 à 14:32:40

Est ce que tu peux jeter un coup d'oeuil au site (en affichant le code source).

NB: en attendant que le site soit prêt je l'héberge sur un autre site:
http://revibrevet.u7n.org/Blagues/

Répondre à 94uaehd

11

DON-ATELLO, le 7 nov 2009 à 14:36:48

Ok

Répondre à DON-ATELLO

12

avion-f16, le 7 nov 2009 à 14:52:47

Le problème, c'est l'encodage de ton fichier .xml
Comme ta page est en ISO-8859-1 et pas en UTF-8 (il serait temps de passer à l'UTF-8, c'est bien mieux) :
1. Ouvres le bloc-notes et mets-y le code suivant :

<?xml version="1.0" encoding="UTF-8"?>
<blagues>
</blagues>
2. Fait "Fichier → Enregistrer sous ...", nommes-le "blagues.xml" (mets le nom entre guillemées) et dans la liste "Encodage", choisis "ANSI". Ensuite, upload le nouveau fichier à la place de l'ancien Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

13

94uaehd, le 7 nov 2009 à 14:59:13

C'est fait mais regarde par toi même ça ne marche pas... ( http://revibrevet.u7n.org/Blagues/ )

Répondre à 94uaehd

14

avion-f16, le 7 nov 2009 à 15:03:02

Oui.
Dans le long script qui permet l'insertion, trouve cette ligne :

$dom = new DOMDocument('1.0', 'UTF-8');
Et remplaces-là par :
$dom = new DOMDocument('1.0', 'iso-8859-1');
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16

15

94uaehd, le 7 nov 2009 à 15:14:53

C'est fait mais ça ne marche toujours pas...

Répondre à 94uaehd

16

avion-f16, le 7 nov 2009 à 15:20:07

Arf, encore erreur de ma part (en te donnant le script, j'ai oublié de corrigé). Voilà le contenu du fichier .xml :

<?xml version="1.0" encoding="iso-8859-1"?>
<blagues>
</blagues>
En espérent que cette fois soit la bonne

Et voilà le nouveau script qui permet l'insertion, il devrait faire disparaître la notice :
<h3>Vous aussi, partagez vos blagues !</h3>
<?php
if(get_magic_quotes_gpc()) {
        $_POST = array_map('stripslashes', $_POST);
        $_GET = array_map('stripslashes', $_GET);
        $_COOKIE = array_map('stripslashes', $_COOKIE);
}

$form = '<form method="post" action="">
	<p>
		<label for="auteur">Auteur</label>
		<input type="text" name="auteur" id="auteur" />
	</p>
	<p>
		<label for="texte">La blague</label>
		<textarea name="texte" id="texte" cols="45" rows="8"></textarea>
	</p>
	<p>
		<input type="submit" value="Ajouter" />
		<input type="hidden" name="submitBlague" value="true" />
	</p>
</form>';

if(isset($_POST['submitBlague'])) {
	if($_POST['submitBlague'] == "true") {
		$auteur = trim($_POST['auteur']);
		$texte = trim($_POST['texte']);
	
		if(empty($auteur) || empty($texte)) {
			echo 'Merci de remplir tous les champs !'."\n".$form;
		} else {
			/* Création de l'objet DOM et chargement du XML actuel */
			$dom = new DOMDocument('1.0', 'iso-8859-1');
			$dom->load('blagues.xml');
		
			/* Création de la nouvelle blague */
			$blagueTag = $dom->createElement('blague');
			$auteurTag = $dom->createElement('auteur',$auteur);
			$texteTag = $dom->createElement('texte');
			$texteCDATA = $dom->createCDATASection($texte);
		
			/* Assemblage */
			$texteTag->appendChild($texteCDATA);
			$blagueTag->appendChild($auteurTag);
			$blagueTag->appendChild($texteTag);
			$blagues = $dom->getElementsByTagName('blagues');
			$blagues = $blagues->item(0);
			$blagues->appendChild($blagueTag);
		
			/* Sauvegarde */
			if($dom->save('blagues.xml')) {
				echo 'Blague ajoutée';
			} else {
				echo 'Erreur lors de l\'insertion de la blague';
			}
		
			unset($dom);
		}
	} else {
		echo $form;
	}
} else {
	echo $form;
}
?>
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

17

94uaehd, le 7 nov 2009 à 15:24:14

CA MARCHE !! Merci beaucoup !! c'est grâce à des gens comme toi que la Terre tourne rond...

Répondre à 94uaehd

18

avion-f16, le 7 nov 2009 à 15:28:28

J'ai essayé d'insérer une news et ça ne fonctionne plus ! =)
Ton fichier "blagues.xml" est vide ... Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

19

94uaehd, le 7 nov 2009 à 15:39:07

Apparement ça marche pour la première blague mais après qu'elle soit insérée le fichier .xml devient vierge (donc ça marche pas pour la deuxième!)...

Répondre à 94uaehd

20

avion-f16, le 7 nov 2009 à 15:47:14

Essaye sur un autre hébergeur parce que sur mon serveur dédié, ça a fonctionnait du premier coup. Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16

21

94uaehd, le 7 nov 2009 à 17:35:45

J'ai essayé espacegratuit mais ça marche toujours pas (pourtant ils ont php 5 et php 6)
http://blaguespasdroles.eg2.fr

Répondre à 94uaehd

22

avion-f16, le 7 nov 2009 à 20:55:47

Je pense que le problème provennait du fait que j'ai mis "iso-8859-1" quelque-part alors que c'était "ISO-8859-1" (bête erreur, j'ai toujours mis les encodages en majuscule ...).

Récapitulons :

blagues.php
<h3>Partagez vos blagues !</h3>
<?php
if(get_magic_quotes_gpc()) {
        $_POST = array_map('stripslashes', $_POST);
        $_GET = array_map('stripslashes', $_GET);
        $_COOKIE = array_map('stripslashes', $_COOKIE);
}

$form = '<form method="post" action="">
	<p>
		<label for="auteur">Auteur</label>
		<input type="text" name="auteur" id="auteur" />
	</p>
	<p>
		<label for="texte">La blague</label>
		<textarea name="texte" id="texte" cols="45" rows="8"></textarea>
	</p>
	<p>
		<input type="submit" value="Ajouter" />
		<input type="hidden" name="submitBlague" value="true" />
	</p>
</form>';

if(isset($_POST['submitBlague'])) {
	if($_POST['submitBlague'] == "true") {
		$auteur = trim($_POST['auteur']);
		$texte = trim($_POST['texte']);
	
		if(empty($auteur) || empty($texte)) {
			echo 'Merci de remplir tous les champs !'."\n".$form;
		} else {
			/* Création de l'objet DOM et chargement du XML actuel */
			$dom = new DOMDocument('1.0', 'ISO-8859-1');
			$dom->load('blagues.xml');
		
			/* Création de la nouvelle blague */
			$blagueTag = $dom->createElement('blague');
			$auteurTag = $dom->createElement('auteur',$auteur);
			$texteTag = $dom->createElement('texte');
			$texteCDATA = $dom->createCDATASection($texte);
		
			/* Assemblage */
			$texteCDATA = $texteTag->appendChild($texteCDATA);
			$auteurTag = $blagueTag->appendChild($auteurTag);
			$texteTag = $blagueTag->appendChild($texteTag);
			$blagues = $dom->getElementsByTagName('blagues');
			$blagues = $blagues->item(0);
			$blagueTag = $blagues->appendChild($blagueTag);
		
			/* Sauvegarde */
			if($dom->save('blagues.xml')) {
				echo 'Blague ajoutée';
			} else {
				echo 'Erreur lors de l\'insertion de la blague';
			}
		
			unset($dom);
		}
	} else {
		echo $form;
	}
} else {
	echo $form;
}
?>

<h3>Blagues déjà proposées</h3>
<?php
/* -- Lecture des news -- */
$contenu = file_get_contents('blagues.xml');
$xml = new SimpleXMLElement($contenu);
foreach($xml as $blague) {
	echo '<div class="blague">'."\n".
	"\t".'<p class="info">Blague déposée par <strong>'.htmlspecialchars(stripslashes($blague->auteur)).'</strong></p>'."\n".
	"\t".'<p class="texte">'.nl2br(htmlspecialchars(stripslashes($blague->texte))).'<br/>'."\n".
	'</div>'."\n\n";
}
unset($xml);unset($contenu);
?>

blagues.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<blagues>
</blagues>
Tu peux voir en ligne → http://fighter-aircraft.com/blagues/blagues.php Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

23

94uaehd, le 7 nov 2009 à 21:02:18

J'ai essayé sur ton site mais ça marche pas quand tu essaye de mettre une blague...

Répondre à 94uaehd

24

avion-f16, le 7 nov 2009 à 21:10:09

Oui, enfait c'est quand même un problème d'encodage mais pas une histoire de majuscule/minuscule.
Essaye, en mettant un message simple (avec au maximum des accents) tu verras ça fonctionne mais pas avec des "ç", "Ç", ... Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

25

avion-f16, le 7 nov 2009 à 21:27:01

Avec de l'UTF-8, ça fonctionne sans problème.
Ce qui justifie ma phrase de la réponse n°12 : “il serait temps de passer à l'UTF-8, c'est bien mieux” Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu­ lui dis de faire.

Répondre à avion-f16

27

94uaehd, le 8 nov 2009 à 13:35:08

Et comment on fait pour passer à l'UTF-8 ??

Répondre à 94uaehd

28

 avion-f16, le 8 nov 2009 à 13:38:25

1. Sur ta page, modifie dans une balise meta "ISO-8859-1" par "UTF-8".
2. Réenregistres ta page en Unicode avec le Bloc-Notes
3. Trouve la ligne "$dom = new DOMDocument('1.0', 'ISO-8859-1');" et remplaces là par "$dom = new DOMDocument('1.0', 'UTF-8');"
4. Ouvres ton XML et remplaces "ISO-8859-1" par "UTF-8" puis réenregistres-le en Unicode
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.

Répondre à avion-f16

26

94uaehd, le 7 nov 2009 à 21:30:06

ça marche !! merci

Répondre à 94uaehd
Collection CommentÇaMarche.net