我有一个学术参考数据库,这是一个共同银行的一部分,所有用户都能看到。我想让用户选择他们想要添加到自己的列表中的引用,并在单独的页面上输出。
我的目标是使用唯一的引用ID,然后将其链接到单独的用户表,当他们转到他们的个人页面时,它会输出他们选择的引用。
到目前为止,我尝试做的是在已经输出的所有引用旁边有一个按钮,该按钮链接到一个表单,然后该表单将用户带到一个新页面,该页面执行INSERT INTO语句,以将引用ID与其学生ID一起添加为组合键。
我所拥有的如下所示(为了简化,删除了一些字段):
$query = mysql_query("SELECT * FROM references")or die(mysql_error());
echo "<table>";
echo "<tr>";
echo "<td>Reference ID</td>";
echo "<td>Author</td>";
echo "<td>Save</td>";
echo "</tr>";
while($refer = mysql_fetch_array( $query ))
{
echo "<tr>";
echo "<td><form name='addreference' method='post' action='saveref.php'><input type='text' name='referenceid' readonly='readonly' id='refid' value='".$refer['refid'] . "'/></td> ";
echo "<td>".$refer['author'] . "</td> ";
echo "<td><center><input type='submit' name='addref' value='Add'></center></td>"; 这个屏幕上输出的引用ID是正确的,但是当我在saveref.php上执行var_dump($_POST)时,发布的引用ID始终是数组中最后一个的引用ID,而不管引用列表上的哪个按钮被点击。实现这一目标的最佳方式是什么?
发布于 2012-12-03 03:49:59
欢迎使用StackOverflow!
正如注释中所指出的,您应该使用mysqli而不是mysql,因为mysql已被弃用。
这是对表单的重写,允许您发布对saveref.php的引用数组。我做了很多改进,包括在HTML属性上加上双引号( W3推荐),在表格中添加了a和tbody,并在底部只有一个按钮的复选框中添加了引用。
<form name="addreference" method="post" action="saveref.php">
<table>
<thead>
<tr>
<th>Reference ID</th>
<th>Author</th>
<th>Save</th>
</tr>
</thead>
<tbody>
<?php
$sql = "SELECT * FROM references";
$results = mysql_query($sql)
or die(mysql_error());
while ($refer = mysql_fetch_array($results)) {
echo <<<HTML
<tr>
<td>{$refer['refid']}</td>
<td>{$refer['author']}</td>
<td><input type="checkbox" name="references[]" value="{$refer['refid']}"/></td>
</tr>
HTML;
}
?>
<button type="submit" name="addref">Add Selected</button>
</form>然后,您的saveref.php文件将如下所示:
<?php
$student_id = 1; // This value would get set elsewhere, I presume?
$references = !empty($_POST['references']) ? (array) $_POST['references'] : array();
$cnt = count($references);
if ($cnt) {
for ($i = 0; $i < $cnt; $i++) {
$references[$i] = "(" . ((int) $student_id) . ", " . ((int) $references[$i]) . ")";
}
$sql = "INSERT INTO references (student_id, reference_id) VALUES ";
$sql .= implode(", ", $references);
mysql_query($sql);
}https://stackoverflow.com/questions/13673016
复制相似问题