【问题标题】:$_POST return an array$_POST 返回一个数组
【发布时间】:2015-11-24 00:27:03
【问题描述】:

我最近遇到了 $_POST 的问题。

当我写的时候:

print_r($_POST['nb_acces']);

我明白了:

1

这是我在表单中写的值。

但如果我写:

$nb_acces = $_POST['nb_acces'];
print_r($nb_acces )

我明白了:

数组 ( [nb] => 0 )

它以前可以工作,现在我不明白会发生什么。它可能来自服务器配置或其他什么?

编辑:

我的意见:

<form id='sous_paiement' name='sous_paiement' method='post' action='commande_enregistre_test.php?ecole=<?php echo $id_ecole; ?>'>
    <input id='nb_acces' name='nb_acces' style='width:90px;border:1px solid black;padding-left:4px;text-align:center;' />

是的,如果我使用 $_POST['nb_acces'] 我可以回显该值。虽然我希望检查该值是否为整数并避免注入。

我得到这个数组的方式是我不明白的一点。我只有一个输入。

它可能来自我检查 JavaScript 函数吗(对不起法语单词,我在这里删除了所有非数字字符并计算了一些价格):

function filtre_saisie() {
      var input_acces = document.getElementById("nb_acces");
      var nb_acces = input_acces.value.replace(/[^0-9]/g, '');
      input_acces.value = nb_acces;

      var prix_unitaire = calcul_prix_unitaire(nb_acces);
      var prix_total = calcul_prix_total(nb_acces);

      document.getElementById("div_prix_unitaire").innerHTML = prix_unitaire;
      document.getElementById("div_prix_total").innerHTML = prix_total;
    }

会不会是这个替换

编辑 2 ----------------------------------

好吧,整个表格:

<form id='sous_paiement' name='sous_paiement' method='post' action='commande_enregistre_test.php?ecole=<?php echo $id_ecole; ?>'>
      <div class="div_categories">
        <p style='margin:0;padding:3px;padding-left:60px;'>Indiquez le <strong>nombre d'accès</strong> que vous souhaitez acheter :</p>
      </div>

      <br />
      <div id="erreur_nb_acces" style="color:red;"><br /></div>


      <table style='border-collapse:collapse;'>
        <tr style='font-weight:bold;border:1px solid #eee;background-color:white;'>
          <td style='width:200px;padding-left:10px;'>Nombre d'accès</td>
          <td style='width:100px;padding-left:10px;padding-right:10px;'><input id='nb_acces' name='nb_acces' type="text" style='width:90px;border:1px solid black;padding-left:4px;text-align:center;' /></td>
        </tr>
      </table>

      <br />

      <table style='border-collapse:collapse;'>
        <tr style='border:1px solid #eee;background-color:white;border-bottom:1px solid #999;'>
          <td style='width:200px;padding-left:10px;'>Prix par accès</td>
          <td style='width:100px;padding-left:10px;padding-right:10px;text-align:right;'><div id='div_prix_unitaire' style='display:inline;'>-</div> &euro;</td>
        </tr>
        <tr style='font-weight:bold;border:1px solid #999;background-color:white;'>
          <td style='width:200px;padding-left:10px;'>PRIX TOTAL</td>
          <td style='width:100px;padding-left:10px;padding-right:10px;text-align:right;'><div id='div_prix_total' style='display:inline;'>-</div> &euro;</td>
        </tr>
      </table>

      <div style='width:190px;margin-top:5px;'>
        <a href='#' onclick='ouvrirPopUp_tarifs();'><img src='../images/IconeInformation.png' style='border:0px solid red;float:left;display:inline;' /><span style="line-height:24px;">Consulter les tarifs</span></a>
      </div>
      <div style="clear:both;"></div>

      <br /><br />
      <div class="div_categories">
        <p style='margin:0;padding:3px;padding-left:60px;'>Choisissez votre <strong>mode de paiement</strong> :</p>
      </div>

      <br /><br />

      <table class="tab_mode_paiement" style="border-collapse:collapse;">
        <tr>
          <td>
            <input id='paiement_cb' name='mode_paiement' value='5' class='eleves' type='radio' checked="checked" style="cursor:pointer" />
          </td>
          <td style="font-weight:bold;padding-right:80px;border-right:1px solid #999;">
            <label for='paiement_cb' style="cursor:pointer">
              <img src="../images/ic_cb.jpg" style="float:left;display:inline;padding-right:10px;" /> Carte bancaire
            </label>
          </td>
          <td style="padding-left:40px;">
            <!--<input id='paiement_paypal' name='mode_paiement' value='3' class='eleves' type='radio' style="cursor:pointer" />-->
          </td>
          <td style="font-family:arial;font-size:20px;padding-right:120px;">
            <!--<label for='paiement_paypal' style="cursor:pointer">
              <span style="color:rgba(0,3,128,1)">Pay</span><span style="color:rgba(0,158,210,1)">Pal</span>
            </label>-->
          </td>
          <td>
            <input id='paiement_virement' name='mode_paiement' value='1' class='eleves' type='radio' style="cursor:pointer" />
          </td>
          <td style="font-weight:bold;">
            <label for='paiement_virement' style="cursor:pointer">
              Par virement bancaire
            </label>
          </td>
        </tr>
        <tr>
          <td colspan="2" style="border-right:1px solid #999;">Recevez vos accès immédiatement</td>
          <td colspan="4" style="padding-left:90px;">Accès disponibles après réception du paiement</td>
        </tr>
      </table>

      <br /><br /><br />

      <input id='enregistrer' name='enregistrer' value='Enregistrer la commande' type='button' onclick='verif_sous_paiement();' style='width:300px;height:40px;' />
      <br /><br />
      <br />
    </form>

还有我的 Javascript:

<script>

    function ouvrirPopUp_tarifs() {
      window.open ('tarifs.php', 'tarifs', config='height=370, width=760, toolbar=no, menubar=no, scrollbars=yes, resizable=no, location=no, directories=no, status=no');
    }

    var tab_responsables = new Array();
    var tab_acces_responsables = new Array();
    var nb_responsables = 0;

    function initialiser_filtre_saisie() {
      setInterval("filtre_saisie()", 200);
    }

    function filtre_saisie() {
      var input_acces = document.getElementById("nb_acces");
      var nb_acces = input_acces.value.replace(/[^0-9]/g, '');
      input_acces.value = nb_acces;

      var prix_unitaire = calcul_prix_unitaire(nb_acces);
      var prix_total = calcul_prix_total(nb_acces);

      document.getElementById("div_prix_unitaire").innerHTML = prix_unitaire;
      document.getElementById("div_prix_total").innerHTML = prix_total;
    }

    function verif_sous_paiement() {
      filtre_saisie();

      var nb_acces = document.getElementById("nb_acces").value;

      if (nb_acces == 0) {
        document.getElementById("erreur_nb_acces").innerHTML = "Veuillez indiquer un <strong>nombre d'accès</strong>.";
        document.getElementById('nb_acces').focus();
      }
      else {
        document.getElementById('sous_paiement').submit();
      }
    }
  </script>

似乎我的整个代码都害怕每个人-.-

【问题讨论】:

  • 这是可重现的吗? IE。一旦你切换到print_r($_POST['nb_acces']),它就可以工作了吗?如果您的脚本中同时包含 print_rs 怎么办?
  • 您从哪里获得阵列中的密钥?你能包含更多代码吗?

标签: php html arrays post


【解决方案1】:

您的input 中缺少type="text" 属性,即使浏览器认为这是文本,这可能会给您带来一些问题;

<input type="text" id='nb_acces' name='nb_acces' .......... />

此外,您似乎要替换 任何以数字开头的内容,例如 1 为空值,这就是您得到 0 的原因:

var nb_acces = input_acces.value.replace(/\d/g, '')

【讨论】:

  • 是的,我刚刚删除它以检查它是否可以改变任何东西,但是不,它什么都没有改变。
  • 好的,我会放更多代码。我不太习惯这种替换功能。不过,它似乎在我的浏览器上运行良好。
  • 你想替换什么?我可以帮你用正则表达式
  • 我想删除任何非数字字符。因为它是客户将购买的商品数量。你现在可以看到我的整个代码了。
  • 我已经更新了我的函数的正则表达式。我没有看到 HTML 有任何问题,如果仍然无法正常工作,则问题出在后端。
【解决方案2】:

好吧,我看到有人告诉我检查 var_dump 的消息,它帮助我现在弄清楚为什么会出现这个问题。我不知道为什么这条消息已被删除,因为它对我有很大帮助。感谢发布它的人。

如果有人有同样的问题,但我知道它来自旧的并且可能是错误的服务器配置,使用 $nb_acces 和 $_POST['nb_acces'] 会产生冲突。不要使用相同的名称。就是这样-.-

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 2017-07-25
    • 2016-01-25
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    相关资源
    最近更新 更多