用PHP/PDO和mySQL更新数据库记录
我有一个数据库“Telefoon”和一个表“Telefoonnumers”。表中有“naam”、“编号”和“mobiel”列 我正在尝试创建一个.php页面,在那里我可以更新记录。我很肯定这是对的,但不知何故,一切都没有改变 在这里,您填写更新的记录,当您单击按钮时,它会转到下一页进行更新用PHP/PDO和mySQL更新数据库记录,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我有一个数据库“Telefoon”和一个表“Telefoonnumers”。表中有“naam”、“编号”和“mobiel”列 我正在尝试创建一个.php页面,在那里我可以更新记录。我很肯定这是对的,但不知何故,一切都没有改变 在这里,您填写更新的记录,当您单击按钮时,它会转到下一页进行更新 <!DOCTYPE HMTL> <html> <head> <title>Wijzigen telefoonnummer</title>
<!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>
Wijzigen telefoonnummer
我使用您的代码设置了快速测试页面。我发现有两件事情不能正常工作
初始表单-表单中的“naam”字段被禁用。这意味着该参数不能进入Wijzig.php页面。因为“naam”总是空的,因此等于“”,所以它不会通过if语句。为了让它工作,我在第一个表单中重新启用了“naam”字段李>
UPDATE语句中的参数-在UPDATE语句中,它试图访问名为“:telefoonnumer”的参数,但在参数中使用了“:numer”。这将导致PDO在执行时抛出异常
Quick Note-我在wijzig.php中添加了一个echo语句,以便成功运行将产生某种可见的结果
至此,我更新了两个文件,如下所示:
index.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>
Wijzigen telefoonnummer
在对现有记录运行时,它会生成以下输出:
更改的记录数:1
我使用您的代码设置了快速测试页面。我发现有两件事情不能正常工作
初始表单-表单中的“naam”字段被禁用。这意味着该参数不能进入Wijzig.php页面。因为“naam”总是空的,因此等于“”,所以它不会通过if语句。为了让它工作,我在第一个表单中重新启用了“naam”字段李>
UPDATE语句中的参数-在UPDATE语句中,它试图访问名为“:telefoonnumer”的参数,但在参数中使用了“:numer”。这将导致PDO在执行时抛出异常
Quick Note-我在wijzig.php中添加了一个echo语句,以便成功运行将产生某种可见的结果
至此,我更新了两个文件,如下所示:
index.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>
Wijzigen telefoonnummer
在对现有记录运行时,它会生成以下输出:
更改的记录数:1
有个打字错误,$dhb!=$胸径。除此之外,请确保它进入if行,并将所有PDO代码包装在try/catch块中以检查错误。啊,拼写错误现在被删除了!但是,它仍然没有改变数据库中的任何内容。我很确定它会出现在if()语句中。我在另一个文件中得到了相同的行,在那里它运行良好。但是该文件添加了一个记录而不是更改它。另外,在Coda 2中,当我预览.php文件时,它们都会出现如下错误:-警告:PDO::_construct():[2002]没有这样的文件或目录(尝试通过unix:///var/mysql/mysql.sock)在第21行出现致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY000][2002]第21行-:21堆栈跟踪中没有这样的文件或目录:#0-(21):PDO->u构造('mysql:host=loca…','root','root')#1{main}抛出,但最后一个文件是唯一没有这样做的文件。好吧,也许你是对的,它没有输入if()语句!(通过在代码中添加一些print()进行测试)。但它仍然不会改变数据库中的任何内容。与数据库的连接是正确的,我只是以与其他文件相同的方式进行了连接。那么SQL代码呢?语法没有错,对吗?或者bindValue是否限制为1或其他什么?语法看起来是正确的。如果它现在进入If语句,请将PDO代码包装在一个try中/catch块查看是否有错误。您也可以将execute语句返回到一个值并转储该值以查看返回的内容。有一个输入错误,$dhb!=$dbh。除此之外,请确保它进入if行,并将所有PDO代码包装在try/catch块中以检查错误。啊,输入错误现在已被删除!但仍然不是changi我很确定它会进入if()语句。我在另一个文件中得到了相同的行,在那里它可以正常工作。但是该文件添加了一条记录,而不是更改它。另外,在Coda 2中,当我预览.php文件时,它们都会出现如下错误:-----警告:PDO::_construct():[2002]没有这样的文件或目录(正在尝试通过unix:///var/mysql/mysql.sock)第21行中出现致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY000][2002]没有这样的文件或目录”,在-:21堆栈跟踪:#0-(21):PDO->u构造('mysql:host=loca…','root','root')#1{main}抛出-在第21行------,但最后一个文件是唯一没有这样做的文件。好吧,也许你是对的,它没有输入if()语句!(通过在代码中添加一些print()进行测试)。但它仍然不会改变数据库中的任何内容。与数据库的连接是正确的,我只是以与其他文件相同的方式进行了连接。那么SQL代码呢?语法没有错,对吗?或者bindValue是否限制为1或其他什么?语法看起来是正确的。如果它现在进入If语句,请将PDO代码包装在一个try中/catch块以查看是否有任何错误。您还可以将execute语句返回一个值,并转储该值以查看返回的内容。侧注:如果OP需要实际禁用该禁用字段,请改用readonly
属性。这将允许该字段进行POST,而不像使用disabled
侧注:如果OP需要禁用的field实际已禁用,请改用只读
属性。这将允许该字段发布,而不像使用禁用
<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>