【问题标题】:PHP - process data from multiple inputPHP - 处理来自多个输入的数据
【发布时间】:2014-08-19 07:08:59
【问题描述】:

大家好,我正在使用这个脚本来制作动态网络表单(如果需要,添加新的输入)。

<form method="post" action="">
 <table class="dd" width="100%" id="data">
  <tr>
    <td>Vin</td>
    <td width="99%"><input name="vin1" id="vin1" type="text" /></td>
    </tr>
</table>
<input name="sub" type="submit"  value="Submit values"/>
<input type="button" id="addnew" name="addnew" value="Add new item" /> 
<input type="hidden" id="items" name="items" value="1" />
</form> 
<?php var_dump ($_POST); ?>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type='text/javascript'>
//<![CDATA[
 $(document).ready(function() {
  var currentItem = 1;
  $('#addnew').click(function(){
   currentItem++;
   $('#items').val(currentItem);
var strToAdd = '<tr><td>Vin</td><td width="17%"><input name="vin'+currentItem+'" id="vin'+currentItem+'" type="text" /></td></tr>';
   $('#data').append(strToAdd);

  });
 });

//]]>
</script>

它运行良好,并且还用数字命名每个输入,所以在我的例子中它是:vin1、vin2、vin3... 问题是我不确定如何告诉 PHP 处理这些数据。因为我正在使用类似的东西:

 public function fetchByVinEvidence() {
     $success = false;
     try{
        $con = new PDO( DB_HOST, DB_USER, DB_PASS ); 
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "SELECT * FROM evidence_calculations WHERE vin = :vin LIMIT 5";
        $stmt = $con->prepare( $sql );
        $stmt->bindValue( "vin", $this->vin, PDO::PARAM_STR );
        $stmt->execute();
            while ($row = $stmt->fetch()){
                echo "<tr>";
                echo "<td>#4</td>";
                echo "<td>".$row['street']."</td>";
                echo "<td>".$row['city']."</td>";
                echo "<td>".$row['claim_number']."</td>";
                echo "<td>".$row['country']."</td>";
                echo "<td><a href =\"javascript:void(0)\" onclick = \"document.getElementById('light').style.display='block';document.getElementById('fade').style.display='block'\">detail</a></td>";
                echo "</tr>";
            }
            }catch(PDOExeption $e){
            echo $e->getMessage();
            echo $con->errorInfo();
            }

         return $success; 
     }

对于单个输入,但我如何为多个输入编辑它,我是 PHP OOP 的新手,所以我真的不知道如何进行正确的循环,如何限制一切以不让用户将数以百万计的东西发送到数据库一次等等。你们能帮我编辑一下我的 PHP 脚本,以便能够处理来自多种表单的数据吗?

谢谢!

【问题讨论】:

标签: javascript php jquery sql


【解决方案1】:

而不是对输入名称进行编号,只需将[] 附加到vin 的末尾,当提交时,php 将自动获取具有该名称的所有输入并将每个值加载到数组中

HTML 示例

<input name="vin[]" type="text" />
<input name="vin[]" type="text" />
<input name="vin[]" type="text" />
<input name="vin[]" type="text" />

PHP

public $vin = array();
public function __construct( $data = array() ) {
     if( isset( $data['vin'] ) ) {
          foreach($data['vin'] as $index=>$vin){
                $this->vin[$index] = stripslashes( strip_tags( $vin ) );     
          }
     }
}
//..
$whereQuery = array();
foreach($this->vin as $index=>$vin){
   $whereQuery[] = "vin= :vin".$index;
}
$sql = "SELECT * FROM evidence_calculations WHERE ".implode(" OR ",$whereQuery)." LIMIT 5";
//...
foreach(array_keys($this->vin) as $index){
   $stmt->bindValue( "vin".$index, $this->vin[$index], PDO::PARAM_STR );
}

【讨论】:

  • 如果它的每个部分都存在于数据库中并为每个部分显示不同的结果,我如何检查完整的数组?
  • @MartinFerko,已编辑,类似的东西应该可以工作
  • 因为我可以做一些类似 $vinArray[1], $vinArray[2] 但我不知道用户使用了多少输入
  • 可以通过count()获取数组的长度:$numInputs = count($vinArray)
  • 我在上课开始时正在使用类似的东西,你能检查一下你的代码以帮助它为我工作吗? public $vin = null; public function __construct( $data = array() ) { if( isset( $data['vin'] ) ) $this-&gt;vin = stripslashes( strip_tags( $data['vin'] ) ); } public function storeFormValues( $params ) { $this-&gt;__construct( $params ); }pastebin.com/J7xQNyDt
猜你喜欢
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 2012-07-02
相关资源
最近更新 更多