У меня есть база данных «Telefoon» со столом «Telefoonnummers». В таблице есть столбцы «naam», «number» и «mobiel»Обновление записи базы данных с помощью PHP/PDO и mySQL
Я пытаюсь создать страницу .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>
Что не так с этим?
Есть опечатка, $ dhb! = $ Dbh. Кроме этого, убедитесь, что он входит в строку if и завершает весь ваш код PDO в блоке try/catch, чтобы проверить наличие ошибок. – aynber
Ах, опечатка теперь удалена! Но тем не менее, это ничего не меняет в db. Я уверен, что это входит в инструкцию if(). Я получил ту же строку в другом файле, и там она работает нормально. Но этот файл _adds_ записывает, а не меняет его. – JeroenJK
Кроме того, в Coda 2, когда я просматриваю файлы .php, они получили такую ошибку: ----- Предупреждение: PDO :: __ construct(): [2002] Нет такого файла или каталога (попытка подключения через unix: ///var/mysql/mysql.sock) in-on line 21 Неустранимая ошибка: исключить исключение «PDOException» с сообщением «SQLSTATE [HY000] [2002] Нет такого файла или каталога 'in -: 21 Stack trace: # 0 - (21): PDO -> __ construct ('mysql: host = loca ...', 'root', 'root') # 1 {main} throw in - on line 21 -----, но последний файл является единственным, кто этого не делает. – JeroenJK