【问题标题】:Get value from hidden inputs从隐藏的输入中获取价值
【发布时间】:2014-03-23 10:15:58
【问题描述】:

每个产品都有这些隐藏字段。我可以使用 jquery 获取隐藏的字段。但是当我输入数据时它不会进入数据库,我总是显示 0。我认为这是因为相同的命名值。如何在不更改输入名称的情况下解决此问题!

我的数据库中还有一张用于所有产品的表。

<select id="mySelect" onchange="npup.doSelect(this);" name="catagory" type="text">
        <option value="">choice</option> 
        <option value="curtain_fabrics">Curtain Fabrics</option>
        <option value="curtain">Curtains</option>
        <option value="curtain_holder">Curtain Holders</option>
    </select>
    <div id="mySpecialElements">
          <div id="npupcurtain_fabrics" class="hidden">
           <div class="fe" >Quality: <input type="text" name="quality">  </div>
           <div class="fe" >Width:<input type="text" name="width"> </div>
           <div class="fe" >Price:<input type="text" name="price"> $/m</div>
        </div>

       <div id="npupcurtain" class="hidden">
           <div class="fe" >Quality<input type="text" name="quality"></div>
           <div class="fe" >Width:<input type="text" name="width"> </div>
           <div class="fe" >Height:<input type="text" name="height"></div>
           <div class="fe" >Price:<input type="text"  name="price" >$/set</div>
       </div>

       <div id="npupcurtain_holder" class="hidden">
           <div class="fe" >Material<input type="text" name="material"></div>
           <div class="fe" >Moldel:<input type="text" name="model"> </div>
           <div class="fe" >Price:<input type="text"  name="price" >$/piece</div>
        </div>

这里是mysql代码:

  $sql = mysql_query("INSERT INTO products (name, catagory, quality, width,  height,  price, date_add)
VALUES('$product_name','$product_category','$prosuct_quality','$produt_width','$product_height','$product_price', now())");

【问题讨论】:

  • 你究竟是如何获得这些值的??
  • 我们需要查看您尝试检索值的服务器端代码
  • 使用数组怎么样?
  • 我认为它会通过所有字段并且因为有一些命名输入它返回 0...我只需要一个解决方案
  • 您应该为不同的输入使用不同的名称。如果您有两个带有name="price" 的输入,则只有一个会被发送到服务器。在大多数浏览器中,它将是最后一个,但您不能依赖它。

标签: php mysql forms input hidden


【解决方案1】:

您可以将它们作为数组发送到服务器:

 <div id="npupcurtain_fabrics" class="hidden">
           <div class="fe" >Quality: <input type="text" name="fabrics[quality]">  </div>
           <div class="fe" >Width:<input type="text" name="fabrics[width]"> </div>
           <div class="fe" >Price:<input type="text" name="fabrics[price]"> $/m</div>
        </div>

       <div id="npupcurtain" class="hidden">
           <div class="fe" >Quality<input type="text" name="npupcurtain[quality]"></div>
           <div class="fe" >Width:<input type="text" name="npupcurtain[width]"> </div>
           <div class="fe" >Height:<input type="text" name="npupcurtain[height]"></div>
           <div class="fe" >Price:<input type="text"  name="npupcurtain[price]" >$/set</div>
       </div>

       <div id="npupcurtain_holder" class="hidden">
           <div class="fe" >Material<input type="text" name="holder[material]"></div>
           <div class="fe" >Moldel:<input type="text" name="holder[model]"> </div>
           <div class="fe" >Price:<input type="text"  name="holder[price]" >$/piece</div>
        </div>

在服务器端..say PHP 中的变量如下:

$_POST['fabrics']['quality'];
$_POST['holder']['model'];
....

【讨论】:

  • 我在该类别中至少有 10 个选项,所以我应该为每个变量做自己的 POST 提交吗?它将至少有 80 个 post 命令,例如 $_POST['fabrics']['quality']; $_POST['curtai']['质量']; $_POST['pelmet']['质量'];我想我已经制作了一个包含大量行的新数据库表!
【解决方案2】:

看到 cmets 后,我认为问题仅出在您的 SQL 上,而不是其他部分。您可能无法正确执行连接和构建查询。试试下面的代码。 (需要提一下,不建议这样拼接字符串,使用占位符?防止SQL注入)。

    $sql = mysql_query(
    "INSERT INTO products (
                      name, 
                      catagory, 
                      quality, 
                      width,  
                      height,  
                      price, 
                      date_add)
    VALUES(
          '".$product_name."'
        ,'".$product_category."'
        ,'".$prosuct_quality."'
        ,'".$produt_width."'
        ,'".$product_height."'
        ,'".$product_price."'
        , now())");

对于占位符(准备好的语句),请参阅http://www.php.net/pdo.prepared-statements

【讨论】:

  • 不,我已经为类别选择输入,它使用 jquery 返回与产品相关的其他隐藏字段。我尝试将这些显示字段中的值发送到数据库,我认为相同命名的输入是最多的问题
  • 感谢您的帮助,但它仍然不起作用...它为那些具有相同命名输入的字段发送 0?
  • 您能否使用 Web 开发人员工具(例如 FireFox 中的 firebug 控制台)检查发送的 post 请求,并查看提交的 post 请求是否正在发送 0 或表单正在发送正确的值并且在后端他们变成0?
  • 我知道为什么会这样......我总是将最后一个输入(相同的名称)发送到数据库。是否有任何解决方案来验证表单,以便检查具有相同输入名称的所有字段,并采用已输入的值??
【解决方案3】:

这可能是由于数据库中表的列的数据类型错误。例如。您正在将string 插入到仅接受integers 的数据库表中的列中,因此您将获得存储的值0

【讨论】:

    【解决方案4】:

    在你的 html 中使用 id 标签和名称标签

    示例更改

    &lt;div class="fe" &gt;Quality: &lt;input type="text" name="quality"&gt; &lt;/div&gt;

    &lt;div class="fe" &gt;Quality: &lt;input type="text" id="quality"&gt; &lt;/div&gt;

    【讨论】:

    • 好的,但这意味着什么,为什么重要?
    • 嗯,对于 POST 提交,您需要一个 name 字段,否则服务器不会在请求中找到这些...
    • @KarelG。我有名称,名称进入数据库,唯一的问题是名称相同的字段,例如 with、height 和 quality
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 2013-07-16
    • 2013-08-18
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多