如何在PHP中为多个提交按钮提供一个唯一的自动变量
如果我通过while循环从数据库中调用了数量不明显的记录,并且每个记录都有一个submit按钮,那么我如何让每个submit按钮专门响应其各自的迭代记录呢?我试图实现的视觉效果: 在这背后的逻辑中,每个“联系人”按钮都链接到其相邻的配置文件。因此,如果我点击“Lily”旁边的“Contact”按钮,Lily的名字会被传递到下一页。然而,到目前为止,我遇到了以下问题: 无论我按下哪个“联系人”按钮,最后一次迭代的名称都会被传递。在本例中,即使我点击了“Lily”的联系人按钮,最后一次迭代的名称“Jane”也会被传递到下一页 以下是我一直使用的代码: list.php:如何在PHP中为多个提交按钮提供一个唯一的自动变量,php,Php,如果我通过while循环从数据库中调用了数量不明显的记录,并且每个记录都有一个submit按钮,那么我如何让每个submit按钮专门响应其各自的迭代记录呢?我试图实现的视觉效果: 在这背后的逻辑中,每个“联系人”按钮都链接到其相邻的配置文件。因此,如果我点击“Lily”旁边的“Contact”按钮,Lily的名字会被传递到下一页。然而,到目前为止,我遇到了以下问题: 无论我按下哪个“联系人”按钮,最后一次迭代的名称都会被传递。在本例中,即使我点击了“Lily”的联系人按钮,最后一次迭代的名称
<?php
session_start();
require_once( "./inc/connect.inc.php");
if(!isset($_SESSION["email_login"])) {
header("location: index.php");
}
else {
}
?>
<?php
if ($searchST) {
while ($row = $searchST->fetch_assoc()) {
echo '<form action="list.php" method="POST">';
echo '<div class="z">';
echo '<div class="x">';
echo '<div class="y">';
echo '<div class="text_info">';
echo "<div id='input_titles'>C1</div><textarea readonly name='c1' id='a' rows='3' cols='54' maxlength='162' onCopy='return false' onDrag='return false' onDrop='return false' onPaste='return false' autocomplete='off'>".$row["c1"]."</textarea><br />";
echo "<div id='input_titles'>C2</div><textarea readonly name='c2' id='a' rows='3' cols='54' maxlength='162' onCopy='return false' onDrag='return false' onDrop='return false' onPaste='return false' autocomplete='off'>".$row["c2"]."</textarea><br />";
echo "<div id='input_titles'>C3</div><textarea readonly name='c3' id='a' rows='15' cols='54' maxlength='810' onCopy='return false' onDrag='return false' onDrop='return false' onPaste='return false' autocomplete='off'>".$row["c3"]."</textarea><br />";
echo "<div id='input_titles'>C4</div><textarea readonly name='c4' id='a' rows='2' cols='54' maxlength='108' onCopy='return false' onDrag='return false' onDrop='return false' onPaste='return false' autocomplete='off'>".$row["c4"]."</textarea>";
echo '</div>';
echo '<div class="visual_info">';
echo '<div class="p_pic_image">';
echo "<img src='".$row["pic"]."' id='p_pic'> ";
echo '</div>';
echo '<div class="country_and_name">';
echo "<textarea readonly name='country' id='country' rows='1' cols='14'>".$row["country"]."</textarea>";
echo " ".$row["first_name"];
echo '</div>';
echo '</div>';
echo '<form action="network.php" method="POST">';
echo '<input type="submit" name="message" id="message" value="Message">';
echo '</form>';
echo '</div>';
echo '</div>';
echo '</div>';
if (isset($_POST['message'])) {
$carry = "SELECT `first_name` FROM `users`";
$carryST = $con->query($carry);
if($carryST) {
while ($row = $carryST->fetch_assoc()) {
$_SESSION['to_name'] = $row["first_name"];
$_SESSION['to_id'] = $row["id"];
}
}
$carryST->close();
header("location: compose.php");
exit();
}
echo '</form>';
}
}
$searchST->close();
} else {
}
你的留言给。。。
$(文档).delegate(“#文本框”,“按键”,函数(e){
var keyCode=e.keyCode | | e.which;
if(keyCode==9){
e、 预防默认值();
var start=$(this).get(0).selectionStart;
var end=$(this).get(0).selectionEnd;
//将textarea值设置为:插入符号前的文本+制表符+插入符号后的文本
$(this).val($(this).val().substring(0,start)
+“\t”
+$(this.val().substring(end));
//再次将插入符号置于正确位置
$(此).get(0).selectionStart=
$(this).get(0).selectionEnd=start+1;
}
});
更新:我认为为循环中的每条记录检索不同值的一种方法是以某种方式合并:
for ($i = 0; $i < j; $i ++)
($i=0;$i
或者类似的东西。我的问题的根源是会话变量,它们随着每个循环而更新(这就是为什么最高id不断向前发送)
Update2:我没有考虑上面的方法,而是研究了另一种可能性,即在提交按钮周围的标签下插入一个隐藏的输入值,其中包含每个输出的id,然后在接收页面上,设置从那里查询的条件:
echo '<form action="network.php" method="POST">';
echo '<input type="hidden" name="id" value="'.$row['id'].'" />';
echo '<input type="submit" name="message" id="message" value="Message">';
echo '</form>';
echo';
回声';
回声';
回声';
接收页面包含:
<?php
if(isset($_POST['id']) && is_numeric($_POST['id']))
{
// run query to get first_name where the submitted record id matches
$toCD = "SELECT `first_name` FROM `users` WHERE `id` = intval($id)";
$toST = $con->query($toCD);
// make sure a row was return
if($toST->num_rows === 1)
{
$row = $toST->fetch_assoc();
echo "<div class = 'prep_stmt'>Your message to".$_row["first_name"]."...</div>";
}
else
{
// record id does not exist. Output error message
}
}
?>
您需要为每个联系人创建一个表单,以便在单击“联系人”时发送与该联系人相关的值。首先查看表单,您必须为每个人分别定义表单
同时
您可以看到,$\u SESSION['to_name']
在循环时分别赋值,并在循环结束时设置DB记录的最后一个值。这就是为什么你总是得到最后一个人的名字。是的,你是对的。但是,我不知道我会有多少人,所以我需要找到一种方法来自动为每个人分配一个变量(我对PHP不太了解,无法解决问题)。你有什么建议吗?是的,我有。你对每条记录都有唯一的ID吗?是的,每条记录都有一个唯一的ID。我在原始帖子中加入了一个小的更新。这就是我详细阐述的,但我需要一个解决方案好的朋友。在你的while循环中。您需要使用相同的action attr创建表单,因为提交表单时浏览器只考虑姓氏textfield(您使用相同的名称覆盖了textfield ny)。尝试以下操作:while(…row…..Fetch){echo';//回显用户的详细信息//提交按钮//关闭此条目的表单回显“”;}对不起,我在手机上。您可以在数据库表中使用唯一的ID,用于查找每个用户。我尝试了您的建议,但到目前为止没有任何更改。然而,我确实更了解我正在处理的事情。似乎只有最后一个用户被识别,而前一个用户则以某种方式被“取消激活”。您不必通过手机应答,但我感谢您随时准备提供帮助。
<?php
if(isset($_POST['id']) && is_numeric($_POST['id']))
{
// run query to get first_name where the submitted record id matches
$toCD = "SELECT `first_name` FROM `users` WHERE `id` = intval($id)";
$toST = $con->query($toCD);
// make sure a row was return
if($toST->num_rows === 1)
{
$row = $toST->fetch_assoc();
echo "<div class = 'prep_stmt'>Your message to".$_row["first_name"]."...</div>";
}
else
{
// record id does not exist. Output error message
}
}
?>