Php 如何将关联数组设置为html输入值?
我是php新手,现在正在学习如何从sql检索数据。 我遇到了一些问题,我在网上找不到任何答案 我希望创建一个html表单,其中包含数据库提供的许多复选框,并且我希望为每个复选框分配一个关联数组,该数组包含数据库中的所有行数据。 例如,如果我的db列中有名称“first name”、“last name”和“age”,则复选框值将为[“first name”=>“xx”,“last name”=>“yy”,age'14'] 到目前为止,我只能将其作为字符串传递,如下所示:Php 如何将关联数组设置为html输入值?,php,arrays,associative-array,Php,Arrays,Associative Array,我是php新手,现在正在学习如何从sql检索数据。 我遇到了一些问题,我在网上找不到任何答案 我希望创建一个html表单,其中包含数据库提供的许多复选框,并且我希望为每个复选框分配一个关联数组,该数组包含数据库中的所有行数据。 例如,如果我的db列中有名称“first name”、“last name”和“age”,则复选框值将为[“first name”=>“xx”,“last name”=>“yy”,age'14'] 到目前为止,我只能将其作为字符串传递,如下所示: value="<?
value="<?php echo implode(array('key'=>$row['first name'], 'name'=>$row['last name'],'type'=>$row['age']));?>"/>
但当我用post方法传递它时,我会得到一个常规字符串,我无法再次格式化为数组。。这是我的表格代码:
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>";
}
如果数据库tabe有一个唯一的键,例如索引,请像以下那样使用它:
<input type="hidden" name="key[<?=$row['indexname'];?>][<?php echo $k;?>]" value="<?php echo $v;?>"/>
您在调用implode时从未指定粘合字符,所以
abc
我会给你
echo implode($foo, '|');
-> a|b|c
只需指定一个粘合字符:
但总的来说,不要这样做。您只是假设数组中的文本不包含分隔符。如果此文本只是通过表单传递,则应使用更好的封装方法,例如json_encode,它不会遭受注入攻击问题。字符串值是什么样的?为什么你不能将其改革成一个阵列呢?为什么你不能将其改革成一个阵列?删除一行,只需发送该行的唯一id。这就是印刷品看起来的样子:阵列[0]=>阵列[0]看起来是这样的样子:阵列[0]阵列[0]看起来看起来像是这样的:阵列[0]阵列[0]10月19日日(14)9月19日日日(14月14日))9月19日(14日)9月19日日(14日)甲甲甲甲基基基基基基基基(14月14月14日(14日)甲甲甲甲甲14日(14月14月14月14日(14月14日)14日(14月14日)基基自自自自2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009 2009年9月14月14日日日日日日日日日日日日日日日日日日日日日日日日日日日(2)=>3,每个值0,1,2都包含我发送的所有数据,但是作为一个没有键和空格的字符串,所以它是一个大的数据块。你的方法是错误的。为什么要将此数据从表单发送到删除代码?仅用于显示目的?只需使用要显示的键再次查询数据库,或者将此数据放入会话中,然后在下一页将其取出。
$foo = array('a','b',c');
echo implode($foo);
abc
echo implode($foo, '|');
-> a|b|c