动态 jQuery PHP 表单不会将 POST 数据发送到 PHP var
Posted
技术标签:
【中文标题】动态 jQuery PHP 表单不会将 POST 数据发送到 PHP var【英文标题】:Dynamic jQuery PHP form doesn't send POST data to PHP var 【发布时间】:2020-09-09 23:13:57 【问题描述】:自从上次来这里已经过去了很多时间。
希望您一切都好,并提前感谢您的帮助。
所以我正在做一个简单的更新、删除、添加修改 mysql 数据库的 php 页面。
在这个“管理”页面中,我创建了一个长表格,并在其中放置了一个表格,显示从数据库中提取的实际结果(您可以在其中修改或删除单个声音),然后是另一个表格,允许您在其中添加新元素分贝。
我想为第二个表格创建一个动态表单,以使其更加优雅,因此我为此添加了 jQuery 代码。
我发现但无法解决的两个问题是:(1) 在表单/表格单元格的一列中,我使用了两个“收音机”输入以指示产品的可用性,但是,如果我创建一个名为“availableNew []”的元素数组,所有单选元素都具有相同的名称,因此,当我将新行添加到表单时,单选语音选择在不同行从一个输入切换到另一个输入,因为当您使用多个具有相同名称的无线电输入时会发生这种情况(所有无线电输入都被视为备选方案,而不是位于不同行的不同输入“是/否”) - 很抱歉解释问题的方式很糟糕,但我找不到更清晰的方法来解释它;(2) 用于添加/删除的 jQuery 代码新行效果很好,但是当我“提交”表单时 - 使用 POST_[ ] 命令 - 页面仅发送那些未使用脚本添加的输入(另一方面,我收到来自表单第一行的数据) .
为了更清楚:我已将表/表单的第一行创建为 php 回显表/表单,因此仅从第二行添加元素我使用 jQuery 脚本。 比,当我向 PHP 发送/发布数据时,我只收到数组的第一个值(对应于表/表单的第一行),而不接收其他值(对应于 jQuery 添加的行)。
以下是我正在使用的部分代码:
第一部分(Jquery 代码)
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script>
$(document).ready(function()
$("#add-row").click(function()
var dataNew = $("#dataNew").val();
var data = $("#data").val();
var counter = $("#countN").val();
counter++;
var markup = "<tr><td class='count'>" + counter + "<input type='hidden' id='countN' name='numN[]' value='" + counter + "'></td><td class='data'>" + dataNew + "<input type='hidden' id='data' name='todayN[]' value=" + data + "></td><td class='prod'><input type='text' id='prod' name='prodN[]' placeholder='Nuovo prodotto'></td><td class='var'><input type='text' id='var' name='varN[]' placeholder='Varietà'></td><td class='img'><input type='text' id='img' name='imgN[]' placeholder='Inserisci url della foto'></td><td class='available'><label class='choice' for='avaYnew'><input type='radio' id='avaYnew' name='availableN[]' value='yes' > Sì</label><label class='choice' for='avaNnew'><input type='radio' id='avaNnew' name='availableN[]' value='no' > No</label></td><td class='rows'><input type='button' class='delete-row' id='delete-row' value='Rimuovi'></td></tr>";
alert(markup);
$("#addProds").append(markup);
);
$("#delete-row").live('click', function(event)
$(this).parent().parent().remove();
);
);
</script>
第二部分(PHP 回显表单/表格代码)
<?php
echo "<div>";
echo "<form action=" . htmlspecialchars($_SERVER['PHP_SELF']) . " method='POST'>";
//MOSTRA I RISULTATI
$sqlMag = "SELECT * FROM elencoprodotti WHERE DATA = (SELECT MAX(DATA) FROM elencoprodotti) ORDER BY DATA DESC, PRODOTTO ASC";
$resultMag = $conn->query($sqlMag);
$count = 0;
if (!empty($resultMag) && $resultMag->num_rows > 0)
echo "<br>Prodotti presenti nel database (ultimo aggiornamento al " . date("d.m.Y", strtotime($rowTit[0]))."):</div>";
echo "<table>";
echo "<thead><tr>";
echo "<th>DB-ID</th>";
echo "<th>N.</th>";
echo "<th>Data</th>";
echo "<th>Prodotto</th>";
echo "<th>Varietà</th>";
echo "<th>Foto</th>";
echo "<th>Disponibilità</th>";
echo "<th>Cancella</th>";
echo "</tr></thead>";
// output data of each row
while($rowMag = $resultMag->fetch_assoc())
$count++;
$AvailYes = $AvailNo = '';
if ((($rowMag["AVAILABLE"])) == "yes")
$AvailYes = "checked";
$AvailNo = "";
else if ((($rowMag["AVAILABLE"])) == "no")
$AvailYes = "";
$AvailNo = "checked";
echo "<tr>
<td class='id'>" . stripslashes($rowMag["ID"]) . "<input type='hidden' id='id' name='id-" . stripslashes($count) . "' value=" . stripslashes($rowMag["ID"]) . "></td>
<td class='count'>" . stripslashes($count) . "<input type='hidden' id='count' name='num-" . stripslashes($count) . "' value=" . stripslashes($count) . "></td>
<td class='data'>" . date("d-m-Y", strtotime(stripslashes($rowMag["DATA"]))) . "<input type='hidden' id='data' name='today-" . stripslashes($count) . "' value=" . $data . "></td>
<td class='prod'><input type='text' id='prod' name='prod-" . stripslashes($count) . "' value=" . stripslashes($rowMag["PRODOTTO"]) . "></td>
<td class='var'><input type='text' id='var' name='var-" . stripslashes($count) . "' value=" . stripslashes($rowMag["VARIETA"]) . "></td>
<td class='img'><a id='single_image' href=" . stripslashes(base64_decode($rowMag['FOTO'])) . " title=".stripslashes($rowMag["PRODOTTO"])." ".stripslashes($rowMag["VARIETA"]).">
<img id='imageprod' PRODOTTO"])." ".stripslashes($rowMag["VARIETA"])." src=" .stripslashes(base64_decode($rowMag['FOTO'])). "></a>
<br><input type='hidden' id='img' name='img-" . stripslashes($count) . "' value=" . stripslashes(base64_decode($rowMag['FOTO'])) . "></td>
<td class='available'>
<label class='choice' for='avaY'><input type='radio' id='avaY' name='available-" . stripslashes($count) . "' value='yes' $AvailYes> Sì</label>
<label class='choice' for='avaN'><input type='radio' id='avaN' name='available-" . stripslashes($count) . "' value='no' $AvailNo> No</label>
</td>
<td class='delete'>
<label class='choice' for='del'><input type='checkbox' id='del' name='del-" . stripslashes($count) . "' value='canc'> rimuovi</label></td>
</tr>";
echo "</table>";
echo "<input type='hidden' id='count' name='maxrows' value=" . stripslashes($count) . ">";
echo "<br>";
$insN = 1;
echo "<input type='hidden' id='insN' name='insN' value=" . stripslashes($insN) . ">";
//$insN++;
echo "<div>";
echo "<br>Inserisci nuovi prodotti nel database:</div>";
echo "<table id='addProds'>";
echo "<thead><tr>";
echo "<th>N.</th><th>Data</th><th>Prodotto</th><th>Varietà</th><th>Foto</th><th>Disponibilità</th><th>+/-</th>";
echo "</tr></thead>";
echo "<tr>";
echo "<td class='count'>" . stripslashes($insN) . "<input type='hidden' id='count' name='numN[]' value=" . stripslashes($insN) . "></td>
<td class='data'>" . date("d-m-Y", strtotime(stripslashes($data))) . "<input type='hidden' id='data' name='todayN[]' value=" . $data . "><input type='hidden' id='dataNew' name='todayNew[]' value=" . date("d-m-Y", strtotime(stripslashes($data))) . "></td>
<td class='prod'><input type='text' id='prod' name='prodN[]' placeholder='Nuovo prodotto' value=''></td>
<td class='var'><input type='text' id='var' name='varN[]' placeholder='Varietà' value=''></td>
<td class='img'><input type='text' id='img' name='imgN[]' placeholder='Inserisci url della foto' value=''></td>
<td class='available'>
<label class='choice' for='avaYnew'><input type='radio' id='avaYnew' name='availableN[]' value='yes' > Sì</label>
<label class='choice' for='avaNnew'><input type='radio' id='avaNnew' name='availableN[]' value='no' > No</label>
</td>
<td class='rows'><input type='button' class='add-row' id='add-row' value='Aggiungi riga'></td>
</tr>
</table>";
echo "<input type='hidden' id='countN' name='insN' value=" . stripslashes($insN) . ">";
//echo "<input type='hidden' id='countTotN' name='maxNewrows' value=" . stripslashes($insN) . ">";
echo "<br><div class='button-section'><input type='submit' class='mod' name='Sign Up' value='Modifica' /></div>";
echo "</form>";
else
echo "<p>Nessun risultato presente nel database - <a href='...viewdbadmin.php'>aggiorna la pagina</a>.</p></div>";
echo "</form>";
mysqli_close($conn);
echo "</div>";
?>
第三部分(PHP接收数据并循环抛出数组插入数据库)
<?php
//da qui INSERT DATA
if (!empty($_POST["prodN"]))
echo "<br>*************************** QUINDI prodN[] NON E' EMPTY **************************************<br>";
// FAI UN LOOP TRA TUTTE LE RIGHE NEW
$numR = $_POST['numN'];
var_dump($numR);
echo "<br>";
//echo "<br>*************************** numR = $numR **************************************<br>";
$dataR = $_POST['todayN'];
var_dump($dataR);
echo "<br>";
//echo "<br>*************************** todayN = $dataR **************************************<br>";
$prodR = $_POST['prodN'];
var_dump($prodR);
echo "<br>";
//echo "<br>*************************** prodR = $prodR **************************************<br>";
$varR = $_POST['varN'];
var_dump($varR);
echo "<br>";
//echo "<br>*************************** varR = $varR **************************************<br>";
$imgR = $_POST['imgN'];
var_dump($imgR);
echo "<br>";
//echo "<br>*************************** imgR = $imgR **************************************<br>";
$availableR = ($_POST['availableN']);
var_dump($availableR);
echo "<br>";
echo "<br>*************************** availableR = $availableR **************************************<br>";
for ($r=0; $r<count($prodR); $r++)
if ($numR[$r] != "" && $dataR[$r] != "" && $prodR[$r] != "" && $varR[$r] != "" && $imgR[$r] != "" && $availableR[$r] != "")
//insert function
require_once('datainsert.php');
insertProds($conn, $numR[$r], $dataR[$r], $prodR[$r], $varR[$r], $imgR[$r], $availableR[$r]);
//END
?>
我完全确定这不是我编写的优雅代码,但非常适合我需要的目的,所以请善待,因为我不是专业程序员,我这样做是一种挑战给我父母。
提前感谢您的时间和帮助。
更新1
在等待答案时,我尝试了两种可能的不同解决方案。
第一个是简单地移动页面底部的所有代码(我的想法是“也许我是位置问题”,但你猜怎么着?没有任何区别。
第二个是尝试另一个涉及 jQuery 和 Ajax POST 方法的代码,所以我使用了这个代码:
<script>
$(document).ready(function()
var i = 1;
$("#add-row").click(function()
i++;
var dataNew = $("#dataNew").val();
var data = $("#data").val();
//var counter = $("#countN").val();
//alert("counter è:"+counter);
//counter++;
var markup = '<tr id="row' + i + '"><td class="count">' + i + '<input type="hidden" id="countN" name="numN[]" value=' + i + '></td><td class="data">' + dataNew + '<input type="hidden" id="data" name="todayN[]" value=' + data + '></td><td class="prod"><input type="text" id="prod" name="prodN[]" placeholder="Nuovo prodotto"></td><td class="var"><input type="text" id="var" name="varN[]" placeholder="Varietà"></td><td class="img"><input type="text" id="img" name="imgN[]" placeholder="Inserisci url della foto"></td><td class="available"><label class="choice" for="avaYnew"><input type="radio" id="avaYnew" name="availableN[]" value="yes" > Sì</label><label class="choice" for="avaNnew"><input type="radio" id="avaNnew" name="availableN[]" value="no" > No</label></td><td class="rows"><input type="button" name="delete-row" class="delete-row" id='+ i +' value="Rimuovi"></td></tr>';
alert(markup);
$("#addProds").append(markup);
//$("#countTotN").val(counter);
//var countTotN = $("#countTotN").val();
//$("#countN").val(counter);
);
$(document).on("click", ".delete-row", function()
var button_id = $(this).attr("id");
altert(button_id);
$('#row' + button_id + '').remove();
);
$('#submit').click(function()
$.ajax(
url:"viewdbadmin.php']",
method:"POST",
data:$('#items').serialize(),
success:function(data)
alert(data);
$('#items')[0].reset();
);
);
);
</script>
因此,PHP 一直运行良好,但 jQuery 附加数据一直被排除在包含发送到 PHP 的数据的数组之外。 事实上,我一直只收到我在表单中为新产品插入的第一个数据(表格第一行的数据),但任何附加的数据。
再次感谢,我希望有人能出现,因为我一周以来一直在测试这部分代码,但我无法找到解决方案。
抱歉,我添加了一个答案,以询问我如何才能更有用地获得您的帮助。 我怎样才能? 谢谢。
【问题讨论】:
【参考方案1】:解决方案
不知道为什么,但它不起作用,因为里面有这一行就在桌子之前:
echo "<br>Prodotti presenti nel database (ultimo aggiornamento al " . date("d.m.Y", strtotime($rowTit[0]))."):</div>";
这部分表格用于显示用于更新的最后日期。 将这一行移到外面解决了这个问题。
所以现在的代码是(我希望它可以帮助其他人):
$sqlTit = "SELECT DATA FROM elencoprodotti WHERE DATA = (SELECT MAX(DATA) FROM elencoprodotti) ORDER BY DATA DESC LIMIT 1";
$resultTit = $conn->query($sqlTit);
if (!$resultTit)
echo 'Could not run query: ' . mysqli_error($conn);
exit;
$rowTit = mysqli_fetch_row($resultTit);
$lastUpd = date("d.m.Y", strtotime($rowTit[0]));
echo "<div>";
if (empty($lastUpd))
echo "<br>Ultimo aggiornamento prodotti:<font color='red'> non disponibile</font></div>";
else
echo "<br>Prodotti presenti nel database (ultimo aggiornamento al " . $lastUpd ."):</div>";
echo "<form action=" . htmlspecialchars($_SERVER['PHP_SELF']) . " method='POST'>";
//MOSTRA I RISULTATI
$sqlMag = "SELECT * FROM elencoprodotti WHERE DATA = (SELECT MAX(DATA) FROM elencoprodotti) ORDER BY DATA DESC, PRODOTTO ASC";
$resultMag = $conn->query($sqlMag);
$count = 0;
if (!empty($resultMag) && $resultMag->num_rows > 0)
echo "<table>";
【讨论】:
在代码中使用die(mysqli_error($conn));
是一个非常糟糕的主意,因为它可能会泄露敏感信息。更多解释见这篇文章:mysqli or die, does it have to die?以上是关于动态 jQuery PHP 表单不会将 POST 数据发送到 PHP var的主要内容,如果未能解决你的问题,请参考以下文章
将多个动态表单存储到对象中并使用jquery post方法发布和上传