如何将关联数组设置为html输入值?

时间:2015-01-29 21:55:23

标签: php arrays associative-array

我刚接触php,我现在正在学习如何从sql中检索数据。 我遇到了一些问题,我无法在网上找到任何答案。

我想创建一个包含许多复选框的html表单(与我的数据库供应一样多),并且每个复选框我想分配一个包含db中所有行数据的关联数组。 例如,如果我在我的数据库列中有名字'名字','姓氏'和'年龄',则复选框值将为['名字'=>'xx','姓氏'=>'yy ',age'14'];

到目前为止,我只设法将其作为字符串传递:

value="<?php echo implode(array('key'=>$row['first name'], 'name'=>$row['last name'],'type'=>$row['age']));?>"/>

但是当我用post方法传递它时,我得到常规的String,我不能再格式化为数组..这是我的表单代码:

function deleteRow(){
global $conn;
if(!$conn){
    die("connection failed: ".mysqli_connect_error());
}else{
    $query = "SELECT * FROM salary.collage ";
    $result=mysqli_query($conn, $query);
    echo "<table border='1'>";
    echo "<form method='post' id='form_delete_rows' action='test.php'";
    while($row = mysqli_fetch_assoc($result)) {

        ?>
            <tr>      
                <td><input type="checkbox" name="key[]" value="<?php echo implode(array('key'=>$row['key'], 'name'=>$row['name'],'type'=>$row['type']));?>"/></td>
                <td><?php echo $row['key']?></td>
                <td><?php echo $row['name']?></td>
                <td><?php echo $row['type']?></td>
            </tr>


        <?php
       }
     echo"<input type='submit' name='deleteRows' value='delete selected rows'/>";
     echo "</form>";
     echo "</table>";

这是处理检索数据的函数:

   if(!empty($_POST["deleteRows"])){
        if(isset($_POST["key"])){

     var_dump($_POST["key"]);

          echo "are you sure you want to delete these records?<br/>";
          echo "<pre><table border='1'>";

            foreach ($_POST['key'] as $select=>$value) {
                echo "<tr>";
                echo "<td>{$select}</td>";
                echo "<td>{$value}</td>";
                echo "</tr>";
            }
        }echo "</table></pre>";
    }

2 个答案:

答案 0 :(得分:0)

如果数据库tabe有一个唯一的键,例如索引使用它:

name="delete[]"  value="<?php echo $row['indexname'];?>"

选中复选框并将$ row字段作为$ k =&gt; $ v int相同的td:

<input type="hidden" name="key[<?=$row['indexname'];?>][<?php echo $k;?>]" value="<?php echo $v;?>"/>

但是带有空格的索引不会起作用,在删除时你可以找到所选的索引,例如ids wg keys,无论

如果你想看到它确实为&lt;中的每个$行创建了一个小表。 TD&GT;水平或垂直

tr th $k /th td $v/td /tr 

答案 1 :(得分:0)

您没有指定&#34;胶水&#34;您正在呼叫implode()字符,所以

$foo = array('a','b',c');
echo implode($foo);

会给你

abc

只需指定一个胶水char:

echo implode($foo, '|'); 
-> a|b|c

但总的来说,不要这样做。您只是假设数组中的文本不包含分隔符。如果只是通过表单传递此文本,则应使用更好的封装方法,例如: json_encode(),它不会遭受注射攻击&#34;问题。