使用 PHP while 循环创建 HTML table 以显示数据并允许用户提交到特定行
Creating HTML table using PHP while loops to display data and allow user to submit to specific row
我目前正在动物收养机构的场景下创建一个虚拟网站,我需要在其中创建一个 HTML table 来显示所有可供收养的动物并允许用户发出收养请求,由工作人员批准。
我使用 PHP while 循环创建了此 table 并在每一行上回显了一个按钮,该按钮将发送收养请求以供工作人员批准。我的问题是这些按钮对它们的特定行不起作用,按下时会发出对所有可用动物的请求,而不是对它们指定的行。
如何让每个按钮都特定于它们所在的行?
这是我的代码:
<tr>
<th>Name</th>
<th>Type</th>
<th>DateOfBirth</th>
<th>Description</th>
<th>Photo</th>
<th>Available</th>
<th>Owner</th>
<th>Adopt</th>
<tr>
<?php
error_reporting(E_ALL ^ E_DEPRECATED);//put in place due to previous error: Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO.
$hostname="localhost"; //local server name default localhost
$username="root"; //mysql username default is root.
$password=""; //blank if no password is set for mysql.
$database="dc2410"; //database name which you created
mysql_connect($hostname, $username, $password);
mysql_select_db($database);
$sql=mysql_query("SELECT * FROM `animal` WHERE `available` = 'Yes'");
while($animal=mysql_fetch_assoc($sql)){
echo"<tr>";
$animal['animalID'];
echo "<td>".$animal['name']."</td>";
echo "<td>".$animal['type']."</td>";
echo "<td>".$animal['dateofbirth']."</td>";
echo "<td>".$animal['description']."</td>";
echo "<td>"?> <img src="<?php echo $animal['photo'] ?>" width="100px" height="100px"/> <?php "</td>";
echo "<td>".$animal['available']."</td>";
echo "<td>".$animal['owner']."</td>";
?>
<td><form><input type="submit" value="Adopt" name="adopt" onClick="
<?php
$req=mysql_query("INSERT INTO adoptionrequest(userID, animalID, approved) VALUES ('1','".$animal['animalID']."','Awaiting Approval')");
?>
" ></form></td>
<?php
echo"<tr>";
}
?>
</table>
正如 Cthulhu 提到的那样,将 PHP 代码放入您的 onClick 中不会像您认为的那样起作用。您需要做的是更改表单,使其将一个值(可能是一个隐藏的输入字段)提交回 PHP 页面,然后该页面将通过检查 $_POST 变量
来处理该值
首先阅读以下内容:
http://www.w3schools.com/htmL/html_forms.asp
不是 "when pressed sends off a request for all available animals",而是在您的循环中,您正在发送对所有可用动物的请求。
onClick 语句后跟一些 PHP 代码不会在您按下按钮时执行该代码,它会在您实际加载页面时执行它,因为 PHP 是服务器端的,所以让我建议一些进一步的学习。
也就是说,您需要做的是创建一个单独的 PHP 文件来处理提交(您可以在同一个文件中进行,但这更容易理解)并创建一个隐藏字段每个表单上的 animalID,然后在另一个文件中读取该隐藏字段并执行您的 MySQL 查询。
另请注意:MySQL class 在 PHP 中已弃用,请改用 MySQLi 或 PDO,并使用 SQL 制作一些东西注入,你的代码相当不安全。
$sub = intval($_POST['sub']);
$selected = intval($_POST['selected']);
if ($sub == 1){
mysql_query("INSERT INTO adoptionrequest(`userID`, `animalID`, `approved`) VALUES ('1','$selected','Awaiting Approval')");
if(mysql_errorno() > 0){echo mysql_error();}
}
echo '<form action="#" method="post" ><input type="hidden" name="sub" value="1"><table>';
$results = mysql_query("SELECT `animalID`, `name`,`type`,`dateofbirth`,`description`,`photo`,`available`,`owner` FROM `animal` WHERE `available` = 'Yes'");
while($animal=mysql_fetch_assoc($results, MYSQL_NUM)){
echo <<<EOT
<tr><td>$animal[0]</td>
<td>$animal[1]</td>
<td>$animal[2]</td>
<td>$animal[3]</td>
<td>$animal[4]</td>
<td><img width="100px" height="100px" src="$animal[5]" alt="$animal[1]"/></td>
<td>$animal[6]</td>
<td>.$animal[7]</td>
<td><button type="submit" name="selected" value="$animal[0]"/></td></tr>
EOT;
}
我目前正在动物收养机构的场景下创建一个虚拟网站,我需要在其中创建一个 HTML table 来显示所有可供收养的动物并允许用户发出收养请求,由工作人员批准。
我使用 PHP while 循环创建了此 table 并在每一行上回显了一个按钮,该按钮将发送收养请求以供工作人员批准。我的问题是这些按钮对它们的特定行不起作用,按下时会发出对所有可用动物的请求,而不是对它们指定的行。
如何让每个按钮都特定于它们所在的行?
这是我的代码:
<tr>
<th>Name</th>
<th>Type</th>
<th>DateOfBirth</th>
<th>Description</th>
<th>Photo</th>
<th>Available</th>
<th>Owner</th>
<th>Adopt</th>
<tr>
<?php
error_reporting(E_ALL ^ E_DEPRECATED);//put in place due to previous error: Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO.
$hostname="localhost"; //local server name default localhost
$username="root"; //mysql username default is root.
$password=""; //blank if no password is set for mysql.
$database="dc2410"; //database name which you created
mysql_connect($hostname, $username, $password);
mysql_select_db($database);
$sql=mysql_query("SELECT * FROM `animal` WHERE `available` = 'Yes'");
while($animal=mysql_fetch_assoc($sql)){
echo"<tr>";
$animal['animalID'];
echo "<td>".$animal['name']."</td>";
echo "<td>".$animal['type']."</td>";
echo "<td>".$animal['dateofbirth']."</td>";
echo "<td>".$animal['description']."</td>";
echo "<td>"?> <img src="<?php echo $animal['photo'] ?>" width="100px" height="100px"/> <?php "</td>";
echo "<td>".$animal['available']."</td>";
echo "<td>".$animal['owner']."</td>";
?>
<td><form><input type="submit" value="Adopt" name="adopt" onClick="
<?php
$req=mysql_query("INSERT INTO adoptionrequest(userID, animalID, approved) VALUES ('1','".$animal['animalID']."','Awaiting Approval')");
?>
" ></form></td>
<?php
echo"<tr>";
}
?>
</table>
正如 Cthulhu 提到的那样,将 PHP 代码放入您的 onClick 中不会像您认为的那样起作用。您需要做的是更改表单,使其将一个值(可能是一个隐藏的输入字段)提交回 PHP 页面,然后该页面将通过检查 $_POST 变量
来处理该值首先阅读以下内容: http://www.w3schools.com/htmL/html_forms.asp
不是 "when pressed sends off a request for all available animals",而是在您的循环中,您正在发送对所有可用动物的请求。 onClick 语句后跟一些 PHP 代码不会在您按下按钮时执行该代码,它会在您实际加载页面时执行它,因为 PHP 是服务器端的,所以让我建议一些进一步的学习。
也就是说,您需要做的是创建一个单独的 PHP 文件来处理提交(您可以在同一个文件中进行,但这更容易理解)并创建一个隐藏字段每个表单上的 animalID,然后在另一个文件中读取该隐藏字段并执行您的 MySQL 查询。
另请注意:MySQL class 在 PHP 中已弃用,请改用 MySQLi 或 PDO,并使用 SQL 制作一些东西注入,你的代码相当不安全。
$sub = intval($_POST['sub']);
$selected = intval($_POST['selected']);
if ($sub == 1){
mysql_query("INSERT INTO adoptionrequest(`userID`, `animalID`, `approved`) VALUES ('1','$selected','Awaiting Approval')");
if(mysql_errorno() > 0){echo mysql_error();}
}
echo '<form action="#" method="post" ><input type="hidden" name="sub" value="1"><table>';
$results = mysql_query("SELECT `animalID`, `name`,`type`,`dateofbirth`,`description`,`photo`,`available`,`owner` FROM `animal` WHERE `available` = 'Yes'");
while($animal=mysql_fetch_assoc($results, MYSQL_NUM)){
echo <<<EOT
<tr><td>$animal[0]</td>
<td>$animal[1]</td>
<td>$animal[2]</td>
<td>$animal[3]</td>
<td>$animal[4]</td>
<td><img width="100px" height="100px" src="$animal[5]" alt="$animal[1]"/></td>
<td>$animal[6]</td>
<td>.$animal[7]</td>
<td><button type="submit" name="selected" value="$animal[0]"/></td></tr>
EOT;
}