Se connecter / S'enregistrer

Résolu Cases à cocher

Solutions (69)
Tags :
  • Programmation
|
Bonjour je souhaite faire un site pour mes éléves en chimie et je n'arrive pas a réaliser un tableau de mots avec des cases à cocher et selon les cases qui ont été cochés cela renverrait à une page précise :

par exemple si j'ai cette liste :

carbone
cuivre
eau
fer
sable
feu
pierre

si je coche carbone et sable et eau j'aimerai aprés avoir appuyé sur un bouton "ok" pouvoir aller sur une page précise html. si je coche juste carbone et sable c'est une autre page qui s'ouvrira:

Quelqu'un pourrait t'il m'expliquer la marche à suivre. je suis même prêt à prendre quelques cours sur paris si cela est nécessaire.

yoann
Contenus similaires
Meilleure solution
partage
, Modérateur |
Pas de soucis. Il y a aussi SiM07 à remercier, je n'ai pas fait de PHP depuis un moment, j'aurais eu un peu de mal à tout ressortir comme ça.

Histoire de récapituler tout le topic plutôt que de devoir lire tous les messages si ça peut servir à quelqu'un, au final on a :
Formulaire HTML:
  1. <form method="post" action="traitement.php" >
  2. <input type="checkbox" name="data[carbone]" value="1"> carbone
  3. <input type="checkbox" name="data[cuivre]" value="2"> cuivre
  4. <input type="checkbox" name="data[eau]" value="4"> eau
  5. <input type="checkbox" name="data[fer]" value="8">fer
  6. <input type="checkbox" name="data[sable]" value="16">sable
  7. <input type="checkbox" name="data[feu]" value="32">feu
  8. <input type="checkbox" name="data[pierre]" value="64">pierre
  9. <input type="submit" value="Ok">
  10. </form>


Page traitement.php
  1. <?php
  2. if (isset($_POST['data']))
  3. $data = $_POST['data'];
  4. $sum = 0;
  5. foreach($data as $d) {
  6. $sum += $d;
  7. }
  8. if($sum > 0) {
  9. if(exec("ls -l ./ | grep page-$sum.html" )) {
  10. header ("Location: http://.../page-$sum.html" );
  11. } else {
  12. header ("Location: http://.../pageinexistante.html");
  13. }
  14. }
  15. ?>
  • Commenter cette solution |
Score
0
òh
òi
|
merci de tes conseils...en fait la réponse m'est venue des états unis, le module dont j'ai est "taxonomy browser" mais il n'est pas encore développé pour drupal 7 mais sous drupal 6..donc je vais devoir patienter un peu. à bientôt !
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Non désolé.
Mais drupal a une communauté française, alors je te conseillerai d'aller sur http://drupalfr.org/ et tu pourras accéder à leur forum et la documentation en français
  • Commenter cette réponse |
Score
0
òh
òi
|
Peut être connais tu un membre de ce forum qui soit spécialisé dans drupal ? en fait j'aimerai utilisé drupal car c'est bien pratique pour un amateur comme moi d'avoir à disposition des fonctionnalités qui me serait longue à programmer et a sécurisé sur un site classique (forum, connection utilisateurs, recherche, blog.....) et aussi mes éléves pourrait eux mêmes apporter leur contributions ce qui m'éviterait d'y passer des heures tous les soirs....merci par avance si jamais tu as une info à ce sujet..
  • Commenter cette réponse |
Score
0
òh
òi
|
oui je suis passé par cette page, je pense que ce module doit exister, cela me parait assez probable mais ce n'est pas facile de s'y retrouver et malheureusement aucun des livres ou forum que j'ai lu ne parle de cela....décidément ces cases à cocher vont me tourmenter même sous drupal...héhé mais je résiste !
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
D'après la doc ( http://drupal.org/node/774892 tout en fin de page juste au dessus des commentaires), ça serait seulement un module à activer.
  • Commenter cette réponse |
Score
0
òh
òi
|
Oui j'ai bien parcouru cette documentation mais il me semble qu'il faut ajouter un module supplémentaire pour arriver à mes fins cependant je n'arrive pas à trouver lequel. dois je ouvrir un nouveau sujet pour ceci ?
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Salut,

Est-ce que tu as lu la documentation drupal sur la taxonomy ?
http://drupal.org/documentation/modules/taxonomy
  • Commenter cette réponse |
Score
0
òh
òi
|
Re bonjour à vous ,

depuis quelques mois je me passionne un peu à drupal qui me semblerait être une bonne solution pour mon site....j'ai bien compris comment styler mes pages en css, comment adapter mes templates et c'est un vrai régal, mais la voila je pêche encore sur la même question des cases à cocher : j'ai associé à chacune de mes expériences (nodes) à une taxonomy particulière..donc par exemple si une de mes expériences utilise du carbone et de l'eau, l'article sera associé a ces deux éléments de taxonomy. Et maintenant j'aimerai avoir sur ma page de garde un formulaire "type cases à cocher" qui me permettrait de cliquer sur les éléments de ma taxonomy (ici eau et carbone mais il y a le choix parmi une trentaine d'éléments pour l'instant) et d'être redirigé vers toutes les expériences qui ont uniquement "eau et carbone" comme taxo.

Voila je ne sais pas si j'ai été bien clair et je pourrais re-préciser si nécessaire, merci de votre lecture....
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Salut,

Ah oui, le problème c'est qu'il faut quitter après avoir fait un header, sinon il va exécuter le 2ème header.

Ajoute un exit; juste après la ligne 15 et ça devrait être bon.

Et non, pas beaucoup de vacances cette année... une petite semaine à la fin du mois :) 
Bonnes vacances à toi ;) 
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci de ta réponse Omar et désolé pour le retard dans la mienne...(vacances)

J'ai essayé ton code mais le comportement de mon site reste le même pour les combinaisons existantes et quand j'ajoute un élément il va directement sur la pageinexistante.html

devrais je rajouter une syntaxe avant la ligne 18 ?

merci par avance...et bonnes vacances à toi aussi si tu en as...
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Salut,

Avec quelque chose comme ça, ça devrait le faire :
  1. <?php
  2. if (isset($_POST['data']))
  3. $data = $_POST['data'];
  4. $sum = 0;
  5. foreach($data as $d) {
  6. $sum += $d;
  7. }
  8. if($sum > 0) {
  9. if(exec("ls -l ./ | grep page-$sum.html" )) {
  10. header ("Location: http://.../page-$sum.html" );
  11. } else {
  12. foreach($data as $d) {
  13. $otherSum = $sum - $d;
  14. if(exec("ls -l ./ | grep page-$otherSum.html")) {
  15. header ("Location: http://.../page-$otherSum.html" );
  16. }
  17. }
  18. header ("Location: http://.../pageinexistante.html" );
  19. }
  20. }
  21. ?>


Si la somme n'existe pas, on re-parcourt tous les éléments cochés, et on diminue la somme totale avec la valeur de l'élément courant, on teste si cette valeur existe, si elle existe, on affiche la page, sinon on passe à l'élément suivant.
Et sinon, le comportement normal.
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour à tous,

me voila de retour quelques mois plus tard pour vous demander un petit détail supplémentaire (dans le code affiché en tant que meilleur réponse)....serait t'il possible d'ajouter à ce code une fonction qui permettrait par exemple que si une personne coche 4 éléments et que la combinaison de ces 4 éléments n'existe pas que la personne soit redirigée vers une page ou il y a a par exemple 3 de ces éléments au lieu de la rediriger vers une page qui annonce que la combinaison n'existe pas...par exemple si on coche cuivre carbone aluminium zinc et que cette combinaison n'existe pas mais par contre cuivre carbone et zinc existe alors ce sera cette dernière qui serait affiché ...

car au moins mes éleves pourrait travailler sur une combinaison avec des éléments qu'ils possédent..car maintenant j'ai 23 éléments dans mon site et cela fais beaucoup de combinaisons et ilme faudra encore beaucoup de temps (libre!!) avant de pouvoir toutes les rentrer.....

merci à vous...

Yoann
  • Commenter cette réponse |
Score
0
òh
òi
|
Effectivement je n'avais pas pensé à ce paramètre de sécurité.. le code donnerait quoi avec cette fonction ? çela pourrait être intéressant de compléter le traitement.php pour le sécuriser afin de compléter ce forum peut être.

  • Commenter cette réponse |
Score
0
òh
òi
, Ex-AdMiN |
En général, un hébergeur désactive les fonction d'appel système comme exec(). La raison est simple, si il y a une vulnérabilité qqpart, alors il est possible d'exécuter du code. Imagine une personne qui met dans son code exec($_GET['toto']); sans vérification. Une personne passe et met dans l'url toto=rm -Rf * / patatra ! tous les fichiers ayant de mauvais droit disparaissent ... On peut également imaginer bien pire comme scénario :) 
  • Commenter cette réponse |
Score
0
òh
òi
|
effectivement cela marche bien....mais peut être que cela serait bon d'essayer avec glob aussi ? Quand tu dis plus sécurisé c'est par rapport à quoi ? il se pourrait que la fonction exec ne soit pas constante ?
  • Commenter cette réponse |
Score
0
òh
òi
, Ex-AdMiN |
A mon avis sur un serveur bien configurer ça ne marchera pas. Il aurait été préférable d'utiliser un glob() bien plus sécurisé. Mais bon ... Cool si ca marche.
  • Commenter cette réponse |
Score
0
òh
òi
|
oui n'oublions pas Simo7........ bonne continuation à vous tous. et je reste dans le coin car il y a beaucoup à apprendre sur vos forums.....1000 mercis.
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Je met ce message en tant que meilleure réponse, ce qui permettra de passer ce sujet en Résolu et de monter le message directement en dessous de ta question.

N'hésites pas à revenir vers nous si tu as un soucis
  • Commenter cette réponse |
Score
0
òh
òi
|
trés bien je comprends le code en entier donc à priori, c'est même vraiment trés intéressant donc je vais continuer d'apprendre ce langage....

Un grand merci à toi Omar ainsi qu'a Solr j'ai beaucoup appris avec vous. C'est vraiment cool de mettre votre savoir au profit d'amateurs tels que moi.


  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Oui, j'ai oublié de dire que "exec" permet d'exécuter des commandes sur la machine directement, donc dans ce cas, ce n'est pas du PHP, ça exécute des commandes sur le serveur.

./ permet de spécifier le dossier courant, vu qu'il me semble qu'un ls -l ne fonctionne pas tout seul, il faut spécifier que l'on veut le dossier actuel.
Donc, si tu les mets dans un autre dossier, ta commande fonctionnerait, mais tu devrait pouvoir faire un peu plus simplement :
exec("ls -l pageschimie | grep page-$sum.html")

Je n'ai pas de shell unix à portée de main pour tester, mais les 2 solutions devraient fonctionner.
  • Commenter cette réponse |
Score
0
òh
òi
|
ça me parait trés clair... mais quand tu dis unix cela veut dire que tu "executes" un autre langage que php ? et si mes pages étaient dans le dossier /pageschimie j'aurai à écrice cela ? :

exec("ls -l ./pageschimie | grep page-$sum.html" )

  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Fiou... ça en a pris du temps.

Donc, je suppose que tu veux que je t'explique le exec("ls -l ./ | grep page-$sum.html").
C'est deux commandes Unix:
  • ls : permet de lister des fichiers
  • => ls -l ./ : permet de lister les fichiers qui sont dans le dossier courant
  • grep : permet de faire une recherche
  • => grep page-$sum.html : fait une recherche sur page-$sum.html

    Et ces deux commandes sont groupées avec le pipe "|", qui veut dire que l'on utilise la sortie de la 1ère commande comme l'entrée de la 2nde commande.

    Du coup:
    ls -l ./ va te lister tous les fichiers qui sont dans le dossier courant
    donc tu auras
    page-1.html
    page-2.html
    page-3.html
    pageinexistante.html
    traitement.php
    etc...

    On va utiliser toutes ces lignes retournées comme entrée de la commande grep qui va rechercher une ligne page-$sum.html
    Donc, si page-$sum.html existe dans la sortie de "ls", elle va être récupérée grâce à la commande grep, et le exec retournera true
    Si la page-$sum.html n'existe pas, le grep ne retournera rien, et le exec retournera false.

    J'espère que c'est un peu plus clair.
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    Je crois que tu viens de terminer ce topic avec brillot !! ça marche impeccable ! le seul inconvénient c'est que je ne comprends pas cette ligne de code peux tu m'en dire un peu plus ? et puis aprés je bouclerai ce topic en réecrivant tout cela bien proprement je suis sûr qu'il pourra en aider d'autres...
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    Tu as un " qui a sauté à la ligne header ("location: http://www.chimiefacile.com/pageinexistante.html );

    Il faut mettre
    header("Location: http://www.chimiefacile.com/pageinexistante.html");
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    avec ce code j'obtiens une erreur a la ligne 15 :

    <?php
    if (isset($_POST['data']))
    $data = $_POST['data'];
    $sum = 0;
    foreach($data as $d) {
    $sum += $d;
    }
    if($sum > 0) {
    if(exec("ls -l ./ | grep page-$sum.html" )) {
    header ("Location: http://chimiefacile.com/page-$sum.html" );
    }
    else {
    header ("location: http://www.chimiefacile.com/pageinexistante.html );
    }}
    ?> //ERREUR SUR CETTE LIGNE
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    c'est parce que tu n'as pas mis le slash avant "/page-$sum.html" comme pour le file_exists
    C'est biarre que file_exists retourne false...
    Remplace
    if(file_exists( $_SERVER['DOCUMENT_ROOT'] . "/page-$sum.html")) {
    par
    if(exec("ls -l ./ | grep page-$sum.html")) {

    Est-ce que ça fonctionne ?
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    donc avec le code suivant :

    <?php
    if (isset($_POST['data']))
    $data = $_POST['data'];
    $sum = 0;
    foreach($data as $d) {
    $sum += $d;
    }
    if($sum > 0) {
    if(file_exists( $_SERVER['DOCUMENT_ROOT']. "/page-$sum.html" )) {
    header ("Location: http://www.chimiefacile.com/page-$sum.html" );
    }
    else {
    echo $_SERVER['DOCUMENT_ROOT'] . "page-$sum.html";
    }}
    ?>

    j'obtiens ce code d'erreur :

    /kunden/homepages/32/d318743363/htdocs/chimiefacilepage-11.html


    c'est pas bizarre qu'il n'y ait pas de slash / entre chimiefacile et page-11.html ?
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    enleve la redirection vers inexistante et fais un echo comme je t'ai dit a la place
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    non cela ne fonctionne pas non plus toutes mes combinaisons sont dirigées ver la page chimiefacile.com/combinaison-inexistante. L'ordre a t'il une importance dans mon cas ? car je ne peux mettre la seconde partie du code avant l'établissement de la variable $sum....
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    Met le juste au dessus du if(isset(...))

    Mais d'après ce que tu donnes, il faut peut être ajouter un / entre temps
    $_SERVER['DOCUMENT_ROOT'] . "/page-$sum.html"
    enfin, comme je te l'avais donné au début en fait.
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    oui j'avais consulté cette même source et c'est vrai que ton code me parait totalement correct ? comment puis je faire cet essai ? je mets cette ligne de commande dans le mon fichier traitement.php seule ? ou bien a la suite de mon code ?

    si je mets que cette ligne dans mon traitement.php

    cela me donne ce message : /kunden/homepages/32/d318743363/htdocs/chimiefacilepage-.html
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    Comme tu peux le lire sur la documentation de file_exists : http://fr.php.net/file_exists
    C'est pas un chemin du type http://... et ça ne marche pas avec des chemin relatifs non plus.
    Je ne vois pas pourquoi $_SERVER['DOCUMENT_ROOT'] . "page-$sum.html" ne fonctionnerait pas.
    Essaie de faire un echo $_SERVER['DOCUMENT_ROOT'] . "page-$sum.html" pour voir ce que ça te retourne.
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    j'ai essayé comme cela aussi aprés avoir bouquiné un site de php :

    <?php
    if (isset($_POST['data']))
    $data = $_POST['data'];
    $sum = 0;
    foreach($data as $d) {
    $sum += $d;
    }
    if($sum > 0) {
    if(file_exists(page-$sum.html)) {
    header ("Location: http://www.chimiefacile.com/page-$sum.html" );
    }
    else {
    header ("location: http://www.chimiefacile/cettecombinaisonn-existepas.htm..." );
    }}
    ?>
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    j'ai toujours le même problème...pourtant si je retire cette partie du code les pages sont bien dirigées... mes documents sont pourtant bien à la racine.... j'ai pourtant essayé plusieurs chemins pour la ligne file exist (http://chimiefacile.com/page$sum.html ou bien juste pagepage-$sum.html comme tu me l'avais préconisé.... ai je un autre moyen ?
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    oui c'est le file_exists. Comme ça, ça devrait etre bon

    <?php
    if (isset($_POST['data']))
    $data = $_POST['data'];
    $sum = 0;
    foreach($data as $d) {
    $sum += $d;
    }
    if($sum > 0) {
    if(file_exists( $_SERVER['DOCUMENT_ROOT'] . "page-$sum.html" )) {
    header ("Location: http://www.chimiefacile.com/page-$sum.html" );
    }
    else {
    header ("location: http://www.chimiefacile.com/combinaison-inexistante.htm..." );
    }}
    ?>
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    maintenant cela me renvoie toujours à la page que j'ai crée pour annoncer que la combinaison n'existe pas. J'ai pourtant les pages dans la racine : page-1.html page-3.html ect.... ai je fait une erreur de syntaxe ?

    voici mon fichier traitement.php intégral actuel :

    <?php
    if (isset($_POST['data']))
    $data = $_POST['data'];
    $sum = 0;
    foreach($data as $d) {
    $sum += $d;
    }
    if($sum > 0) {
    if(file_exists( $_SERVER['DOCUMENT_ROOT'] . "http://www.chimiefacile.com/page-$sum.html" )) {
    header ("Location: http://www.chimiefacile.com/page-$sum.html" );
    }
    else {
    header ("location: http://www.chimiefacile.com/combinaison-inexistante.htm..." );
    }}
    ?>

    j'ai l'impression de mal indiqué ma direction de fichier dans la partie if file_exists
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    Tu dois pouvoir te débrouiller avec la fonction file_exists

    1. <?php
    2. if (isset($_POST['data'])) {
    3. $data = $_POST['data'];
    4. $sum = 0;
    5. foreach($data as $d) {
    6. $sum += $d;
    7. }
    8. if($sum > 0) {
    9. if(file_exists( $_SERVER['DOCUMENT_ROOT'] . "/page-$sum.html")) {
    10. header ("Location: page-$sum.html" );
    11. } else {
    12. echo "Cette combinaison n'existe pas dans le site.";
    13. }
    14. }
    15. }
    16. ?>


    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    je vais essayer ça rapidement merci Omar et j'espère que cette discussion du forum pourra aussi en aider d'autres comme moi. Je me pose une question et si aucune page n'existe n'a été crée pour une combinaison : imaginons que carbone + cuivre ne renvoie a aucune page est t'il possible de renvoyer a une url qui indique que cette combinaison n'existe pas dans le site ?
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    Est-ce que tu as testé avec ça ?
    Tu pourras rajouter un else header("location: tapagedeformulaire.php"); si tu veux dans le cas où $sum est égal à 0 et dans le cas où $_POST['data'] n'est pas spécifié.

    Mais seulement avec ça, ça devrait fonctionner normalement :) 
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    dans ce cas je dois toujours rajouter else header ("location: mapagedeformulaire.php" ); ou le error reporting suffira ?
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    hop', édité.
    Bien que bon, c'est un petit détail vu qu'il n'y accèdera que par post, mais bon :) 

    Edit: en fait j'avais repris ce qu'il m'avait envoyé par MP, pas ce que tu as fait plus haut, ce qui peut expliquer qu'il n'y ait pas de isset().
    Enfin, il y avait deux fois $data = $_POST['data'] dans ce qu'il m'a envoyé, dont un avec isset, et j'ai viré le mauvais, enfin bref...
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Ex-AdMiN |
    OmaR tu as trop enlevé, le code plante si tu appel traitement.php en GET. Le isset() sur$_POST est important.
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Modérateur |
    Pour répondre ici plutôt que par MP :

    Si ton formulaire est
    1. <form method="post" action="../../../Users/Yoann/chimiefacile/traitement.php" >
    2. <input type="checkbox" name="data[carbone]" value="1"> carbone
    3. <input type="checkbox" name="data[cuivre]" value="2"> cuivre
    4. <input type="checkbox" name="data[eau]" value="4"> eau
    5. <input type="checkbox" name="data[fer]" value="8">fer
    6. <input type="checkbox" name="data[sable]" value="16">sable
    7. <input type="checkbox" name="data[feu]" value="32">feu
    8. <input type="checkbox" name="data[pierre]" value="64">pierre
    9. <input type="submit" value="Ok">
    10. </form>


    (et que donc, traitement.php s'ouvre bien après avoir validé le formulaire)

    Avoir un traitement.php similaire à ceci devrait le faire (non testé, j'ai juste enlevé le superflus) :
    1. <?php
    2. if (isset($_POST['data'])) {
    3. $data = $_POST['data'];
    4. $sum = 0;
    5. foreach($data as $d) {
    6. $sum += $d;
    7. }
    8.  
    9. if($sum > 0) header ("Location: page-$sum.html" );
    10. }
    11. ?>
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Ex-AdMiN |
    Il faut que le fichier passe par le serveur. Donc plutot que tu es appeler le formulaire de base via le serveur. (je sais c'est pas très clair).

    En gros si le action="" de ton form ne contient pas http://monserveurettout/traitement.php mais un chemin relatif genre /traitement.php alors il faut que tu dans ton url tu es déjà http://monserveurettout/.
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    Oui je comprends bien cela...et même si j'enrage un peu parfois je suis dans le même temps assez content de découvrir ce langage et j'avoue en apprendre plus ici sur le forum et dans le tuto qu'avec le bouquin de janet valade qui pourtant me semble valable.....merci en tous cas de la patience que tu as pris a me répondre. j'ai toutefois une dernière question (enfin je l'espère) le code de mon traitement php doit bien être dans un fichier traitement.php ? doit t'il y avoir juste le code ? ou bien je dois mettre comme une page html des balises head body title......? car j'obtiens l'erreur suivante :

    The requested URL /Users/Yoann/chimiefacile/traitement.php was not found on this server.

    ce fichier traitement.php est pourtant dans la même dossier que ma page de formulaire sous WAMP

    et est ce que mon else est bon comme ceci ?

    <?php
    error_reporting(0);
    $sum = 0;
    $data = array();

    if(isset($_POST['data'])) $data = $_POST['data'];

    foreach($data as $d) {
    $sum += $d;
    }

    if($sum > 0) header ("Location: page-$sum.html" );
    else header ("location: mapagedeformulaire.php");
    ?>
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    , Ex-AdMiN |
    Aucun problème, ce n'est pas une erreur. La notice est en fait le niveau d'erreur le moins élevé et normalement désactivé par défaut dans PHP. Bref le code marchera. suffit de rajouter un error_reporting(0); en première ligne de ta page de traitement et le tour est joué. Mais en fait la ligne 2 ne devrait pas exister ...

    En l'occurrence la ligne 10 permet de faire ce que la ligne 2 fait sans aucun message d'erreur car bien testée.

    Mais bon, parfois j'ai un peu l'impression qu'on prend mon code fait en 3 seconde dans un petit champs texte pour de code archi fonctionnel sans avoir besoin de comprendre.

    Bref ta page de traitement doit être

    1. <?php
    2. $sum = 0;
    3. $data = array();
    4.  
    5. if(isset($_POST['data'])) $data = $_POST['data'];
    6.  
    7. foreach($data as $d) {
    8. $sum += $d;
    9. }
    10.  
    11. if($sum > 0) header ("Location: page-$sum.html" );


    Le problème est mnt que si $sum == 0 alors tu veux pas rester sur la page de traitement actuellement à priori. Donc faut mettre un Location: mapagedeformulaire.html dans un else en dernière ligne. Et je fais exprès de pas mettre la ligne de code histoire que tu comprennes comment le code marche.
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    et dois je créer un tableau ?
    • Commenter cette réponse |
    Score
    0
    òh
    òi
    |
    oui la j'avoue que mon moral commence à en prendre un coup en plus toutes mes pages sont prêtes maintenant et je n'ai plus que ce problème de redirection...je dois donc avoir une page avec le formulaire et une autre qui s'appelle traitement.php c'est bien cela ?

    dans traitement.php je mets ceci uniquement ? :

    1.<?php
    2.$data = $_POST['data']; //penser vérifier qu'il n'y a que des is_numeric
    3.$sum = 0;
    4.foreach($data as $d) {
    5. $sum += $d;
    6.}
    7.
    8.//la tu obltiens par ex 35 (32+2+1) donc tu rediriges vers la page 35
    9.$data = array();
    10.if(isset($_POST['data'])) $data = $_POST['data'];
    11.if($sum > 0) header ("Location: page-$sum.html" );
    12.?>

    j'essaye cela mais j'obtiens ceci :
    Notice: Undefined index: data in C:\wamp\www\Tests\traitement.php on line 2

    Warning: Invalid argument supplied for foreach() in C:\wamp\www\Tests\traitement.php on line 4

    serait t'il possible que quelqu'un me dépatouille je suis aussi prêt à rémunerer vos conseils car j'aimerai proposer ce site à mes éleves avant les révisions du bac. et en fait cela me tiens à coeur même si c'est vrai le php me fait un peu peur...

    merci par avance

    yoann
    • Commenter cette réponse |
    Afficher plus de solutions

    Ce n'est pas ce que vous cherchiez ?

    Tom's guide dans le monde
    • Allemagne
    • Italie
    • Irlande
    • Royaume Uni
    • Etats Unis
    Suivre Tom's Guide
    Inscrivez-vous à la Newsletter
    • ajouter à twitter
    • ajouter à facebook
    • ajouter un flux RSS