我正在建立一个表单,以便使用PDO(我不太熟悉)将数据提交到MySQL数据库中。
这是用于从具有名称,生日和两个硬件选项的简单输入表单中输入数据的代码:
<?php
session_start();
if (isset ($_POST['next_1']))
{
$name = $_POST['Name'];
$geburtsdatum = $_POST['Geburtsdatum'];
$hardware = $_POST['hardware'];
$true = "1";
}
else
{
header('Location: pdo_test.php', true, 302);
}
?>
<!DOCTYPE html>
<html lang="de">
<meta charset="UTF-8">
<head>
<title>PDO-Test</title>
<link rel="stylesheet" type="text/css" href="style/style.css" />
</head>
<body>
<img id="logo" src="bilder/some_logo.png" alt="some Logo">
<h1>PDO Test Seite</h1><br>
<?php
//Showing Errors
error_reporting(E_ALL);
ini_set('display_errors', 1);
echo "<br>";
//Verbindung zur Datenbank
include 'includes/connect.php';
echo "<br>";
echo "<b>Name: </b>" . $name . "<br><b>Geburtsdatum: </b>" . $geburtsdatum . "<br>" ;
foreach ($hardware as $key => $ho)
{
switch($ho)
{
case "Phone";
echo "Phone: " . $ho . "<br>";
break;
case "Headset";
echo "Headset: " . $ho . "<br>";
break;
}
}
try
{
$conn->beginTransaction();
$stmt = $conn->prepare("INSERT INTO testdb(name, geburtsdatum, phone, headset) VALUES(:name, :geburtsdatum, :phone, :headset)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':geburtsdatum', $geburtsdatum);
foreach ($hardware as $key => $ho)
{
switch($ho)
{
case "Phone";
$stmt->bindParam(':phone', $true);
break;
case "Headset";
$stmt->bindParam(':headset', $true);
break;
}
}
$stmt->execute();
$conn->commit();
echo "<br>New records created successfully";
}
catch(PDOException $e)
{
$conn->rollBack();
error_log("Database rollback; inserting data failed: ".$e->getMessage());
}
?>
</body>
</html>
我正在使用echo
部分来仔细检查表单中的输入(对于此问题,可以忽略不计,一切正常。)
环顾与我的问题类似的不同帖子,我只找到了“解决方案”如何启用错误报告。
在我的connect.php(include 'includes/connect.php';
)中,我已经启用了以下错误报告:$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
在我添加的主脚本中
error_reporting(E_ALL);
ini_set('display_errors', 1);
由于某些原因,我在我的网站上收到的唯一输出是echo
的内容和连接脚本中的“成功连接”行。
我没有收到任何错误,但是同时我的数据没有插入到数据库中。
任何关于如何显示错误消息的想法,以及能帮助我将数据获取到数据库的任何解决方案都受到赞赏。
答案 0 :(得分:0)
我首先看到的是您选择了4列,但只给出了3个值,甚至可能是2个,因为我看不到$ true在任何地方声明。试试这个:
case "Phone";
$stmt->bindParam(':phone', $true);
$stmt->bindParam(':headset', null);
break;
case "Headset";
$stmt->bindParam(':headset', $true);
$stmt->bindParam(':phone', null);
break;