Divers problèmes fonctionnalités formulaire

Eléphant du PHP | 172 Messages

31 déc. 2005, 18:33

Bonjour à tous !!

J'ai divers problèmes avec le formulaire et l'insertion d'un petit bbcode et je n'arrive pas à les résoudre :cry:

Je les énumère :

1- Mon textarea n'est pas considéré comme vide, et si je l'inialise à 0, il n'y a plus d'affichage.

2- J'ai une variable $titre dans ma page qui doit avoir la valeur d'un input text, mais je ne comprends pas pourquoi, il prend la valeur du get (edition) de l'adresse de ma page (seulement en ligne, en local ça ne le fait pas).

3- Il y a un contrôle pour savoir si ma variable $titre est différente de rien, et le cas échéant, affichage dans mon textarea, mais lorsque je fais plusieurs submit, elle s'affiche une nouvelle fois dans mon textarea, donc j'obtiens plusieurs fois, $titre dans mon textarea.

4- Lorsque je clique sur un bouton de bbcode, et que je me place entre les 2 balises et que je clique sur un autre bouton de bbcode, l'affichage se fait à coté.
Cela le fait en ligne, car en local c'est bon.
Ex:
En local [ b][bleu][/bleu][/b ] ==> ok
Et en ligne [ b][/b ][bleu][/bleu]

Voilà pour les principaux bugs de mon code.

Comme je ne sais pas d'où viennent les problèmes, je vous mets tout le code, désolé :oops:
if($_GET['astuce'] == "edition")
				{
				?>
			
			<?php
			
			if(isset($_POST['pseudo']) && isset($_POST['titre']) && isset($_POST['desc']) && isset($_POST['mail']) && 
			isset($_POST['nom_lien']))
			{
					if(!empty($_POST['pseudo']) && !empty($_POST['titre']) && !empty($_POST['desc']) && !empty($_POST['mail']) && 
					!empty($_POST['nom_lien']))
					{
							$pseudo = htmlentities($_POST['pseudo']);
							$titre = htmlentities($_POST['titre']);
							$astuce = nl2br(htmlentities($_POST['desc']));
							$mail = htmlentities($_POST['mail']);
							$nom_lien = htmlentities($_POST['nom_lien']);
					}
					else
					{
							$erreur_champ = "";
							if(empty($_POST['pseudo']))
							{
									$erreur_champ = "Vous devez indiquez votre pseudo";
							}
							if(empty($_POST['titre']))
							{
									$erreur_champ = $erreur_champ . "<br />Vous devez donnez un titre à votre astuce";
							}
							if(empty($_POST['mail']))
							{
									$erreur_champ = $erreur_champ . "<br />Vous devez fournir une adresse e-mail";
							}
							if(empty($_POST['nom_lien']))
							{
									$erreur_champ = $erreur_champ . "<br />Vous devez donnez un nom pour la génération d'un lien pour votre astuce";
							}
							if(empty($_POST['desc']))
							{
									$erreur_champ = $erreur_champ . "<br />Vous devez donnez une description de votre astuce";
							}
							echo '<p style="color: #cc0000">' . $erreur_champ . '</p>';
					}
					
					if(isset($_FILES['image'])  && !empty($_FILES['image']['tmp_name']) )
					{
							unset($erreur);
							$extension_tolere = array('png', 'jpg', 'jpeg', 'gif', 'PNG', 'JPG', 'JPEG', 'GIF');		// extension d'images autorisées
							$poids_max = 80000;
							$dossier_upload = "../images/upload/";
							if( !in_array( substr(strrchr($_FILES['image']['name'], '.'), 1), $extension_tolere ) )		// si l'extension n'est pas de type $extension_tolere
							{
									$erreur = 'Votre image doit-être de type png, jpeg ou jpg.';
							}
							elseif( file_exists($_FILES['image']['tmp_name'])		// si le fichier existe 
							&& filesize($_FILES['image']['tmp_name']) > $poids_max)	 // et si son poids est supérieur à poids_max
							{
									$erreur = 'Votre image doit être inférieure à 80Ko !';
							}
							if(!isset($erreur))		// s'il n'y pas d'erreur 
							{
									$dest_img = basename($_FILES['image']['name']);		// name signifie le nom de l'image sur la machine du visiteur
									$dest_img = strtr($dest_img,
									'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
									'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');		// remplace les caractères spéciaux
									$dest_img = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_img);		// remplace les autres caractères spéciaux
									move_uploaded_file($_FILES['image']['tmp_name'], $dossier_upload . $dest_img);		// tmp_name chemin temporaire du fichier
									$chemin = $dossier_upload . $dest_img;
							}
							if(isset($erreur))
							{
									echo '<p>' . $erreur .'</p>';
							}
					}
			}
				
			?>
			
			
			<form name="form" action="astuces.php?astuce=edition" method="post" enctype="multipart/form-data">
				<input type="hidden" name="MAX_FILE_SIZE" value="80000" />
				
				<div id="haut_form">
				<div id="hg"></div>
				<div id="hd"></div>
			</div>
			
			<div id="contour">
			
				<fieldset>
				<legend>Vos identifiants</legend>
					<p class="input_text" style="margin-top: 15px">
						<input id="pseudo" class="text" type="text" name="pseudo" maxlength="12" <?php if(isset($pseudo)) { echo 'value="' .$pseudo . '"'; } ?> />
						<label for="pseudo">
							Votre pseudo
						</label>
					</p>
					<p class="input_text">
						<input id="mail" class="text" type="text" name="mail" maxlength="50" <?php if(isset($mail)) { echo 'value="' .$mail . '"'; } ?> />
						<label for="mail">
							Votre e-mail
						</label>
					</p>
				</fieldset>
				
				<fieldset>
				<legend>Titre et nom du lien de votre astuce</legend>
					<p class="input_text" style="margin-top: 15px">
						<input id="titre" class="text" type="text" name="titre" maxlength="50" <?php if(isset($titre)) { echo 'value="' .$titre . '"'; } ?> />
						<label for="titre">
						Titre de votre astuce
						</label>
					</p>
					<p class="input_text">
						<input id="nom_lien" class="text" type="text" name="nom_lien" maxlength="20" <?php if(isset($nom_lien)) { echo 'value="' .$nom_lien . '"'; } ?> />
						<label for="nom_lien">
						Nom du lien de votre astuce
						</label>
					</p>
				</fieldset>
				<fieldset style="margin-bottom: 0">
				<legend>Votre astuce</legend>
				<p class="input_text">
					<span style="margin-left: 15px">
						Ajouter une image
					</span>
					<input type="file" name="image" /><input type="submit" value="envoyer" style="width: 100px" />
					
				<?php 
				
				if(isset($chemin) && !empty($chemin))
				{
						if(file_exists($chemin))
						{
								echo "
				        <SCRIPT type=\"text/javascript\">
				        function ajout(img)
				        {
				            document.form.desc.value += '[img]". $dest_img . "[\/img]';
				        }
				        </SCRIPT>
				        ";
								echo '<input type="button" value="ajouter l\'image" style="padding: 0 5px; 
											text-decoration: blink; color: #6600cc" onclick="ajout(\'img\')" />';
						}
				}
				?>
				
					</p>
					<p id="menu_form">
					<span id="bouton_couleur">
					<span style="color: #000; font-weight: 700">Couleur</span>
					<input type="button" id="coul_bleu" onclick="bbcode('bleu')" />
					<input type="button" id="coul_rouge" onclick="bbcode('rouge')" />
					<input type="button" id="coul_vert" onclick="bbcode('vert')" />
					<input type="button" id="coul_gris" onclick="bbcode('gris')" />
					<input type="button" id="coul_violet" onclick="bbcode('violet')" />
					</span>
					<input type="button" value="Gras" style="width:50px; font-weight: 700" onclick="bbcode('b')" />
					<input type="button" value="Italique" style="width:70px; font-style:italic" onclick="bbcode('i')" />
					<input type="button" value="Soulign&eacute;" style="width:70px; text-decoration: underline" onclick="bbcode('u')" />
					<textarea name="desc">
					<?php	if(isset($titre))
					{
							echo '[titre]' . $titre .'[/titre]';
					}
					if(isset($astuce))
					{ 
							echo $astuce; 
					} 
					?>
					</textarea>
					<input type="submit" value="apercu" style="width: 100px" />
					</p>
				</fieldset>
			
			</div>
			
			<div id="bas_form">
				<div id="bg"></div>
				<div id="bd"></div>
			</div>
			
			</form>
			
			<?php
			
			/************************************************/
			/*			conversion du bbcode en balise html     */
			/************************************************/

			if(isset($astuce) && !empty($astuce))
			{
					$bbcode = array("[i]", "[/i]", "[b]", "[/b]", " [u]", "[/u]", "[titre]", "[/titre]", "[img]",%20"[/img]", 
					"[bleu]", "[rouge]", "[vert]", "[gris]", "[violet]", "[/bleu]", "[/rouge]", "[/vert]", "[/gris]",
					 "[/violet]");
					
					$html = array("<i>","</i>","<b>","</b>","<u>","</u>","<h3>","</h3>", "<img src=\"../images/upload/", "\" />", 
					"<span style=\"color: #00f\">", "<span style=\"color: #cc0000\">", "<span style=\"color: #266868\">", 
					"<span style=\"color: #999999\">", "<span style=\"color: #948ec6\">", "</span>", "</span>", "</span>", 
					"</span>", "</span>");
					
					$astuce_html = str_replace($bbcode, $html, $astuce);
					echo '<div id="prevualisation">' . $astuce_html . '</div>';
			}
								
			?>
Je peux vous donner un lien par MP pour que vous visualisiez concrètement les problèmes, je ne le mets pas sur le site car ce n'est pas présentable à mon goût et le design est super nul :mrgreen:

Merci :P

Eléphant du PHP | 90 Messages

31 déc. 2005, 19:39

Bonjour
Pour la premiere question je vois pas ..

pour tester si $titre est different de vide;
if ($titre !="") {echo "pas vide";} 
pour les BBcode si tu as le meme code que celui ci

Code : Tout sélectionner

document.form.desc.value += '[img]". $dest_img . "[\/img]';
le + te permet de l'inserer en fin de ligne et non pas entre 2 chaines.. et si tu supprime le + cela ecrase la chaine existante.

sinon autre petite chose je n'aurais pas mis cela de cette facon.
<input id="pseudo" class="text" type="text" name="pseudo" maxlength="12" <?php if(isset($pseudo)) { echo 'value="' .$pseudo . '"'; } ?>" /> 
mais plutot comme ca.
<input id="pseudo" class="text" type="text" name="pseudo" maxlength="12" value="<?php echo $pseudo ; ?> /> 
vu que tu teste deja avant si les variable existe ou non .

@+ Dgse
Je ne tiens pas a etre un genie. J'ai suffisamment de probleme a etre un homme.

Eléphant du PHP | 172 Messages

31 déc. 2005, 20:18

Bonjour
pour tester si $titre est different de vide;
if ($titre !="") {echo "pas vide";} 
Je viens d'essayer, et ça m'affiche variable indéfinie en local, et en ligne rien du tout :shock:
pour les BBcode si tu as le meme code que celui ci

Code : Tout sélectionner

document.form.desc.value += '[img]". $dest_img . "[\/img]';
le + te permet de l'inserer en fin de ligne et non pas entre 2 chaines.. et si tu supprime le + cela ecrase la chaine existante.
Et comment fait-on pour que le code s'affiche à la position du curseur ?
C'est possible ?

sinon autre petite chose je n'aurais pas mis cela de cette facon.
<input id="pseudo" class="text" type="text" name="pseudo" maxlength="12" <?php if(isset($pseudo)) { echo 'value="' .$pseudo . '"'; } ?>" /> 
mais plutot comme ca.
<input id="pseudo" class="text" type="text" name="pseudo" maxlength="12" value="<?php echo $pseudo ; ?> /> 
vu que tu teste deja avant si les variable existe ou non .

@+ Dgse
Bah, je viens de tester et si j'enlève le isset, il me met un message d'erreur de variable indéfinie.

Eléphant du PHP | 90 Messages

31 déc. 2005, 20:52

Bonsoir

Bizarre moi il me marque rien, Bon c'est vrai je fais tous les tests de variable en debut de page et leur attribut null si y a rien dans la variable.
Et comment fait-on pour que le code s'affiche à la position du curseur ?
C'est possible ?
Oui mais cela est plus complexe ..

Pour definir mes varibles je fais de cette maniere en tout debut de page avant tout autre code. je sais pas si cela est bien ou convenable mais j'ai au moin mes variables definis .et prend la chaine de caracteres si celle ci est definis en validant un formulaire.
empty($_POST['titre']) ? $titre = "" :$titre = $_POST['titre'];
essais une condition de cette forme sur ton textarea
 <textarea name="desc"> 
<?php    if(isset($titre)) 
{ 
if ($_POST["titre"] != $titre){echo '[titre]' . $titre .'[/titre]';}
elseif ($_POST["titre"] == $titre) {echo $titre;}
else {$titre =""}
} 
if(isset($astuce)) 
{ 
echo $astuce; 
} 
 ?> 
</textarea> 
PS: j'ai pas teste j'ai fais ca à main leve..
@+ Dgse
Je ne tiens pas a etre un genie. J'ai suffisamment de probleme a etre un homme.

Eléphant du PHP | 172 Messages

31 déc. 2005, 21:34

Ca marche pas :(

Je suis sûr que ça vient du fait qu'il y a déjà quelque chose d'inscrit dans mon textarea.

L'url de la page est de cette forme http://......../astuces.php?astuce=edition

Et il m'affiche edition dans le textarea, j'arrive pas à trouver pourquoi.

Sur ce lien, est-ce que un get génère une variable $astuce ?

Merci de ton aide.

Eléphant du PHP | 172 Messages

01 janv. 2006, 19:55

Bonjour et bonne année à tous 8)

J'ai règlé presque tous mes problèmes, merci Dgse :wink:

Il m'en reste cependant un, lorsque je fait des sauts de lignes dans mon textarea, et que j'envoi mon formulaire, il m'affiche les <br />, et ceci en me les doublants à chaque fois.

C'est à dire que si par exemple, je rentre :

essai
texte
texte


Il m'affiche après un submit :

essai<br />
texte<br />


Après deux :

essai<br /><br />
texte<br /><br />


Voilà, si quelqu'un a une soluce, merci.

Eléphant du PHP | 172 Messages

01 janv. 2006, 20:23

Je viens de trouver, désolé :oops:

J'ai tout simplement mis nl2br à l'affichage final, et non au début.

Merci.