2

我有一个学术参考数据库,它是所有用户都能看到的公共银行的一部分。我想让用户选择他们想要添加到他们自己的列表并在单独的页面上输出的引用之一。

我的目标是使用一个唯一的参考 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,无论在参考列表上单击哪个按钮。解决这个问题的最佳方法是什么?

4

1 回答 1

0

欢迎来到 StackOverflow!

如评论中所述,您应该使用 mysqli 而不是 mysql,因为不推荐使用 mysql。

这是对表单的重写,它允许您发布对 saveref.php 的引用数组。我做了很多改进,包括在您的 HTML 属性上添加双引号(W3 建议),将 thead 和 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);
}
于 2012-12-02T19:49:58.590 回答