Page 1 sur 1

Probleme : condition et variable vide

Posté : 19 oct. 2007, 13:06
par supercanard
Bonjour,
Je suis sur un problème qui traine depuis 2 jours. Je n'ose même plus ouvrir la foutue page qui contient ce code parce que j'ai peur de faire CTRL A + SUPR :x

Alors voilà, j'ai tout simplement un formulaire qui me renvois des données.
Dans le code ci-dessous, si le champ nom est envoyé on exécute la fonction plus bas.
La fonction retourne une variable $alerte.
Si celle-ci est vide, c'est qu'il n'y a pas d'erreur, donc on enregistre les données.

(désolé pour le fouillis les tabulations du code ont sautées je crois)
   
      if (isset($_POST['nom'])) { // ENREGISTREMENT
        $alerte= champs_page($champsvides_page,$_POST['nom'],$_POST['nom_lien']); // APPEL DE LA FONCTION DE TEST DES CHAMPS VIDES
        if (empty($alerte)) { // SI PAS DE MESSAGE ERREUR, ENREGISTREMENT
               $req_ajout= mysql_query("INSERT INTO bloom_pages (id,nom,contenu,nom_lien,pos_lien,visible) VALUES ('','{$_POST[nom]}','{$_POST[elm1]}','{$_POST[nom_lien]}','{$_POST[pos_lien]}','{$_POST[visible]}')");
        }
      }
La fonction en question teste simplement les champs. Si un des deux est vide, la variable $alerte prend la valeur d'une variable définie plus haut dans le script.
 
      function champs_page($champsvides_page,$nom,$nom_lien) { // VERIFICATIONS DES CHAMPS VIDES
        if (empty($nom) || empty($nom_lien)) {
        $var= $champsvides_pages;
        }
        return $var;
      }
Alors le problème c'ets que champs vides ou pas, l'enregistrement se fait.
J'ai lu et relu le code dans tous les sens, en taille de typo 72, de loin, de près, mais franchement je vois pas ce qui cloche. :(

Si quelqun peut m'aider c'est volontiers

Posté : 19 oct. 2007, 13:08
par Truc
Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP", "Aidez-moi !" n'apportent rien à la compréhension de ton problème.
Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.

Tu peux corriger ton titre en éditant ton premier message.

Merci de prendre le temps de lire les règlements.

Posté : 19 oct. 2007, 13:14
par supercanard
Modération :
Merci d'utiliser un titre clair et qui correspond bien à ta demande.
Les titres contenant "HELP", "Aidez-moi !" n'apportent rien à la compréhension de ton problème.
Par ailleurs, nous savons déjà par ton message que tu as besoin d'aide.

Tu peux corriger ton titre en éditant ton premier message.

Merci de prendre le temps de lire les règlements.
Oups
Je savais tellement pas quoi mettre comme titre puisque j'ai du mal a cibler le probleme. C'est modifié :wink:

Posté : 19 oct. 2007, 13:18
par d0m
es tu sur que tes champs sont bien considéré comme vides?
pour tester :
function champs_page($champsvides_page,$nom,$nom_lien) { // VERIFICATIONS DES CHAMPS VIDES
  if (empty($nom) || empty($nom_lien)) {
    $var= $champsvides_pages;
  }
else
  echo 'les champs ne sont pas vides<BR>';

  return $var;
      } 

Posté : 19 oct. 2007, 13:26
par supercanard
es tu sur que tes champs sont bien considéré comme vides?
pour tester :
function champs_page($champsvides_page,$nom,$nom_lien) { // VERIFICATIONS DES CHAMPS VIDES
  if (empty($nom) || empty($nom_lien)) {
    $var= $champsvides_pages;
  }
else
  echo 'les champs ne sont pas vides<BR>';

  return $var;
      } 
Mieux j'ai même fait ça : else { echo $nom.$nom_lien.'toto'; }

La il ne s'affiche rien.
Donc c'est complètement illogique... toto devrait s'afficher puisque $nom et $nom lien ne s'affichent pas et sont donc bien vides...

Posté : 19 oct. 2007, 13:27
par Truc
renvoie des booléen pour la fonction false ou true, initialise à "false" si le champ est vide tu passes à "true" et dans tous les cas tu renvoie une valeur.
Si ce retour est vrai alors tu affiches ton message qui n'a plus besoin d'être passé en paramètre à la fonction.

Si je peux me permettre cette fonction de test des champs vides est un peu inutile dans le sens où elle est beaucoup trop restrictive. Tu ne pouras pas l'utiliser dans d'autres cas :-k

Posté : 19 oct. 2007, 15:01
par supercanard
renvoie des booléen pour la fonction false ou true, initialise à "false" si le champ est vide tu passes à "true" et dans tous les cas tu renvoie une valeur.
Si ce retour est vrai alors tu affiches ton message qui n'a plus besoin d'être passé en paramètre à la fonction.

Si je peux me permettre cette fonction de test des champs vides est un peu inutile dans le sens où elle est beaucoup trop restrictive. Tu ne pouras pas l'utiliser dans d'autres cas :-k
Oui je sais elle sert a rien, mais j'ai demandé sur un autre post pour justement en faire une utilisable dans tous les cas.
Par contre je comprends pas trop pour ta solution :?

Posté : 19 oct. 2007, 15:13
par Truc
enfaite la fonction peut être remplacée par :
if (isset($_POST['nom'])) { // ENREGISTREMENT
        $alerte= (empty($_POST['nom']) || empty($_POST['nom_lien'])) ? $champsvides_page : ""; 
        if (empty($alerte)) { // SI PAS DE MESSAGE ERREUR, ENREGISTREMENT 
        {
sinon l'idée d'une telle fonction est de renvoyer un booléen (vrai ou faux) :
function is_vide($param)
{
   $retour = false;
   if (empty($param))
   {   
       $retour = true;
       // autres tests, lignes possibles
   }
   return $retour;
}

//appel 
$is_vide = is_vide($param); // $s_vide va contenir soit true soit false; ceci n'est qu'un exemple complètement inutile puisque l'appel à empty() direment revient à la meme chose hein 

Posté : 19 oct. 2007, 15:16
par d0m
pour ma part, j'utilise cette fonction pour tester si mes champs textes sont remplis (et pas par des blances)
if(isset($_POST['champ_texte'])
   && !empty(trim($_POST['champ_texte']))
   && !ctype_space(trim($_POST['champ_texte'])) ){
  //le champ existe, contient quelque chose et n'est pas constitué de blancs
}

Posté : 19 oct. 2007, 15:23
par supercanard
Ok je comprend mieux les boleens, plsu un petit tour dans la doc.

Même si ma méthode n'est pas terrible, je vois toujours pas ce qui cloche dans mon code et ça attise ma curiosité même si je dois faire autrement.
Y doit bien y avoir un hic mais quoi ? surtout que je procède exactement de la même manière ailleurs et que ça marche...

Posté : 19 oct. 2007, 15:56
par supercanard
pour ma part, j'utilise cette fonction pour tester si mes champs textes sont remplis (et pas par des blances)
if(isset($_POST['champ_texte'])
   && !empty(trim($_POST['champ_texte']))
   && !ctype_space(trim($_POST['champ_texte'])) ){
  //le champ existe, contient quelque chose et n'est pas constitué de blancs
}
Je vais faire quelquechose de semblable :
function champvide($champsvides_page,$champ) {
	if (empty($champ)) {
		$var= $champsvides_page.$champ;
	}
	return $var;
}
$champvides_pages contient la phrase : Champ obligatoire :
En ajoutant $champ je précise de cette manière le nom du champ testé

Mais rien a faire, j'obtient juste "Champ obligatoire :"

JE cris que mon clavier va y passer d'ici la fin de journée :lol:

Posté : 19 oct. 2007, 16:07
par d0m
c'est normal. Regarde bien ton code :
si $champ est vide tu concatènes 'Champ obligatoire :' à vide.

Posté : 19 oct. 2007, 16:25
par supercanard
c'est normal. Regarde bien ton code :
si $champ est vide tu concatènes 'Champ obligatoire :' à vide.
:lol: :lol: Je suis en mode boulet je crois

Posté : 19 oct. 2007, 18:18
par Truc
Résolu ??

Posté : 19 oct. 2007, 20:40
par supercanard
Résolu ??
A prioris oui :wink: