使用PHP / PDO和mySQL更新数据库记录

时间:2013-10-02 19:06:21

标签: php mysql sql pdo

我有一个数据库" Telefoon"有一张桌子" Telefoonnummers"。该表有列" naam"," number"和" mobiel"

我正在尝试创建一个.php页面,我可以在其中更新记录。我很确定这是对的,但不知怎的变化。

在这里填写更新的记录,当您点击按钮时,它会转到下一页进行更新。

<!DOCTYPE HMTL>
<html>

<head>
    <title>Wijzigen telefoonnummer</title>
</head>

<body>

    <?php

        $record_name = $_GET["naam"];

        $user = "root";
        $pass = "root";

        $dbh = new PDO(
            'mysql:host=localhost; port=8473; dbname=telefoon',
            $user,
            $pass
        );

        $sth = $dbh -> prepare("

            SELECT *
            FROM Telefoonnummers
            WHERE naam = :record_name

        ");

        $sth -> bindValue( ":record_name", $record_name, PDO::PARAM_STR );

        $sth -> execute();

        $printRecord = $sth -> fetchAll(PDO::FETCH_ASSOC);

        /*
        //dit record als array weergeven
        print("<pre>");
        print_r($printRecord);
        print("</pre>");
        */

        //gegevens in variabelen zetten
        $printRecordRecord = $printRecord[0];
        $huidigeNaam = $printRecordRecord["naam"];
        $huidigeNummer = $printRecordRecord["telefoonnummer"];
        $huidigeMobiel = $printRecordRecord["mobiel"];

        //niet meer nodig door bovenstaande
        /*
        foreach( $printRecord AS $printRecordIndex => $printRecordRecord ) {

            $huidigeNaam = $printRecordRecord["naam"];
            $huidigeNummer = $printRecordRecord["telefoonnummer"];
            $huidigeMobiel = $printRecordRecord["mobiel"];

        }
        */

        print("

            <form action='wijzig.php' method='POST'>
                <table>

                    <tr>
                        <td bgcolor='green'><b>Naam</b></td>
                        <td bgcolor='green'><b>Telefoonnummer</b></td>
                        <td bgcolor='green'><b>Mobiel</b></td>
                        <td bgcolor='green'></td>
                    </tr>

                    <tr>
                        <td><input type='text' name='naam' value='$huidigeNaam' disabled='TRUE' /></td>
                        <td><input type='text' name='nummer' value='$huidigeNummer' /></td>
                        <td><input type='text' name='mobiel' value='$huidigeMobiel' /></td>
                        <td><input type='submit' value='Wijzig' /></td>
                    </tr>

                </table>
            </form>

        ");

    ?>

</body>

这是下一页实际更改(至少是我想要的)记录:

<!DOCTYPE HTML>
<html>

<head>
    <title>Gewijzigd</title>
</head>

<body>

    <?php

        //geupdate gegevens ophalen
        $newNaam = $_POST["naam"];
        $newNumber = $_POST["nummer"];
        $newMobile = $_POST["mobiel"];

        //gegevens updaten als ALLES is ingevuld
        if ( ($newNaam != "") && ($newNumber != "") && ($newMobile != "") ) {

            $user = "root";
            $pass = "root";

            $dhb = new PDO(
                'mysql:host=localhost; port=8473; dbname=telefoon',
                $user,
                $pass
            );

            $sth = $dbh -> prepare("

                UPDATE Telefoonnummers
                SET naam = :naam,
                telefoonnummer = :nummer,
                mobiel = :mobiel
                WHERE naam = :naam

            ");

            $sth -> bindValue( ":naam", $newNaam, PDO::PARAM_STR );
            $sth -> bindValue( ":telefoonnummer", $newNumber, PDO::PARAM_STR );
            $sth -> bindValue( ":mobiel", $newMobile, PDO::PARAM_STR );

            $sth -> execute();

            $sthCheck = $dbh -> prepare("

                SELECT *
                FROM Telefoonnummers
                WHERE naam = :naam

            ");

            $sthCheck -> bindValue( ":naam", $newNaam, PDO::PARAM_STR );

            $sthCheck -> execute();

        }

    ?>

</body>

这有什么问题?

1 个答案:

答案 0 :(得分:1)

我使用您的代码设置了快速测试页面。我发现了两件无法正常工作的事情。

  1. 初始表单 - 表单中禁用了“naam”字段。这意味着该参数不会进入Wijzig.php页面。因为“naam”总是为空 - 因此等于“” - 它不会使它超过你的if语句。为了实现这一点,我在第一种形式中重新启用了“naam”字段。
  2. UPDATE语句中的参数 - 在UPDATE语句中,它尝试访问名为“:telefoonnummer”的参数,但参数中使用了“:nummer”。这会导致PDO在执行时抛出异常。
  3. 快速注释 - 我在wijzig.php中添加了一个echo语句,以便成功运行会产生某种可见的结果。

    有了这个,我已经将这两个文件更新为:

    的index.php

    <head>
    <title>Wijzigen telefoonnummer</title>
    </head>
    
    <body>
    
    <?php
    
        $record_name = $_GET["naam"];
    
        $user = "root";
        $pass = "root";
    
        $dbh = new PDO(
            'mysql:host=localhost; port=8473; dbname=telefoon',
            $user,
            $pass
        );
    
        echo $record_name;
    
        $sth = $dbh -> prepare("
    
            SELECT *
            FROM Telefoonnummers
            WHERE naam = :record_name
    
        ");
    
        $sth -> bindValue( ":record_name", $record_name, PDO::PARAM_STR );
    
        $sth -> execute();
    
        $printRecord = $sth -> fetchAll(PDO::FETCH_ASSOC);
    
        /*
        //dit record als array weergeven
        print("<pre>");
        print_r($printRecord);
        print("</pre>");
        */
    
        //gegevens in variabelen zetten
        $printRecordRecord = $printRecord[0];
        $huidigeNaam = $printRecordRecord["naam"];
        $huidigeNummer = $printRecordRecord["telefoonnummer"];
        $huidigeMobiel = $printRecordRecord["mobiel"];
    
        //niet meer nodig door bovenstaande
        /*
        foreach( $printRecord AS $printRecordIndex => $printRecordRecord ) {
    
            $huidigeNaam = $printRecordRecord["naam"];
            $huidigeNummer = $printRecordRecord["telefoonnummer"];
            $huidigeMobiel = $printRecordRecord["mobiel"];
    
        }
        */
    
        print("
    
            <form action='wijzig.php' method='POST'>
                <table>
    
                    <tr>
                        <td bgcolor='green'><b>Naam</b></td>
                        <td bgcolor='green'><b>Telefoonnummer</b></td>
                        <td bgcolor='green'><b>Mobiel</b></td>
                        <td bgcolor='green'></td>
                    </tr>
    
                    <tr>
                        <td><input type='text' name='naam' value='$huidigeNaam'/></td>
                        <td><input type='text' name='nummer' value='$huidigeNummer' /></td>
                        <td><input type='text' name='mobiel' value='$huidigeMobiel' /></td>
                        <td><input type='submit' value='Wijzig' /></td>
                    </tr>
    
                </table>
            </form>
    
        ");
    
    ?>
    
    </body>
    

    wijzig.php

    <head>
    <title>Gewijzigd</title>
    </head>
    
    <body>
    
    <?php
    
        //geupdate gegevens ophalen
        $newNaam = $_POST["naam"];
        $newNumber = $_POST["nummer"];
        $newMobile = $_POST["mobiel"];
    
        //gegevens updaten als ALLES is ingevuld
        if ( ($newNaam != "") && ($newNumber != "") && ($newMobile != "") ) {
    
            $user = "root";
            $pass = "root";
    
            $dbh = new PDO(
            'mysql:host=localhost; port=8473; dbname=telefoon',
            $user,
            $pass
        );
    
            $sth = $dbh -> prepare("
    
                UPDATE Telefoonnummers
                SET naam = :naam,
                telefoonnummer = :nummer,
                mobiel = :mobiel
                WHERE naam = :naam
    
            ");
    
            $sth -> bindValue( ":naam", $newNaam, PDO::PARAM_STR );
            $sth -> bindValue( ":nummer", $newNumber, PDO::PARAM_STR );
            $sth -> bindValue( ":mobiel", $newMobile, PDO::PARAM_STR );
    
            $sth -> execute();
    
            $sthCheck = $dbh -> prepare("
    
                SELECT *
                FROM Telefoonnummers
                WHERE naam = :naam
    
            ");
    
            $sthCheck -> bindValue( ":naam", $newNaam, PDO::PARAM_STR );
    
            echo "Number of records changed: ".$sthCheck -> execute();
    
        }
    
    ?>
    
    </body>
    

    对现有记录运行时,会产生以下输出:

      

    更改的记录数:1