每次发送时,表单都会清除数组

时间:2014-04-01 10:05:51

标签: php html mysql

我有一个包含2个选项的表单,当你发送第一个时,第二个选择会对我的oracle bd上带有查询的值进行充电,然后当我发送第二个select时,它会生成一个带有复选框的表:< / p>

if(isset($idTActi)){
  $stallTableTarifas=oci_parse($conn, "SELECT TARIFAS.ID, TARIFAS.ID_TIPO_ACTIVIDAD, TARIFAS.TIPO, TIPO_ACTIVIDAD.TEMPS_KM, TARIFAS.PRECIO 
                                       FROM TARIFAS, TIPO_ACTIVIDAD         
                                       WHERE TARIFAS.ID_TIPO_ACTIVIDAD = TIPO_ACTIVIDAD.ID 
                                       AND TARIFAS.ID_TIPO_ACTIVIDAD = $idTActi");
  oci_execute($stallTableTarifas);
  echo "<div class='divPrecios'>";
    echo "<table>";
      echo "<tr class='tabPreciosTitles'>";
        echo "<td>Tipus Tarifa</td>
              <td>Temps/Km</td>
              <td>Preu</td>
              <td><input type='submit' class='carrito' value=''></td>";
      echo "</tr>";
      while (($row=oci_fetch_array($stallTableTarifas,OCI_BOTH))!=false){
        echo "<tr>";
          echo "<td>".$row['TIPO']."</td>";
          echo "<td>".$row['TEMPS_KM']."</td>";
          echo "<td>".$row['PRECIO']."</td>";
          echo "<td><input type='checkbox' name='checkbox[]' value='".$row['ID']."'/></td>";
        echo "</tr>";
      }
    echo "</table>";
  echo "</div>";
}
echo "</form>";

变量$ idTActi它是我从第二个选择返回的ID,所以当我点击复选框并将其发送到名为class =&#39; carrito&#39;的按钮时,那个&# 39; s是我在css上生成的精灵,我在底部看到另一张表格,其中包含我在上一张桌子上选择的信息:

echo "<div class='divPrecios'>";
echo "<table>";
echo "<tr class='tabPreciosTitles'>";
  echo "<td>Nom Activitat</td>
        <td>Nom Tipus Activitat</td>
        <td>Tipus Tarifa</td>
        <td>Temps/km</td>
        <td>Preu</td>";
echo "</tr>";
foreach($_POST['checkbox'] as $item){
  $stallTableCarrito=oci_parse($conn, "SELECT ACTIVIDAD.NOM AS NOM_ACTIVIDAD, TIPO_ACTIVIDAD.NOM AS NOM_TACTIVIDAD, TARIFAS.TIPO, TIPO_ACTIVIDAD.TEMPS_KM, TARIFAS.PRECIO
                                       FROM TARIFAS, ACTIVIDAD, TIPO_ACTIVIDAD
                                       WHERE TARIFAS.ID = $item
                                       AND TARIFAS.ID_TIPO_ACTIVIDAD = TIPO_ACTIVIDAD.ID
                                       AND TIPO_ACTIVIDAD.ID_ACTIVIDAD = ACTIVIDAD.ID");
  oci_execute($stallTableCarrito);

  $array=array(
    0=>array(),
    1=>array(),
    2=>array(),
    3=>array(),
    4=>array()
  );

  while (($row=oci_fetch_array($stallTableCarrito,OCI_BOTH))!=false){
      array_push($array[0],$row['NOM_ACTIVIDAD']);
      array_push($array[1],$row['NOM_TACTIVIDAD']);
      array_push($array[2],$row['TIPO']);
      array_push($array[3],$row['TEMPS_KM']);
      array_push($array[4],$row['PRECIO']);
  }

  for ($x=0;$x<count($array[0]);$x++){
    echo "<tr>";
    echo "  <td>".$array[0][$x]."</td>";
    echo "  <td>".$array[1][$x]."</td>";
    echo "  <td>".$array[2][$x]."</td>";
    echo "  <td>".$array[3][$x]."</td>";
    echo "  <td>".$array[4][$x]."</td>";
    echo "  <td><input type='submit' class='carritoElim' value=''></td>";
    echo "</tr>";
  }
}   

echo "</table>";
echo "</div>";

基本上这是一个购物形式。

问题在哪里?当我发送带有按钮class =&#39; carrito&#39;的推送复选框时,表单默认刷新页面并清除我的数组,什么可以我呢?

1 个答案:

答案 0 :(得分:0)

在您的代码的第一部分中,您的表单标记是否已打开? (我想这是否有效)


在第二部分中,表单中的<input type='submit' class='carritoElim' value=''>标记是? 因为如果不是,你会度过一段美好的时光; - )


也许在最后一种形式中,您应该生成与第一个表单相同名称和相同值的隐藏输入。

如果你不认为你的变量$ idTActi不再被设置,它将不会成功完成第一次测试if(isset($idTActi))。这可能就是你得到一个清除页面的原因。


如果你在同一个php页面中有一个多步表单,对于这种html代码:

<form method=POST url="myURL">
  <select name="select1">[...]</select>
  <select name="select2">[...]</select>
  <!-- VARIOUS PART : may not be displayed -->
  <div id="checkboxes">
    <input type="hidden" name="boxStep" value="1"/>
    <input type="checkbox" name="cb1" value="1"/>
    [...]
  </div>
  <!-- END OF VARIOUS PART -->
</form>

然后你需要按顺序进行php测试:

// if post request
if (isset($_POST)) {
    if (isset($_POST['boxStep'])) {
        // behavior when checkboxes values are sent
    } else {
        if (isset($_POST['select2'])) {
            // behavior when second select is filled
            // display "VARIOUS PART"
        } else {
            // behavior when only first select is filled
            // Do not display "VARIOUS PART"
        }
    }
} else {
    // default behavior (no select filled)
    // Do not display "VARIOUS PART"
}

阿波罗