Passer du code dans une variable

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Passer du code dans une variable

par albat » 28 déc. 2006, 15:34

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton [Mettre Résolu] qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié). ;)

par Snheed » 28 déc. 2006, 15:22

Bonjour à tous

Alors j'ai réussi à contourner le problème en utilisant les fonctions unset() et sort(). On peut donc considérer cette demande comme terminée.

Ayant posté en tant qu'invité, y'a t'il un modo qui peut mettre [résolu] dans le sujet ?

Merci à tous pour votre aide.

Snheed

par Snheed » 27 déc. 2006, 12:35

Effectivement, il faut faire attention avec les copier/coller :D

Cela dit, ça ne change rien. Je viens de tomber sur la fonction eval(). C'est peut être une solution non ?

Snheed

par zeus » 27 déc. 2006, 11:50

Dans l'idée, je pense que tu es juste mais, d'après ce que je vois, tu va toujours ne rien afficher.

En effet, $condition ne pourra contenir que FALSE parce que tout tes test portent sur $_POST['voiture'] ;)
...&& ($_POST['voiture']==$tableau[$i][0]);}
...&& ($_POST['voiture']==$tableau[$i][1]);}
...&& ($_POST['voiture']==$tableau[$i][2]);} 

par Snheed » 27 déc. 2006, 11:42

Merci zeus, je comprends mieux.

Par contre, j'aurais dû être plus clair au départ car ce n'est pas encore tout à fait ce que je veux. J'ai simplifié au maximum en espérant pouvoir m'en sortir tout seul par la suite mais je n'y arrive pas. Je vais donc essayer d'être plus clair.

J'ai un tableau qui contient des informations (types de voiture, couleurs, options,...) et je souhaiterais afficher certaines lignes de ce tableau en fonction d'informations saisies dans un formulaire de recherche. Sachant que mon formulaire contient 10 critères de recherche et que l'utilisateur à la possibilité de faire une recherche sur qu'un seul critère, je ne vais pas imbriquer des "IF" pour avoir toutes les possibilités. C'est pourquoi, j'avais pensé tester la saisie des différents critères et créer une variable de condition qui une fois générée pourrait être appelée pour afficher le résultat.

J'ai simplifié mon code à 3 critères pour vous montrer :

Code : Tout sélectionner

<html> <body> <form method="POST"> <table> <tr> <td>voiture :</td> <td> <select name="voiture" size="1"> <option>&nbsp;</option> <option value="1">205</option> <option value="2">206</option> <option value="3">207</option> </select> </td> </tr> <tr> <td>couleur :</td> <td> <select name="couleur" size="1"> <option>&nbsp;</option> <option value="1">rouge</option> <option value="2">bleu</option> <option value="3">vert</option> </select> </td> </tr> <tr> <td>option :</td> <td> <select name="option" size="1"> <option>&nbsp;</option> <option value="1">vitres éléctriques</option> <option value="2">fermeture centralisée</option> <option value="3">ABS</option> </select> </td> </tr> </table> <input type="Submit" value="OK"> </form> <?php error_reporting(0); $tableau[0]=array(1,1,1); $tableau[1]=array(1,1,2); $tableau[2]=array(1,2,1); $tableau[3]=array(2,1,1); $tableau[4]=array(2,1,2); $tableau[5]=array(3,1,1); if ($_POST["voiture"]){$action= $action && ($_POST['voiture']==$tableau[$i][0]);} if ($_POST["couleur"]){$action= $action && ($_POST['couleur']==$tableau[$i][1]);} if ($_POST["option"]){$action= $action && ($_POST['option']==$tableau[$i][2]);} for ($i=0;$i<10;$i++){ if (eval($action)){ echo $tableau[$i][0]."-".$tableau[$i][1]."-".$tableau[$i][2]."<br>"; } } ?> </body> </html>
Vos premières réponses m'ont bien permis de comprendre comment imbriquer mes différents tests mais j'ai l'impression que la variable de condition finale n'est pas interprété correctement.

Peut être y'a t'il une solution plus simple d'aborder le problème...
Merci encore pour votre aide.

Snheed

par zeus » 27 déc. 2006, 09:41

Ah, ok, j'avais pas compris ce que tu cherchais à faire :?

Si tu veux executer plusieurs tests et comparer le résultats de tes tests plus tard, il ne faut pas les inihiber.

$i == 1 return TRUE si $i vaut 1, FALSE sinon
pareil pour $j == 3
$test1 = ($i == 1);
$test2 = ($j == 3);
$test1 va donc contenir TRUE ou FALSE

Si tu veux tester si les 2 tests ont été validé, il ne reste plus qu'a vérifier que test1 et test2 contiennent bien TRUE
if ($test1 && $test2) {
  //$test1 et $test2 contiennent TRUE
} else {
  // $test1 ou $test2 contient FALSE
}
Le principe d'un if, c'est que l'expression retourne TRUE ou FALSE et le if teste ce retour ;)

par Snheed » 27 déc. 2006, 09:31

Bonjour à tous,

Merci pour toutes ces précisions intéressantes. J'ai donc remplacé les guillemets par des apostrophes et le "and" par un "&&" mais mon morceau de code ne fonctionne toujours pas.

Code : Tout sélectionner

<?php $i=1; $j=2; $test1='$i==1'; $test2='$j==3'; $test3= $test1." && ".$test2; //echo $test3; if ($test3){ echo "ok"; } else { echo "pas ok"; } ?>
$test3 est bien égale à "$i==1 && $j==3" mais semble ne pas être interprété correctement dans le "if"... Le résultat affiche toujours "ok" alors que j=2... :?

Merci encore pour votre aide.

Snheed

par Ultim4T0m » 24 déc. 2006, 23:45

Excusez mon ignorance grand maitre ^^

Merci pour ces précisions :)

Mais cela ne me fera pas plus utiliser les opérateurs AND et OR ^^'

par Ryle » 23 déc. 2006, 13:05

Objection votre honneur ! :)

Même si je préfére également utiliser les opérateurs && et || (surtout dans des cas simples comme celui-ci), on ne peut pas dire que "and" et "or" ne soient pas correct. Ce sont également des opérateurs logiques qui fonctionnent très bien.

En revanche, "&&" et "AND" n'ont pas la même priorité d'exécution (idem pour "||" et "OR") et peuvent donc avoir des comportement différents. A utiliser avec précaution donc, et dans le doute il vaut mieux effectivement s'en tenir aux && et || ;)

par Ultim4T0m » 23 déc. 2006, 03:02

J'ajouterais également qu'en php, mettre un "and" dans une condition n'est pas correct, il faut utiliser &&

Idem pour "or" ==> ||

par snheed » 22 déc. 2006, 18:00

Merci Zeus, je vais essayer ça :wink:

Snheed

par zeus » 22 déc. 2006, 17:26

Pour qu'une variable ne soit pas interprété, il faut la placer entre ' et non entre "
$a = "1";
echo "$a == 1"; //affiche "1 == 1"
echo '$a == 1'; //affiche "$a == 1"

Passer du code dans une variable

par Snheed » 22 déc. 2006, 17:21

Bonjour à tous,

Je souhaite passer du code dans une variable sans qu'il soit interprété.

Par exemple :

Code : Tout sélectionner

<?php $i=1; $j=3; $test1="$i==1"; $test2="$j==3"; if ($test1 and $test2){ echo "ok"; } else { echo "pas ok"; } ?>
le problème ici c'est que le $i, malgré qu'il soit entre guillemet est interprété. Comment faire pour que le $i reste au format texte ($i reste $i) ?

Merci d'avance pour toutes vos réponses.

Snheed