MySQL-Update-Function插入新行

时间:2017-10-01 09:59:03

标签: php mysql

我正在处理更新数据库条目的页面。应该工作,但它没有。它不是更新数据而是创建新条目。

解释:通常代码应该让我更新现有条目。这就是我使用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一起工作不是很安全。而代码并不是一种美丽,因为我想稍后进行修饰,但却遇到了上述问题。

1 个答案:

答案 0 :(得分:0)

解决了问题。首先,拉维是对的。更新无法创建新条目。并且插入了。因为我想在提交表格之后转到另一页,我滥用了行动。它不是在当前页面上使用更新代码,而是转到操作中引用的页面,并通过此页面上的插入代码添加数据。