[PHP] erreur inconnue

okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   -  
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai le code suivant qui déconne légèrement.
dans mon formulaire, j'ai une liste de champ ayant comme valeur : lien suivit d'un numéro d'identification.
si je remplis 1 seul champ (créé par javascript), tout fonctionne.
Pareil si je rempli 2 ou plus de champ (toujours créé grâce à javascript).

Le problème survient lorsqu'un des champ créé est laissé vide.
ce que j'obtiens au final, c'est ma variable $lien qui est vide.
//Vérification des l'url du lien.
	$lien = '';
	$mort = '';
	for ($i = 1; !empty($_POST['lien'.$i]); $i++)
	{
		if (preg_match("#http://[a-z0-9._/-]+#i", $_POST['lien'.$i]))
		{
			$lien .= htmlspecialchars($_POST['lien'.$i]);
			$lien .= ';';
			$_SESSION['formulaire']['lien'.$i] = $_POST['lien'.$i];
			$_SESSION['formulaire']['lien_max'] = $i;
			
			//création de $mort
			$mort .= '1;';
		}
		else
		{
			$msgerreur .= 'L\'url ' . $_POST['lien'.$i] . ' n\'est pas valide ou vous avez oublié de mettre l\'url, merci de recommencer. Ex d\'url valide : [http:// www.monsite.net<br/>';
		}
	}


Merci pour vos aides.

ps : la section webmastering ne fonctionne plus, est-ce normal?

18 réponses

P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
« Le but de ce script est d'enregistré dans ma table plusieurs lien l'un a la suite de l'autre (séparé par ;) avec chaque fois la valeur 1 ou 0 si le lien est mort ou non ($mort) »

Non, on n'enregistre pas plusieurs valeurs dans un champ (sauf cas très exceptionnels), donc tu dois créer une table dédiée à l'enregistrement de tes liens.

Quant à mes question sur le pourquoi du stockage de ces valeurs en session, tu ne m'as pas répondu.
1
nabil07 Messages postés 140 Date d'inscription   Statut Membre Dernière intervention   64
 
salut,

utilises la fonction isset($_POST['lien']) qui teste la validité du champ.
tu peux l'utiliser avant d'entamer le boucle for.
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Je l'utilise comme condition du for
for ($i = 1; !empty($_POST['lien'.$i]); $i++)
Ce que je ne comprend pas c'est que ça marche uniquement si tous les champs sont rempli.
alors que ça devrait marcher tous les temps ou au moins avec le premier champ rempli
qui est toujours $_POST['lien1']
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
empty vérifie si la variable contient une valeur nulle ou pas
isset vérifie si la variable existe ou pas

ce n'est pas pareil il me semble
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
en utilisant empty, je vérifie ici en même temps si ma variable est égal à 0 ou non. si c'est le cas, elle est soit véritablement égal à 0 et donc je m'arrete, soit elle n'existe pas donc je m'arrête aussi.

J'ai quand même testé avec le isset mais aucun changement.
Une autre suggestion? :)
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Ce n'est pas de cette façon que l'on passe plusieurs valeurs dans un champ de formulaire.

On utilise les tableaux.

<input type="text" name="lien[]" />


Après un simple foreach pour parcourir $_POST['lien']

Idem lorsque tu stockes en sessions, cela devrait-être $_SESSION['formulaire'][$i]['lien'], etc..
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Si j'écris simplement lien[x] (où x représente un numéro), $_POST['lien'] sera automatiquement transformé en array?
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Je n'ai pas compris ce que tu dis, c'est la paire de crochets qui indique que $_POST['lien'] sera un array.

Si tu as besoin de passer un index en même temps que la valeur, en effet oui, il faut mettre l'index dans les crochets.
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Ok merci pour l'astuce, tout fonctionne maintenant. :)

au fait, un peu de HS mais comment ce fait-il que la partie webmastering ne fonctionne plus?
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Partie webmastering du forum ?

Elle fonctionne très bien :)
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
ha bon?

Au lieu d'avoir le forum, j'ai une image, un M avec écrit dessus "arrante".
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Marrante ? XD

Je ne sais pas pourquoi ça déconne chez toi, vide ton cache navigateur au cas où, et si t'as toujours ce bug, poste dans le forum suggestion car là, il est bien bizarre ce bug :-D
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
C'est bon, c'était une erreur dans le cache.
Mais pourquoi j'avais une image, je ne comprendrai jamais.
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
après plusieurs test, il réside encore un bug :/

voici les codes :
page formulaire :
<td><label for="lien">URL : <font color="#FF0000">*</font></label></td>
			<td>
			<!--ajout champ-->
			<script>
			function create_champ(i) {
			
			var i2 = i + 1;
			
			document.getElementById('leschamps_'+i).innerHTML = '<input type="text" name="lien['+i+']" size="40px" class="galerieBtn" /></span>';
			document.getElementById('leschamps_'+i).innerHTML += (i <= 10) ? '<br /><span id="leschamps_'+i2+'"><a href="javascript:create_champ('+i2+')">Ajouter un champs</a></span>' : '';
			
			}
			</script>
			<?php
			$n = 1;
			//session
			if (isset($_SESSION['formulaire']['lien']))
			{
				for ($n = 1; isset($_SESSION['formulaire']['lien'][$n]); $n++)
				{
					echo '<input type="text" name="lien['.$n.']" id="lien['.$n.']" size="40px" value="'.$_SESSION['formulaire']['lien'][$n].'" class="galerieBtn"><br/>';
				}
			}
			else
			{
				echo '<input type="text" name="lien[1]" id="lien[1]" size="40px" class="galerieBtn">';
			}
			
			echo '<br/><span id="leschamps_'.$n.'"><a href="javascript:create_champ('.$n.')">Ajouter un champs</a></span>';
			?>
			</td>


le code de la page cible du formulaire.
//Vérification des l'url du lien.
	$lien = '';
	$mort = '';
	for ($i = 1; !empty($_POST['lien'][$i]); $i++)
	{
		if (preg_match("#http://[a-z0-9._/-]+#i", $_POST['lien'][$i]))
		{
			$lien .= htmlspecialchars($_POST['lien'][$i]);
			$lien .= ';';
			$_SESSION['formulaire']['lien'][$i] = $_POST['lien'][$i];
			$_SESSION['formulaire']['lien_max'] = $i;
			
			//création de $mort
			$mort .= '1;';
		}
		else
		{
			$msgerreur .= 'L\'url ' . $_POST['lien'][$i] . ' n\'est pas valide ou vous avez oublié de mettre l\'url, merci de recommencer. Ex d\'url valide : http://www.blizer.net/dossier/page.html<br/>';
		}
	}


si dans mon formulaire, je place 2 liens, dans ma base de donnée, je n'aurai que le dernier lien enregistré. Le premier aura été ignioré ou supprimer, je ne sais pas trop.
0
P@t@ch0n Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   85
 
Il y a beaucoup de choses à revoir dans ton code.

Mais comme je ne saisis pas trop ce que le tout doit faire, je ne sais pas trop, surtout le stockage de telles valeurs en session.

Il serait bien, que tu détailles un peu le but de ce script, et également la structure de ta/tes table(s).
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
le but de ce script est d'enregistré dans ma table plusieurs lien l'un a la suite de l'autre (séparé par ;) avec chaque fois la valeur 1 ou 0 si le lien est mort ou non ($mort)

ma table se compose simplement d'un champ lien et d'un champ mort.

l'utilisateurs peut entrer autant de lien qu'il veut et tout ces liens doivent se retrouver dans la base de donnée séparé par ; pour pouvoir les dissocier plus tard.

ps : je n'ai pas le temps de fort détailler maintenant, je dois partir mais ce soir s'il le faut, je détaillerai plus.
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Alors, tu comprends mieux le principe de mon script?
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Ok pour la table supplémentaire, ce sera surement plus simple.

pour la valeur en session, c'est pour pouvoir la remettre dans le formulaire si jamais l'utilisateur a fait une erreur dans le formulaires.

Je modifierai mon code pour rajouter une table pour mes liens.
Mais pourquoi mon code actuel (même s'il est pas comme il faut ;)) ne fonctionne pas correctement?
0