当我尝试输入多个条目时,我的代码中出现问题。我尝试了不同的解决方案,但问题没有解决。唯一的问题是获得字段的价值' valor'
<? $produtocotacao = "select * from cadcotacao2 WHERE idcotacao = '$idcotacao' ORDER by id DESC";
$result = mysql_query ($produtocotacao, $marechal) or die(mysql_error());
while ($linha = mysql_fetch_array ($result)) {
$id = $linha["id"];
$idproduto = $linha["idproduto"];
$produto = $linha["produto"];
$user = $linha["user"];
?>
<form id="form6" method="post" action=""><tr>
<td align="center"><? echo $linha['idproduto']; ?></td>
<td align="center"><? echo $linha['produto']; ?></td>
<td align="left" valign="middle">
<input name="id6[]" type="hidden" value="<? echo $linha['id']; ?>" />
<input name="idcotacao[]" type="hidden" value="<? echo $idcotacao; ?>" />
<input name="idproduto[]" type="hidden" value="<? echo $linha['idproduto']; ?>" />
<input name="idfornecedor[]" type="hidden" value="<? echo "teste"; ?>" />
<input name="ip[]" type="hidden" value="<? echo $ip; ?>" />
<input name="valor[]" type="text" id="valor" placeholder="Ex: 110,50" class="m-wrap span6" />
</td>
</tr>
<?
if(isset($_POST['done2'])){
$cotacao = array();
$cotacao[] = array('id' => $linha['id'], 'idcotacao' => $idcotacao, 'idproduto' => $idproduto, 'idfornecedor' => "teste", 'ip' => $ip, 'valor' => $_POST['valor']);
foreach ($cotacao as $rst) {
$id = $rst['id'];
$idcotacao = $rst['idcotacao'];
$idproduto = $rst['idproduto'];
$idfornecedor = $rst['idfornecedor'];
$ip = $rst['ip'];
$valor = $rst['valor'];
$sql = "INSERT INTO `cadcotacao4` (`ip`, `idcotacao`, `idproduto`, `idfornecedor`, `valor`) VALUES ('{$ip}', '{$idcotacao}', '{$idproduto}', '{$idfornecedor}', '{$valor}');";
if(mysql_query($sql)){
$erro = "Cotação Respondida!";
}
}
}
} ?>
代码在mysql中记录下面这些行:
id timestamp ip idforn idprod forn valor
47 2016-08-25 15:47:45 179.209.99.217 2 6745 teste Array
48 2016-08-25 15:47:45 179.209.99.217 2 1 teste Array
答案 0 :(得分:0)
您的问题的难点在于您的代码在结构上看起来非常有缺陷。如果我误解了你想要做的事情,请原谅我。
在客户端执行任何动态HTML和/或JavaScript等之前,您似乎正在制作经典的PHP新手错误,即没有意识到页面上的所有PHP代码都已执行(在服务器上)。
所以,我倾向于在脚本的开头放置任何服务器端处理 - 提醒你它将首先完成 - 首先放置POSTed表单/结果数据处理,然后准备要显示的数据你的新页面。
其次,如果您使用多个类型输入(valor []),只有在一个表单中重复输入才真正有意义 - 那么为什么要为每一行重新声明表单?只有一个表格会被张贴。
使用一个带有重复多个输入的表单(如果您想通过一次提交更改多行)或使用单独的表单(最好用不同的名称)和简单的输入( valor)(显示多个结果,但一次只更改一个)而不是倍数(valor [])。
所以,我会重新安排你的代码:
<?php
if(isset($_POST['done2'])){
$ids=$_POST['id6'];
$idcotacaos = $_POST['idcotacao'];
$idprodutos = $_POST['idproduto'];
$idfornecedors = $_POST['idfornecedor'];
$ips = $_POST['ip'];
$valors = $_POST['valor'];
$i=0;
foreach($ids as $id)
{
$idcotacao = $idcotacaos[$i];
$idproduto = $idprodutos[$i];
$idfornecedor = $idfornecedors[$i];
$ip = $ips[$i];
$valor = $valors[$i];
$sql = "INSERT INTO `cadcotacao4` (`ip`, `idcotacao`, `idproduto`, `idfornecedor`, `valor`) VALUES ('{$ip}', '{$idcotacao}', '{$idproduto}', '{$idfornecedor}', '{$valor}');";
if(mysql_query($sql)){
$erro = "Cotação Respondida!";
}
$i++;
}
}
$produtocotacao = "select * from cadcotacao2 WHERE idcotacao = '$idcotacao' ORDER by id DESC";
$result = mysql_query ($produtocotacao, $marechal) or die(mysql_error());
?>
<form id="form6" method="post" action="">
<?php
while ($linha = mysql_fetch_array ($result)) {
$id = $linha["id"];
$idproduto = $linha["idproduto"];
$produto = $linha["produto"];
$user = $linha["user"];
?>
<tr>
<td align="center"><? echo $linha['idproduto']; ?></td>
<td align="center"><? echo $linha['produto']; ?></td>
<td align="left" valign="middle">
<input name="id6[]" type="hidden" value="<? echo $linha['id']; ?>" />
<input name="idcotacao[]" type="hidden" value="<? echo $idcotacao; ?>" />
<input name="idproduto[]" type="hidden" value="<? echo $linha['idproduto']; ?>" />
<input name="idfornecedor[]" type="hidden" value="<? echo "teste"; ?>" />
<input name="ip[]" type="hidden" value="<? echo $ip; ?>" />
<input name="valor[]" type="text" id="valor" placeholder="Ex: 110,50" class="m-wrap span6" />
<input type="submit" name="done2" value="Save Changes">
</td>
</tr>
<?php
}
?>
</form>
通过id循环并获取该循环中每个其他multiple [] POST值的元素然后使用这些元素执行sql的更改。希望这是你想要达到的目标。