我为我的MySQL数据库创建了一个更新表单但由于某种原因它没有更新我的数据库。它没有错误,但没有做任何事...... 有人能告诉我我做错了吗?
*** EDIT
更新了脚本,但它仍然无效......
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/layout.css"/>
</head>
<body>
<div id="menu">
<div id="menu_wrapper">
<ul>
<li>Configuratiebeheer<img src="afb/pijltje.png" width="10"/></a>
<ul>
<li><a href="configuratiebeheer_hardware.php">Lijst hardware</a></li>
<li><a href="hardware_toevoegen.php">Hardware toevoegen</a></li>
<li><a href="hardware_verwijderen.php">Hardware verwijderen</a></li>
</ul>
</li>
</ul>
</div>
</div>
<?php
$connect=mysql_connect("localhost", "root","");
mysql_select_db("helpdesk_middenpolder", $connect);
$id=$_GET['id'];
$q="SELECT * FROM hardware WHERE hardwareID=$id";
$r=mysql_query($q);
echo "<form method='post'>";
echo "<table border='1'>";
echo "<th>merknaam</th><th>producttype</th><th>hardwaretype</th>";
while ($x=mysql_fetch_array($r)){
echo "<tr>";
echo "<td>";
echo "<input type='text' value='".$x['merknaam']."'>";
echo "</td>";
echo "<td>";
echo "<input type='text' value='".$x['producttype']."'>";
echo "</td>";
echo "<td>";
echo "<input type='text' value='".$x['hardwaretype']."'>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
?>
<?php
if(isset($_POST['updatehardware'])){
$query = "UPDATE hardware SET merknaam='".$_POST['merknaam']."', producttype='".$_POST['producttype']."', hardwaretype='".$_POST['hardwaretype']."' WHERE hardwareID=".$id."";
mysql_query($query);
}
?>
<?php
mysql_close($connect);
?>
<input type="submit" name="updatehardware" value="Hardware updaten">
</form>
</body>
</html>
提前致谢!
答案 0 :(得分:2)
试试这个。在表单中包含文本字段。
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/layout.css"/>
</head>
<body>
<div id="menu">
<div id="menu_wrapper">
<ul>
<li>Configuratiebeheer<img src="afb/pijltje.png" width="10"/></a>
<ul>
<li><a href="configuratiebeheer_hardware.php">Lijst hardware</a></li>
<li><a href="hardware_toevoegen.php">Hardware toevoegen</a></li>
<li><a href="hardware_verwijderen.php">Hardware verwijderen</a></li>
</ul>
</li>
</ul>
</div>
</div>
<?php
$connect=mysql_connect("localhost", "root","");
mysql_select_db("helpdesk_middenpolder", $connect);
$id=$_GET['id'];
$q="SELECT * FROM hardware WHERE hardwareID=$id";
$r=mysql_query($q);
echo "<form method='post'>";
echo "<table border='1'>";
echo "<th>merknaam</th><th>producttype</th><th>hardwaretype</th>";
while ($x=mysql_fetch_array($r)){
echo "<tr>";
echo "<td>";
echo "<input type='text' value='".$x['merknaam']."'>";
echo "</td>";
echo "<td>";
echo "<input type='text' value='".$x['producttype']."'>";
echo "</td>";
echo "<td>";
echo "<input type='text' value='".$x['hardwaretype']."'>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($connect);
?>
<?php
if(isset($_POST['updatehardware'])){
$query = "UPDATE hardware SET merknaam='".$_POST['merknaam']."', producttype='".$_POST['producttype']."', hardwaretype='".$_POST['hardwaretype']."' WHERE hardwareID='".$id."'";
}
mysql_query($query);
?>
<input type="submit" name="updatehardware" value="Hardware updaten">
</form>
</body>
</html>
并使用$_POST[]
获取输入字段中的值..
答案 1 :(得分:1)
您需要将查询更改为POST值:
if(isset($_POST['updatehardware'])){
$query = "UPDATE hardware SET merknaam='".$_POST['merknaam']."', producttype='".$_POST['producttype']."', hardwaretype='".$_POST['hardwaretype']."' WHERE hardwareID='".$id."'";
}
mysql_query($query);
还为yuour表单元素设置名称
<input type='text' value='".$x['merknaam']."' name="merknaam">
答案 2 :(得分:1)
您正在使用mysql_close($ connect);而不是尝试更新,请执行mysql_close($ connect);更新后。
此外,您的表单不包含“提交”按钮以外的其他字段。
您的表单输入值与之前相同,因此即使您使用这些值更新 - 您也不会看到差异。
您正在发帖但是在这里您从GET $id=$_GET['id'];
获取了ID,您需要添加&#39; id&#39;表格上的字段BTW。
在更新查询中,使用POSTed变量而不是DB中检索到的值。
所以看到差异:
<?php
$connect=mysql_connect("localhost", "root","");
mysql_select_db("helpdesk_middenpolder", $connect);
$id = $_POST['id'];
$q="SELECT * FROM hardware WHERE hardwareID = $id";
$r=mysql_query($q);
echo "<form method='post'>";
echo "<table border='1'>";
echo "<th>merknaam</th><th>producttype</th><th>hardwaretype</th>";
while ($x=mysql_fetch_array($r)){
echo "<tr>";
echo "<td>";
echo "<input type='text' value='".$x['merknaam']."'>";
echo "</td>";
echo "<td>";
echo "<input type='text' value='".$x['producttype']."'>";
echo "</td>";
echo "<td>";
echo "<input type='text' value='".$x['hardwaretype']."'>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
echo '<input type="hidden" name="id" value="' . $id . '">';
echo '<input type="submit" name="updatehardware" value="Hardware updaten">';
echo "</form>";
if(isset($_POST['updatehardware'])){
$query = "UPDATE hardware SET merknaam='".$_POST['merknaam']."', producttype='".$_POST['producttype']."', hardwaretype='".$_POST['hardwaretype']."' WHERE hardwareID='".$id."'";
}
mysql_query($query);
mysql_close($connect);
?>
另请注意,在第2个答案最佳here
中解释使用表格内的表格很困难答案 3 :(得分:1)
请记住,您需要通过单引号括起varchars和除数字类型之外的其他类型 如果硬件ID不是varchar,请执行此操作
$query = "UPDATE hardware SET merknaam='$_POST['merknaam']', producttype='$_POST['producttype']', hardwaretype='$_POST['hardwaretype']' WHERE hardwareID=$id ";
其他
$query = "UPDATE hardware SET merknaam='$_POST['merknaam']', producttype='$_POST['producttype']', hardwaretype='$_POST['hardwaretype']' WHERE hardwareID='$id' ";
答案 4 :(得分:0)
您在表单标记中没有输入元素。
将开头表格标签移到输入标签上方
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/layout.css"/>
</head>
<body>
<div id="menu">
<div id="menu_wrapper">
<ul>
<li>Configuratiebeheer<img src="afb/pijltje.png" width="10"/></a>
<ul>
<li><a href="configuratiebeheer_hardware.php">Lijst hardware</a></li>
<li><a href="hardware_toevoegen.php">Hardware toevoegen</a></li>
<li><a href="hardware_verwijderen.php">Hardware verwijderen</a></li>
</ul>
</li>
</ul>
</div>
</div>
<form method="post">
<?php
$connect=mysql_connect("localhost", "root","");
mysql_select_db("helpdesk_middenpolder", $connect);
$id=$_GET['id'];
$q="SELECT * FROM hardware WHERE hardwareID=$id";
$r=mysql_query($q);
echo "<table border='1'>";
echo "<th>merknaam</th><th>producttype</th><th>hardwaretype</th>";
while ($x=mysql_fetch_array($r)){
echo "<tr>";
echo "<td>";
echo "<input type='text' value='".$x['merknaam']."'>";
echo "</td>";
echo "<td>";
echo "<input type='text' value='".$x['producttype']."'>";
echo "</td>";
echo "<td>";
echo "<input type='text' value='".$x['hardwaretype']."'>";
echo "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($connect);
?>
<?php
if(isset($_POST['updatehardware'])){
$query = "UPDATE hardware SET merknaam='".$x['merknaam']."', producttype='".$x['producttype']."', hardwaretype='".$x['hardwaretype']."' WHERE hardwareID='".$id."'";
}
mysql_query($query);
?>
<input type="submit" name="updatehardware" value="Hardware updaten">
</form>
</body>
</html>
答案 5 :(得分:0)
您错误地包含form
。
输入元素必须包含表单元素(例如<input />
,<select />
...等)
像这样改变,
<form method="post">
<!-- while loop stuff -->
<input type="submit" name="updatehardware" value="Hardware updaten">
</form>
答案 6 :(得分:0)
将控制器与视图分开。至少,在HTML之前移动所有PHP代码。
使用输入字段的名称,这样您可以轻松区分内容。
在名称中使用方括号,提交相同的输入,但是针对不同的行/项目。
总是使用类型转换值,即整数和浮点数,它们会自动删除错误输入的问题。如果您没有使用PDO和绑定参数,请使用mysql_real_escape_string
确保用户不会破坏您的数据库。
保持GET&POST和POST不在函数中,将它们发送到代码的单独部分中的函数。
对于数据库交互,请使用PDO或MySQLi,以避免出现旧问题。
如果不解决第6个问题,我的解决方案将如下所示:
<?php
// This is your "library" of functions
function getConnection() {
$connect=mysql_connect("localhost", "root","");
mysql_select_db("helpdesk_middenpolder", $connect);
return $connect;
}
function endConnection() {
mysql_close($connect);
}
function updateProducts($products) {
$query = '';
foreach ($products as $productId => $productData) {
$query .= "UPDATE hardware SET merknaam='".mysql_real_escape_string($productData['merknaam'])."', producttype='".mysql_real_escape_string($productData['producttype'])."', hardwaretype='".mysql_real_escape_string($productData['hardwaretype'])."' WHERE hardwareID='".(int) $productId."'; ";
}
mysql_query($query);
}
function getProducts($id) {
$q = "SELECT * FROM hardware WHERE hardwareID=$id";
$r = mysql_query($q);
$products = array();
while ($x=mysql_fetch_array($r)) {
$products[] = $x;
}
return $products;
}
// This is your controller
$connect = getConnection();;
if (isset($_POST['products'])) {
updateProducts($_POST['products']);
}
$input_id = (isset($_GET['id']) ? (int) $_GET['id'] : 0);
if ($input_id > 0) {
$products = getProducts($input_id);
}
endConnection();
// This is your view
?><html>
<head>
<link rel="stylesheet" type="text/css" href="css/layout.css" />
</head>
<body>
<div id="menu">
<div id="menu_wrapper">
<ul>
<li>Configuratiebeheer<img src="afb/pijltje.png" width="10"/></a>
<ul>
<li><a href="configuratiebeheer_hardware.php">Lijst hardware</a></li>
<li><a href="hardware_toevoegen.php">Hardware toevoegen</a></li>
<li><a href="hardware_verwijderen.php">Hardware verwijderen</a></li>
</ul>
</li>
</ul>
</div>
</div>
<form method="get">
<h2>Get product by ID</h2>
<div>
<label for="productId">ID</label> <input id="productId" type="text" name="id" value="<?php echo ($input_id > 0 ? $input_id : ''); ?>" />
</div>
<input type="submit" value="Get item" />
</form>
<?php if (isset($products) && !empty($products)): ?>
<h2>Products found by ID</h2>
<form method="post">
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>merknaam</th>
<th>producttype</th>
<th>hardwaretype</th>
</tr>
</thead>
<tbody>
<?php foreach ($products as $product): ?>
<tr>
<td><?php echo $product['hardwareID']; ?></td>
<td><input type="text" name="product[<?php echo $product['hardwareID']; ?>][merknaam]" value="<?php echo $product['merknaam']; ?>" /></td>
<td><input type="text" name="product[<?php echo $product['hardwareID']; ?>][producttype]" value="<?php echo $product['producttype']; ?>" /></td>
<td><input type="text" name="product[<?php echo $product['hardwareID']; ?>][hardwaretype]" value="<?php echo $product['hardwaretype']; ?>" /></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<input type="submit" value="Hardware updaten" />
</form>
<?php endif; ?>
</body>
</html>
Haven没有对这段代码进行过测试,但它应该让你理解你应该开始走向的方式,应该做的,或者至少是道路。
尝试编写干净的代码,不要害怕使用函数和类,并始终从错误中吸取教训。
答案 7 :(得分:-1)
代码中有很多错误:
<form>
标记$x['merknaam']
查询中的UPDATE
,请使用$_POST['merknaam']
(其他字段相同);注意SQL注入。hardwareID
可能是INT
列;在UPDATE查询中包含值不需要单引号$id = $_GET['id']
附近有一个逻辑错误;以POST
方式发布表单将失去$id
; SQL注入再次。在表单标记<input type="hidden" name="id" value="<?php echo $id; ?>" />
mysql_*
库;请改用PDO / MySQLi。<title>
标记在哪里?以及整个<head>
!border='1'
已弃用;使用CSS代替mysql_query()
mysql_close()
后ini_set('display_errors', '1');
会导致错误mysql_connect()
name
<th>
提交按钮,但没关系。<tr>
未被{{1}} 解决这些问题。