我有一个非常简单的表单不起作用。我试图实现的是,当用户单击更新按钮时,他们会收到一份填写了信息的表格。当他们更改信息并单击更新时,他们会被发送回主窗体,并显示所有更改。除了更新,一切都正常。当您更改某些内容并单击"更新"时,不会有任何更改。这是更新表单代码:
<h4>Update Record</h4>
<?PHP
$con=mysqli_connect("localhost", "root", "", "customers");
//check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysql_connect_error();
}
?>
<form action="update_process.php" method="get">
Band: <input type="text" name="artist" value="<?php echo $_GET['artist'] ?>"/><br/>
Album: <input type="text" name="title" value="<?php echo $_GET['title'] ?>" /><br/>
Format: <select name="format">
<option value="Compact Disc" name="compact disc">compact disc</option>
<option value="Album" name="album">album</option>
<option value="Cassette" name="cassette">cassette</option>
<option value="MP3" name="mp3">mp3</option>
</select><br/>
Notes: <TEXTAREA NAME="notes" ROWS="3" COLS="30"><?php echo $_GET['notes'] ?>
</TEXTAREA><br/>
<input type="submit" value="Update" />
</form>
这是update_process.php文件的代码:
<?php
$artist = $_GET['artist'];
$title = $_GET['title'];
$format = $_GET['format'];
$notes = $_GET['notes'];
//create connection to DB
$con=mysqli_connect("localhost", "root", "", "customers");
//check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = "UPDATE music SET title='$title', artist='$artist', format='$format', notes='$notes'
WHERE id='$id'";
if ($con->query($sql) === TRUE) {
header('Location:index.php');
} else {
echo "Error: " . $sql . "<br>" . $con->error;
}
?>
在WHERE子句中,您说WHERE id="$id",但$id值集在哪里?我认为$id没有价值。
我看到您的代码有一些问题:
1-id $id
在哪里定义?
2-我猜id是一个整数字段,所以不需要$id
周围的'
s;
您已经混合了基于对象和基于函数的编程。你是从基于函数开始的,所以我会向你展示这一点。要查询数据库,您需要运行:
mysqli_query($con,$sql);
而不是:
$con->query($sql)
您的代码在安全方面还有一些其他问题,但如果您不在乎,请跳过我的其余回答。
在使用这些GET参数之前,您并没有检查它们是否存在。用途:
if(isset($_GET['artist'],$_GET['track'],...)) {...}
您也没有转义查询字符串,使您的网站容易受到SQL注入的攻击。用途:
$artist = mysqli_real_escape_string($con,$_GET['artist']);
祝你好运!只需阅读PHP文档,确保对整个脚本采用对象或函数方法。