Créer du code HTML dans une variable php ...

Reisduif
Invité n'ayant pas de compte PHPfrance

22 juil. 2007, 20:48

Bonjour à tous,

en fait, quand l'utilisateur sélectionne un produit, j'ai le formulaire qui est automatiquement soumis.

Donc, le but est de créer dynamiquement un tableau reprenant les caractéristiques du produit. Donc, je place le code html dans une variable php puis j'utilise l'instruction "echo" pour afficher le tableau créé. Le problème, c'est que l'utilisateur peut ajouter autant de produit qu'il veut. Donc, je concatène le contenu de mon tableau en y ajoutant un nouveau tableau et ainsi de suite.

Le problème, c'est qu'il n'ajoute apparemment pas le code à la fin de la châine de caractères.

Voici mon code :

<?
  if (isset($_POST["btnSend"]))
  {
    $intCptProducts = (int) $_POST["txtHiddenCptProducts"];
    $strDynamicProductCode = ereg_replace('\"', '"', $_POST["txtHiddenGenerateProductCode"]);
 }
  else
  {
    $intCptProducts = 0;
    $strDynamicProductsCode = "";
  }
?>

<script language="javascript">
<!--
  function ValidateForm()
  {
    document.frmState.txtHiddenCptProducts.value = <?php echo $intCptProducts; ?>;
  }
// -->
</script>

<html>
<head>
<title>Produits - formulaire</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<form name="frmProduct" method="post" action="CleverForm.php" onSubmit="return ValidateForm();">
  <table width="90%" border="5" align="center" bgcolor="#CCCCCC">
    <tr>
      <td>
        <div align="center"><font face="Times New Roman, Times, serif" size="6">Aperçu des produits</font></div>
      </td>
    </tr>
  </table>
  <br>
  <table width="90%" border="0" align="center">
    <tr>
      <td>
        <p align="left">
    Produits <select name="cmbProducts" size="1" OnChange="document.frmProduct.getElementById("btnSubmit").click();">
      <option value="0" selected>Faites votre choix</option>
      <option value="1">Banane</option>
      <option value="2">Pomme</option>
      <option value="3">poire</option>
      <option value="4">Prune</option>
      <option value="5">Mandarine</option>
      <option value="6">Clémentine</option>
      <option value="7">Groseille</option>
      <option value="8">Framboise</option>
      <option value="9">Fraise</option>
      <option value="10">Ananas</option>
    </select>
    <br>
<?
    $intWhichProducts = (int) $_POST["cmbProducts"];

    if ($intWhichProducts != 0)
    {
      $intCptProducts++;

      $strDynamicProducts = $strDynamicProductsCode;

      $strDynamicProducts .= "<table width=\"90%\" border=\"1\" align=\"center\">";

      $strDynamicProducts .= "  <tr>";

      switch ($intWhichProducts)
      {
        case 1:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Banane</td>";
          break;
        case 2:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Pomme</td>";
          break;
        case 3:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Poire</td>";
          break;
        case 4:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Prune</td>";
          break;
        case 5:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Mandarine</td>";
          break;
        case 6:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Clémentine</td>";
          break;
        case 7:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Groseille</td>";
          break;
        case 8:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Framboise</td>";
          break;
        case 9:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Fraise</td>";
          break;
        case 10:
          $strDynamicProducts .= "    <td width=\"20%\">".$intCptProducts.". Ananas</td>";
          break;
      }

      $strDynamicProducts .= "    <td width=\"20%\">A. Prix</td>";
      $strDynamicProducts .= "    <td width=\"20%\">B. Quantité</td>";
      $strDynamicProducts .= "    <td width=\"20%\">C. Origine</td>";
      $strDynamicProducts .= "    <td width=\"20%\">D. Commentaire</td>";
      $strDynamicProducts .= "  </tr>";
      $strDynamicProducts .= "</table>";

      echo $strDynamicProducts ;
    }
?>

  <p align="center"> </p>
  <p align="center">&nbsp;</p>
  <p>&nbsp;</p>
      </td>
    </tr>
  </table>
  <p align="center">
    <input type="submit" name="btnSend" id="btnSubmit" value="Envoyer">
  </p>
  <input type="hidden" name="txtHiddenCptProducts">
  <input type="hidden" name="txtHiddenGenerateProductsCode" value="<? print ereg_replace('"', '\"', $strDynamicProducts ); ?>">
</form>
</body>
</html>

Merci d'avance

Thierry

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 juil. 2007, 00:31

Peut être est ce parce que tu écrases tes valeurs au lieu de les concaténés :
$strDynamicProductCode = ereg_replace('\"', '"', $_POST["txtHiddenGenerateProductCode"]);
...
$strDynamicProducts = $strDynamicProductsCode; 
Pourquoi ne pas plutôt garder les valeurs sélectionnées (et seulement elles) en session et ne générer le tableau que pour l'affichage ?

Ca sera beaucoup plus simple d'en ajouter, d'en modifier ou d'en enlever, parce que tu vas sérieusement t'amuser pour la retrouver si l'utilisateur a saisi 4 ou 5 lignes et souhaite supprimer la seconde ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...