我只是在自学PHP和SQL。这个问题似乎是重复的,但我无法找到解决问题的确切方法。
我有一个用于手机库存管理的SQL数据库。我已经实现了PHP脚本来在表中显示数据库内容。我必须进一步增强脚本,以便用户可以更改手机的状态,例如正在工作或不工作。为此,我创建了另一个存储此信息的SQL数据库。我可以在下拉菜单中显示详细信息,但是当我从工作中更改为不工作并选择提交按钮时,看不到任何更改在数据库和Web服务器中。
<?php
$servername="localhost";
$username="root";
$password="XXXXX";
$dbname="inventory_db";
//Connection
$conn =mysqli_connect($servername,$username,$password);
$db_handle = $conn->select_db($dbname);
//Connection check
if($conn->connect_error)
{
die("Connection failed:" .$conn->connect_error);
}
else {
echo "connection setup";
}
if($db_handle)
{
$sql="SELECT asset_no,asset_name,current_holder,location,status FROM Phone_table ";
$sql_status="SELECT idstatus,status_name FROM status_table";
?>
<!DOCTYPE html>
<HTML>
<HEAD>
<STYLE>
.asset_table
{
width: 100%;
border :1px solid black;
}
td{
text-align: left;
padding: 15px;
border: 1px solid black;
}
th{
border: 1px solid black;
}
</STYLE>
</HEAD>
<BODY>
<form method="post">
<TABLE class="asset_table">
<TR>
<TH>Asset Number</TH>
<TH>Asset Name</TH>
<TH>Asset Holder</TH>
<TH>Location</TH>
<TH>Status</TH>
</TR>
<?php
$result=$conn->query($sql);
$count=mysqli_num_rows($result);
if($result->num_rows > 0)
{
while($row=$result->fetch_assoc())
{?>
<TR>
<TD> <?php echo $row['asset_no']; ?> </TD>
<TD> <?php echo $row['asset_name']; ?></TD>
<TD> <?php echo $row['current_holder']; ?></TD>
<TD> <?php echo $row['location']; ?></TD>
<TD><select>
<?php
<!-- *****This is where I am stuck*****-->
$result_status=$conn->query($sql_status);
if($result_status->num_rows > 0)
{
while($row_status=$result_status->fetch_assoc())
{ ?>
<option value =' <?php echo $row_status['idstatus']?> '>
<?php echo $row_status['status_name'];?> </option>
<?php $row['status']=$row_status['status_name'];
}} ?></select>
</TD>
</TR>
<?php
}}?>
<input type="submit">
</form>
<?php
if($submit)
{
for($i=0;$i<$count;$i++)
{
$sql="UPDATE Phone_table SET status='$status[$i]' WHERE asset_no='$asset_no[$i]'";
$result=$conn->query($sql);
}
}
?>
</TABLE>
</BODY>
</HTML>
<?php }
ob_end_flush(); ?>
答案 0 :(得分:1)
1。给您的input
命名
<input type="submit" name="submit">
2。自动为您的select
字段添加唯一名称
<select name="your_unique_name">
3。给出一个隐藏的输入文本字段,以将asset_no
放入要显示资产编号的td内
4。检查是否单击了该输入
if(isset($_POST["submit"]))
{
for($i=0;$i<$count;$i++)
{ $status= //catch it from posted form
$asset_no= //catch it from posted form
$sql="UPDATE Phone_table SET status='$status' WHERE
asset_no='$asset_no'";
$result=$conn->query($sql);
}
}
答案 1 :(得分:1)
通常,表单创建/显示和对提交表单的操作是两个完全不相关的HTTP请求。
您必须进行一些更改才能使脚本正常工作:
1。为每个资产编号添加一个隐藏字段:
<TD>
<input type="hidden" name="asset_no[]" value="<?php echo $row['asset_no']; ?>">
<?php echo $row['asset_no']; ?>
</TD>
2。将名称属性添加到您的选择字段:
<TD><select name="asset_status[]">
3。让您的选择字段预先选择当前状态,并删除值中的空格:
<option value ='<?php echo $row_status['idstatus'] ?>' <?= $row['status'] == $row_status['idstatus'] ? ' selected' : '' ?>>
4。删除此语句,因为它什么都不做(您不写从数据库中读取的数组):
$row['status']=$row_status['status_name'];
5。将名称属性添加到您的提交字段:
<input type="submit" name="submit">
6。从超全局数组$_POST
(请参阅php.net)中读取您提交的表单:
if(isset($_POST['submit']))
{
for($i=0;$i<count($_POST['asset_no']);$i++)
{
$asset_status = mysqli_real_escape_string($conn, $_POST['asset_status'][$i]);
$asset_no = mysqli_real_escape_string($conn, $_POST['asset_no'][$i]);
$sql = "UPDATE Phone_table SET status='$asset_status' WHERE asset_no='$asset_no'";
$result = $conn->query($sql);
}
}
答案 2 :(得分:1)
现有代码的一个问题是,无法将资产状态的提交值(即使已被命名!)与数据库中的特定记录相关联。通常,update语句在platform.setDir()
子句中需要一个ID,以便相对记录的所有记录均等地更新,从而可以更新相关记录。为此,在给定HTML结构和常规方法(没有javascript和单一形式)的情况下,对表中的每一行使用隐藏的输入字段来保存记录ID似乎是有意义的。提交表单后,dir
菜单的值和ID应该是相关的-您将在下面的演示中看到。
因为存在一个具有多个记录的表单,所以where
菜单和select
输入将需要被视为数组-也就是说它们的名称应为{{1} }
也许要注意的另一件事是直接在sql中使用变量。这种做法会使您的代码容易受到sql注入的攻击,而这可能是在封闭的系统中,那里有受信任的用户等,因此您永远不知道会发生什么!
select