我正在尝试使用Front Controller的逻辑将条目写入数据库。这就导致了问题,我已经输出了一些信息,因此已经给出了输出,并且无法使用标头。
主要功能是简单的电话簿。您可以将名称和数字(多个)写入数据库。提交条目后,它应重定向到显示所有条目的页面。
我尝试将重定向作为检查的第一件事。在使用Front Controller创建视图之前尝试实现所有业务逻辑,但是由于这是Submit按钮的用法,我有点困惑。
我有点担心我的Front Controller的实现和页面Add的构建(在该页面上按下了Submit)意味着已经创建了输出,并且标题不起作用。这有可能吗?
Index.php看起来像这样
<?php
include "redirect.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Harjutustund 1</title>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
<body>
<?php
include "navigation.php";
?>
<br><br>
<?php
include "footer.php"
?>
</body>
</html>
重定向看起来像这样
<?php
$firstName = $_POST["firstName"];
$lastName = $_POST["lastName"];
$phones = array($_POST["phone1"]);
if (!empty($_POST["phone2"])) {
array_push($phones, $_POST["phone2"]);
}
if (!empty($_POST["phone3"])) {
array_push($phones, $_POST["phone3"]);
}
if (!empty($firstName) && (!empty($lastName)) && (!empty($phones))) {
try {
//open the database
header("Location: index.php?command=show_list_page");
$db = new PDO('sqlite:db1.sqlite');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Insert record
$insert = "INSERT INTO contacts (firstName, lastName) VALUES (:firstName, :lastName);";
$stmt = $db->prepare($insert);
$stmt->bindParam('firstName', $firstName);
$stmt->bindParam('lastName', $lastName);
$stmt->execute();
// get Autoincrement value
//$id_value = $db->exec("select seq from sqlite_sequence where name=\"contacts\";");
$id_value = $db->lastInsertId();
foreach ($phones as $phone) {
$insert = "INSERT INTO phones (contact_id, number) VALUES (:id_value, :phone);";
$stmt = $db->prepare($insert);
$stmt->bindParam('id_value', $id_value);
$stmt->bindParam('phone', $phone);
$stmt->execute();
print_r($db->errorInfo());
}
} catch
(PDOException $e) {
print 'Exception : ' . $e->getMessage();
}
}
$db = NULL;
我想要的是首先处理所有业务逻辑,然后创建视图。按提交后,记录将被存储,并且重定向会将我带到整个列表。