Aller au contenu

problème "if - else"


Sujets conseillés

Posté

Bonjour à tous,

Je demande votre aide car j'ai un petit soucis de codage :

mon code :

if (mail($cible, $objet, $contenu, $headers) && ($nl == "oui"))
{

mysql_query("insert into spip_nl (id, Nom, Prenom, email) values('', '".$nom."', '".$prenom."', '".$email."')");

echo '<p style="padding:8px 0 8px 5px;">'.$message_envoye1.'</p>'."\n"; }

else

{
echo '<p style="padding:8px 0 8px 5px;">'.$message_envoye2.'</p>'."\n";

}

else
{
echo '<p>'.$message_non_envoye.'</p>'."\n\n\n";

}


}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p style="padding-left:5px;">'.$message_formulaire_invalide.'</p>'."\n";
$err_formulaire = true;
};
};

Quand je mets ces lignes dans mon code, l'erreur suivante est retournée :

Parse error: parse error, unexpected T_ELSE in D:... : eval()'d code on line 153

La ligne 153 correspond à la ligne où se situe mon second "else". Si j'enlève cet "else", le code est bon.

Je suis sur que ce n'est pas grand chose mais n'étant pas spécialiste du PHP, je bloque.

Merci pour vos lumières.

Posté

Bonjour,

il te manque un if quelque part...


if (mail($cible, $objet, $contenu, $headers) && ($nl == "oui"))
{

mysql_query("insert into spip_nl (id, Nom, Prenom, email) values('', '".$nom."', '".$prenom."', '".$email."')");

echo '<p style="padding:8px 0 8px 5px;">'.$message_envoye1.'</p>'."\n";
}

else

{
echo '<p style="padding:8px 0 8px 5px;">'.$message_envoye2.'</p>'."\n";

}
//Fin du IF mais tu rajoutes ensuite du code sans conditions...
else
{
echo '<p>'.$message_non_envoye.'</p>'."\n\n\n";

}


}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p style="padding-left:5px;">'.$message_formulaire_invalide.'</p>'."
\n";
$err_formulaire = true;
};
};

Posté (modifié)

J'y pensais à ça, mais il est impossible d'imbriquer plusieurs "else" dans un seul "if" ?

Modifié par Portekoi
Pas besoin de citer le message précédent, on vient de le lire
Posté

Biensur que oui mais tu dois mettre des clauses

Exemples :


<?
if(condition){
if(condition11){

}else{

}
}else if(condition2){
if(condition22){

}else{

}

}else if(condition3){
if(condition33){

}else{

}

}
?>

Compare avec ton code, tu verras qu'il te manque des conditions :)

Posté

Ton code revient à dire:

si (condition) alors (faire ça) sinon (faire autre chose) sinon (faire autre chose encore)

Forcément, le deuxième "sinon" ne veut pas dire grand chose.

Jacques.

Posté

J'ai modifié mon code suite à vos conseils :

if ($nl == "oui")
{

mysql_query("insert into spip_nl (id, Nom, Prenom, email) values('', '".$nom."', '".$prenom."', '".$email."')");

mail($cible, $objet, $contenu, $headers);

echo '<p style="padding:5px 0 8px 5px;">'.$message_envoye1.'</p>'."\n"; }

else if ($nl != "oui")

{
mail($cible, $objet, $contenu, $headers);

echo '<p style="padding:5px 0 8px 5px;">'.$message_envoye2.'</p>'."\n";

}

else
{
echo '<p style="padding:5px 0 8px 5px;">'.$message_non_envoye.'</p>'."\n\n\n";

}


}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p style="padding-left:5px; color:#BF0D0D">'.$message_formulaire_invalide.'</p>'."\n";
$err_formulaire = true;
};
};

et tout fonctionne comme je veux.

Merci beaucoup pour votre aide ! :thumbsup:

Posté

Euh...

Comme dans le premier extrait que tu avais donné, tu donnes la fin d'un truc dont on n'a pas le début. Ce serait aussi nettement plus lisible et compréhensible si c'était correctement "indenté" (ça permet de voir rapidement les {} et les if/else qui vont ensemble). Il y a plusieurs règles pour ça, mais ma favorite, la plus lisible, c'est que le if, le else, et les {} qui vont avec doivent être au même niveau, et que tu augmentes d'un niveau à l'intérieur.

Ca donnerait donc:


if ($nl == "oui")
{
mysql_query("insert into spip_nl (id, Nom, Prenom, email) values('', '".$nom."', '".$prenom."', '".$email."')");
mail($cible, $objet, $contenu, $headers);
echo '<p style="padding:5px 0 8px 5px;">'.$message_envoye1.'</p>'."\n";
}
else if ($nl != "oui")
{
mail($cible, $objet, $contenu, $headers);
echo '<p style="padding:5px 0 8px 5px;">'.$message_envoye2.'</p>'."\n";
}
else
{
echo '<p style="padding:5px 0 8px 5px;">'.$message_non_envoye.'</p>'."\n\n\n";
}
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p style="padding-left:5px; color:#BF0D0D">'.$message_formulaire_invalide.'</p>'."\n";
$err_formulaire = true;
}
}

Et là, le début de ton code veut dire:

si (condition) alors (faire quelque chose) sinon si (même condition est fausse) alors (faire autre chose) sinon (faire encore autre chose)

Tu comprends bien que le dernier cas de figure ne peut jamais arriver. C'est un peu comme si tu disais si (pile) alors (A) sinon si (face) alors (B) sinon ©...

Et de surcroît, ça ne fait pas du tout ce que tu voudrais que ça fasse, puisque tu ne testes plus de retour de mail() pour dire si le message a été envoyé ou pas.

Ce serait donc plutôt:


if (mail($cible, $objet, $contenu, $headers))
{
if ($nl == "oui")
{
mysql_query("insert into spip_nl (id, Nom, Prenom, email) values('', '".$nom."', '".$prenom."', '".$email."')");
echo '<p style="padding:5px 0 8px 5px;">'.$message_envoye1.'</p>'."\n";
}
else
{
echo '<p style="padding:5px 0 8px 5px;">'.$message_envoye2.'</p>'."\n";
}
}
else
{
echo '<p style="padding:5px 0 8px 5px;">'.$message_non_envoye.'</p>'."\n\n\n";
}

Je te passe le fait qu'il faudrait que tu penses à escaper les données avant de les mettre dans une requête SQL (mysql_real_escape_string doit devenir ton ami).

Jacques.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...