我正在处理更新数据库条目的页面。应该工作,但它没有。它不是更新数据而是创建新条目。
解释:通常代码应该让我更新现有条目。这就是我使用WHERE c.id =' $ ceid'的原因。但即使我使用ID 15更新条目,我也会有一个ID为16的新条目。
UPDATE customer AS c SET c.company='$company',
c.contractnumber='$contractnumber',
c.delivery='$delivery',
c.quit='$quit',
c.unsubscription='$quitdate',
c.alert='$alert'
WHERE c.id='$ceid'
所以MySQL查询到目前为止是正确的。
因此问题必须在查询之前或之后的其他地方。最有可能它发生在查询之前,因为我曾经说过if(!emtpy ...) - 部分。但它是什么?
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<script type="text/javascript" charset="utf-8" src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<?
$link = mysqli_connect("server", "user", "pw", "db");
?>
<body>
<h1>Kundenansicht</h1>
<p>Kundennummer <?php echo $_GET["id"]; ?></p>
<p><?php echo $_GET["name"]; echo " "; echo $_GET["surname"]; ?></p>
<p>Vertrag <?php echo $_GET["cid"]; ?></p>
<?
$uid = $_GET["id"];
echo $uid;
echo "<br>";
$name = $_GET["name"];
$surname = $_GET["surname"];
$cid = $_GET["cid"];
echo "CID: ";
echo $cid;
echo "<br>";
if ($link->connect_error) {
die("Connection failed: " . $link->connect_error);
}
mysqli_set_charset($link,"utf8");
$sql = "SELECT * FROM customer WHERE id ='".$cid."' AND custnumber = '".$uid."'";
$result = mysqli_query($link,$sql) or die (mysqli_error());
$row = mysqli_fetch_assoc($result);
?>
<div id="AddContract" class="w3-container">
<form action="customerview.php?id=<? echo $uid ?>&name=<? echo $name ?>&surname=<? echo $surname ?>" method="post">
<label>ID</label> <!-- e.g. PluSStrom-->
<input class="w3-input w3-border" type="number" name="id" id="id" value="<? echo $row["id"]; ?>">
<label>Anbieter</label> <!-- e.g. PluSStrom-->
<input class="w3-input w3-border" type="text" name="company" id="company" value="<? echo $row["company"]; ?>">
<label>Vertragsnummer</label> <!-- Vertragsnummer-->
<input class="w3-input w3-border" type="number" name="contractnumber" id="contractnumber" value="<? echo $row["contractnumber"]; ?>">
<label>Lieferdatum</label> <!-- Kündigungsfrist in Wochen-->
<input class="w3-input w3-border" type="date" name="deliverydate" id="deliverydate" value="<? echo $row["delivery"]; ?>">
<label>Kündigungsfrist (Wochen)</label> <!-- Kündigungsfrist in Wochen-->
<input class="w3-input w3-border" type="number" name="quit" id="quit" value="<? echo $row["quit"]; ?>">
<label>Kündigungsdatum</label>
<input class="w3-input w3-border" type="date" name="qdate" id="qdate" value="<? echo $row["unsubscription"]; ?>">
<input type="submit" class='w3-btn w3-black' name="submit" value="Eintragen">
</form>
<?
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Escape user inputs for security
$ceid = mysqli_real_escape_string($link, $_POST['id']);
$company = mysqli_real_escape_string($link, $_POST['company']);
$contractnumber = mysqli_real_escape_string($link, $_POST['contractnumber']);
$customernumber = $uid;
$quit = mysqli_real_escape_string($link, $_POST['quit']);
$quitdate = mysqli_real_escape_string($link, $_POST['qdate']);
$delivery = mysqli_real_escape_string($link, $_POST['deliverydate']);
$qd = $quit * 7;
$alert = mysqli_real_escape_string($link, date('Y-m-d', strtotime($quitdate. " - $qd days")));
if(isset($_POST['submit']))
{
if(!empty($customernumber) || !empty($contractnumber) ){
$sql_upd = "UPDATE customer AS c SET c.company='$company',
c.contractnumber='$contractnumber',
c.delivery='$delivery',
c.quit='$quit',
c.unsubscription='$quitdate',
c.alert='$alert'
WHERE c.id='$ceid'";
if (mysqli_query($link, $sql_upd)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($link);
}
} else {
echo "ERROR: Nicht gespeichert. Kundennummer oder Vertragsnummer fehlen!";
}
}
// close connection
mysqli_close($link);
?>
</body>
</html>
顺便说一下:我知道和get一起工作不是很安全。而代码并不是一种美丽,因为我想稍后进行修饰,但却遇到了上述问题。
答案 0 :(得分:0)
解决了问题。首先,拉维是对的。更新无法创建新条目。并且插入了。因为我想在提交表格之后转到另一页,我滥用了行动。它不是在当前页面上使用更新代码,而是转到操作中引用的页面,并通过此页面上的插入代码添加数据。