[PHP] erreur inconnue

Fermé
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 5 oct. 2009 à 21:06
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 15 oct. 2009 à 16:20
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
15 oct. 2009 à 10:20
« 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 vendredi 14 septembre 2007 Statut Membre Dernière intervention 10 avril 2014 64
5 oct. 2009 à 21:48
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
5 oct. 2009 à 22:17
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 mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
6 oct. 2009 à 09:46
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2009 à 17:13
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
6 oct. 2009 à 17:25
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2009 à 17:30
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
6 oct. 2009 à 17:52
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2009 à 18:06
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
6 oct. 2009 à 18:55
Partie webmastering du forum ?

Elle fonctionne très bien :)
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2009 à 19:38
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
6 oct. 2009 à 20:24
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2009 à 21:25
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
10 oct. 2009 à 18:04
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 mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
11 oct. 2009 à 11:36
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
11 oct. 2009 à 11:40
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 jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
13 oct. 2009 à 16:16
Alors, tu comprends mieux le principe de mon script?
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
15 oct. 2009 à 16:20
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