PHP中的更新表错误

PHP中的更新表错误,php,html,mysql,pdo,Php,Html,Mysql,Pdo,我正在一个网站上工作,并制作了一个表格,您可以在其中添加车辆。现在我创建了一个表单,您应该可以在其中编辑它们,但当我按下edit vehicle时,它会显示我的默认错误消息 这是一个很好的例子 现在我需要你的帮助。我不知道问题出在哪里,但我认为这与更新查询有关 $showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll $pdo = new PDO('mysql:host=loc

我正在一个网站上工作,并制作了一个表格,您可以在其中添加车辆。现在我创建了一个表单,您应该可以在其中编辑它们,但当我按下edit vehicle时,它会显示我的默认错误消息

这是一个很好的例子

现在我需要你的帮助。我不知道问题出在哪里,但我认为这与更新查询有关

 $showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll
    $pdo = new PDO('mysql:host=localhost;dbname=', '', '');

    if(isset($_GET['bearbeiten'])) {
        $error = false;
        $EKNR = $_POST['EKNR'];
        $EKDatum = $_POST['EK-Datum'];
        $RGNummer = $_POST['RG-Nummer'];
        $Marke = $_POST['Marke'];
        $Modell = $_POST['Modell'];
        $EZ = $_POST['EZ'];
        $MotorNummer = $_POST['Motornummer'];
        $Fin = $_POST['FIN'];
        $KM = $_POST['KM'];
        $VK = $_POST['VK'];
        $EKBrutto = $_POST['EK-Brutto'];
        $EKNetto = $_POST['EK-Netto'];
        $VKDatum = $_POST['Verkaufsdatum'];
        $Lack = $_POST['Farbe'];

        //Keine Fehler, wir können den Nutzer registrieren
        if(!$error) {   
            $statement = $pdo->prepare("UPDATE `Fahrzeugverkauf` SET `EKNR`=[$EKNR],`EKDatum`=[$EKDatum],`RGNummer`=[$RGNummer],`Marke`=[$Marke],`Modell`=[$Modell],`EZ`=[$EZ],`MotorNr`=[$MotorNummer],`FIN`=[$Fin],`KM`=[$KM],`VK`=[$VK],`EKBrutto`=[$EKBrutto],`EKNetto`=[$EKNetto],`Farbe`=[$Lack],`VKDatum`=[$VKDatum] WHERE EKNR = $id");
                $result = $statement->execute(array('EKNR' => '$EKNR', 'EKDatum' => '$EKDatum', 'RGNummer' => '$RGNummer', 'Marke' => '$Marke', 'Modell' => '$Modell', 'EZ' => '$EZ', 'MotorNr' => '$MotorNummer', 'FIN' => '$Fin', 'KM' => '$KM', 'VK' => '$VK', 'EKBrutto' => '$EKBrutto', 'EKNetto' => '$EKNetto', 'Farbe' => '$Lack', 'VKDatum' => '$VKDatum'));

                if($result) {       
                echo 'Das Fahrzeug wurde erfolgreich hinzugefügt.';

                $showFormular = false;
            } else {
                echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>'
;
$showFormular=true//变量ob das注册表RungsFormular anezeigt werden soll
$pdo=newPDO('mysql:host=localhost;dbname=','');
如果(isset($_GET['bearbeiten'])){
$error=false;
$EKNR=$_POST['EKNR'];
$EKDatam=$_POST['EK-Datum'];
$RGNummer=$_POST['RG-Nummer'];
$Marke=$_POST['Marke'];
$Modell=$_POST['Modell'];
$EZ=$_POST['EZ'];
$MotorNummer=$_POST['MotorNummer'];
$Fin=$_POST['Fin'];
$KM=$_POST['KM'];
$VK=$_POST['VK'];
$EKBUTO=$_POST['EK-Brutto'];
$EKNetto=$_POST['EK-Netto'];
$VKDatum=$_POST['Verkaufsdatum'];
$Lack=$_POST['Farbe'];
//Keine Fehler,können den Nutzer registrieren先生
如果(!$error){
$statement=$pdo->prepare(“更新`Fahrzeugverkauf`SET`EKNR`=[$EKNR],`ekdatam`=[$ekdatam],`rgnumer`=[$rgnumer],`Marke`=[$Marke],`model`=[$model],`EZ`=[$EZ],`MotorNr`=[$motornumer],`FIN`=[$FIN],`KM`=[$KM],`k`=[$VK],`brutto`=[$brutekto],`netto`=[$brutekto],`netto`=[$vkd],`netto],`netto`=$vkd],$vkd];其中,$vkd;
$result=$statement->execute(数组('EKNR'=>'$EKNR','ekdatam'=>'$ekdatam','rgnumer'=>'$rgnumer','Marke'=>'$Marke','Modell'=>'$model','EZ'=>'$EZ','MotorNr'=>'$MotorNummer','FIN'=>'$FIN'=>''KM','VK'=>''$VK'=>''VK','EKBrutto','EKBrutto','EKNetto'=>'>''''''>''''''''''''''''$EKNetto','ekneto'>'''>'''';
如果($结果){
回音“Fahrzeug wurde erfolgreich hinzugefügt.”;
$showFormular=false;
}否则{
回音“我是阿布佩切人,我是费勒·奥夫盖特人”
;
准备好的语句对参数有不同的SQL语法。使用
:EKNR
代替
[$EKNR]

然后在执行它时,在数组中传递参数:
array(':EKNR'=>$EKNR,

SQL语句可以包含零个或多个命名(:name)或问题 标记(?)将替换实值的参数标记 当语句执行时

更新 您的代码中有几个错误:

  • 删除传递的值周围的引号。这:
    '$Modell'
    将保存文本值“$Model1”,而不是存储在
    $Modell
    变量中的值

  • 参数名称必须与SQL中的名称匹配。例如,在SQL中,您有:

    `MotorNr` = :MotorNummer,
    
    但您要传递一个参数:

    ':MotorNr' => $MotorNummer,
    
    :MotorNr
    必须替换为
    :motornumer
    。有几个类似的错误。请全部修复

  • 代码的结尾是将变量直接传递到SQL,而不使用参数:

    EKNR = $id
    
    将其替换为:

    EKNR = :id
    
    并将一个额外参数传递到execute:

    ':id' => $id
    
  • 无需保存id值:

    SET `EKNR`=:EKNR
    
    据我所知,
    EKNR
    是记录的id。无需保存,它将保持不变


  • 在要传递以执行的数组中,删除数组中值周围的单引号

    $result = $statement->execute(array(
        ':EKNR'     => $EKNR        ,
        ':EKDatum'  => $EKDatum     ,
        ':RGNummer' => $RGNummer    ,
        ':Marke'    => $Marke       ,
        ':Modell'   => $Modell      ,
        ':EZ'       => $EZ          ,
        ':MotorNr'  => $MotorNummer ,
        ':FIN'      => $Fin         ,
        ':KM'       => $KM          ,
        ':VK'       => $VK          ,
        ':EKBrutto' => $EKBrutto    ,
        ':EKNetto'  => $EKNetto     ,
        ':Farbe'    => $Lack        ,
        ':VKDatum'  => $VKDatum     ,
    ));
    
    已解决代码:

    <?php
    function updater($value,$value2,$value3,$value4,$value5,$value6,$value7,$value8,$value9,$value10,$value11,$value12,$value13,$value14,$value15,$value16,$value17,$value18){
        // Create connection
        $conn = new mysqli( 'localhost' , 'user' , 'pass' ,'db_name' );
        $value =mysqli_real_escape_string($conn,$value);
        $value2 =mysqli_real_escape_string($conn,$value2);
        $value3 =mysqli_real_escape_string($conn,$value3);
        $value4 =mysqli_real_escape_string($conn,$value4);
        $value5 =mysqli_real_escape_string($conn,$value5);
        $value6 =mysqli_real_escape_string($conn,$value6);
        $value7 =mysqli_real_escape_string($conn,$value7);
        $value8 =mysqli_real_escape_string($conn,$value8);
        $value9 =mysqli_real_escape_string($conn,$value9);
        $value10 =mysqli_real_escape_string($conn,$value10);
        $value11 =mysqli_real_escape_string($conn,$value11);
        $value12 =mysqli_real_escape_string($conn,$value12);
        $value13 =mysqli_real_escape_string($conn,$value13);
        $value14 =mysqli_real_escape_string($conn,$value14);
        $value15 =mysqli_real_escape_string($conn,$value15);
        $value16 =mysqli_real_escape_string($conn,$value16);
        $value17 =mysqli_real_escape_string($conn,$value17);
        $value18 =mysqli_real_escape_string($conn,$value18);
        // Check connection
    
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }   
        $sql = "UPDATE Fahrzeugverkauf SET EKNR='{$value}', EKDatum='{$value3}' , RGNummer='{$value4}' , Marke='{$value5}' , Modell='{$value6}' , Farbe='{$value7}', VKNummer='{$value8}', EZ='{$value9}', FIN='{$value10}', KM='{$value11}', VK='{$value12}', EKBrutto='{$value13}', EKNetto='{$value14}', VKDatum='{$value15}', MotorNr='{$value16}', Status='{$value17}', Anmerkung='{$value18}' WHERE EKNR='{$value2}'";
        if ($conn->query($sql) === TRUE) {
            echo "Record updated successfully";
        } else {
            echo "Error updating record: " . $conn->error;
        }
        $conn->close();
    }   
    
    if($_SERVER['REQUEST_METHOD'] === 'POST') {
        $value = $_POST['EKNR'];
        $value2 = $_POST['EKNR2'];
        $value3 = $_POST['EK-Datum'];
        $value4 = $_POST['RG-Nummer'];
        $value5 = $_POST['Marke'];
        $value6 = $_POST['Modell'];
        $value7 = $_POST['Farbe'];
        $value8 = $_POST['VKnummer'];
        $value9 = $_POST['EZ'];
        $value10 = $_POST['FIN'];
        $value11 = $_POST['KM'];
        $value12 = $_POST['VK'];
        $value13 = $_POST['EK-Brutto'];
        $value14 = $_POST['EK-Netto'];
        $value15 = $_POST['Verkaufsdatum'];
        $value16 = $_POST['Motornummer'];
        $value17 = $_POST['selektion'];
        $value18 = $_POST['anmerkung'];
        updater($value,$value2,$value3,$value4,$value5,$value6,$value7,$value8,$value9,$value10,$value11,$value12,$value13,$value14,$value15,$value16,$value17,$value18);
    }
    ?>
    

    我像你写的那样尝试了,但现在输出了另一个错误:警告:PDOStatement::execute():SQLSTATE[HY093]:无效参数编号:参数未在第134行的/volume1/web/34/fahrzeuge_bearbeiten.php中定义aufgetreten@MaxBogatec请更新您的问题,并向我们展示您编写的代码。不需要表单代码。更新后,仍然不知道出了什么问题……@MaxBogatec-Answer-Updated.@halfer-Thank you.updated,仍然无法工作!在检索POST值和查询中使用的变量名称之间存在两个不匹配的变量名称。您在执行中使用“:FIN”,但在查询中使用:FIN,因此这些变量名称不匹配。您在执行中也使用:Farbe,但在查询中使用:lock,这些变量名称不匹配。请更正这两个名称,然后查看是否匹配gs工作。在Antwort中的Bite Beantwort deine Frage和markiere diese Antwort dann als akzeptiert。Bite editiere die Antwort nicht in die Frage hinein!从堆栈溢出中获得最佳结果的专业提示:(a)避免在您的化身中出现明显的攻击性消息;(b)如果有人花了很多精力来帮助你,不要对代码进行更改(例如PDO到mysqli),这会使他们的所有努力无效;(c)如果有人帮助你,要比“仍然不起作用”更详细,否则就很难知道如何进一步帮助您。现在通常认为使用参数绑定而不是转义更安全,因为存在一些涉及扩展字符集的边缘大小写注入攻击。好消息是MySQLi直接支持参数绑定。