Pb boucle dans tableau à 2 dimensions

Eléphanteau du PHP | 40 Messages

17 avr. 2006, 12:33

Bonjour à tous,

Je vous soumet de nouveau mon script modifié. Je bute sur la récupération des différents arguments ajoutés dans un tableau à 2 dimensions par mes fonctions de création de formulaire. Le tableau s'appelle donc $tableau et contient pour chaque champ ajouté un tableau qui porte le nom du champ créé (ici 'age_capitaine' et 'adresse') avec 2 arguments (le type et le critère obligatoire ou non)

Je souhaite donc récupérer dans ma fonction valid_fields() les différents champs. En fonction du type, j'effectue un traitement et en fonction de $needed, je suis censé créer un tableau d'erreur si le champ est vide.

Pour l'instant, j'ai un souci d'affichage dans la boucle foreach de cette fonction puisque j'ai le résultat suivant :

Code : Tout sélectionner

age_capitaine age_capitaine le champ age_capitaine n est pas obligatoire adresse adresse le champ adresse n est pas obligatoire
Alors que je devrais avoir :

Code : Tout sélectionner

age_capitaine age_capitaine le champ age_capitaine n est pas obligatoire adresse adresse le champ adresse est obligatoire
Que se passe t-il ???
Merci d'avance de votre aide.
Voici le code :

<? session_start(); ?>
<?php

function FormCreate($class, $action, $formname='Form', $method='POST', $encryption='') {
  echo '<form method="' . $method . '" action="' . $action . '" name="' . $formname . '" class="' . $class . '">' . "\n";
}

function FormEnd() {
  echo '</form>';
}

function FormInput ($label, $name, $size, $maxlenght, $needed) {
  global $tableau;
  $tableau[$name] = array ($needed, 'text');

  $result_forminput  = '<label for="' . $name . '">' . $label . '</label>' . "\n" . '<input type="text" id="' . $name;
  $result_forminput .= '" name="' . $name . '" value="';
  $result_forminput .= isset($_POST[$name])?$_POST[$name]:NULL;
  $result_forminput .= '" size="' . $size . '" maxlenght="' . $maxlenght . '" />';
  $result_forminput .= ($needed=='1')?"*":NULL;
  $result_forminput .= "<br />\n";

  echo $result_forminput;
}

function FormSubmit($namesubmit, $labelsubmit) {
  $result_formsubmit  = '<input type="submit" class="checkform" ';
  $result_formsubmit .= 'name="' . $namesubmit . '" value="' . $labelsubmit . '" />';
  echo $result_formsubmit;
}

function valid_fields($tableau)
{
  foreach ($tableau as $sous_tableau=>$valeur)
  {
    print_r('<br />' . $sous_tableau . '<br />');
    // $sous_tableau contient le nom du champ
    print $sous_tableau;
    list($type, $needed) = $valeur;
    // $type contient le type du champ et $needed contient 1 ou 0 selon qu'il est requis ou non
    //print $type . '<br />';
    //print $needed . '<br />';
    if ($needed == 1)
    {
      echo 'le champ ' . $sous_tableau . ' est obligatoire <br />';
    }
    else
    {
        echo 'le champ ' . $sous_tableau . ' n est pas obligatoire <br />';
    }
  }
}

<?
$tableau='';
// Début du script
$action=(isset($_POST['envoi']))?$_POST['envoi'] : Null;

if($action) {
    $tableau = $_SESSION['tab'];
    valid_fields($tableau);

}
?>
<html>
<head>
</head><body>
<?php


FormCreate('css', 'formulaire3.php', 'Formulaire');
FormInput('Age du capitaine : ', 'age_capitaine', '50', '10', 0);
FormInput('Adresse : ', 'adresse', '30', '10', 1);
$_SESSION['tab'] = $tableau;

FormSubmit('envoi', 'Valider');
FormEnd();

?>

</body>
</html>

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 avr. 2006, 12:54

Salut,

inverse l'odre de récupération:
remplace:
list($type, $needed) = $valeur;
par:
list($needed,$type) = $valeur;
puisque tu inseres dans cet ordre:
$tableau[$name] = array ($needed, 'text');

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 40 Messages

17 avr. 2006, 12:58

C'est terrible de ne pas avoir vu ça !!! :cry:

Merci beaucoup Truc pour la soluce, j'avais tout essayé sauf ça ! :merci:

ça fonctionne nickel du coup :pouce:

@++

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

17 avr. 2006, 13:10

et pourtant tu avais fait un test d'affichage:
 //print $type . '<br />';
//print $needed . '<br />'; 
n'oublis pas le [Résolu] :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute