我是PHP新手,我试着写简单的网上商店。
让我们说像这样的索引文件:
<?php
require_once '/inc/db.php';
$db = new Db();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<div id="header"><?php require_once("header.php"); ?></div>
<div id="content">
<?php
// i have no idea what to put here
?>
</div>
<div id="footer"><?php require_once("footer.php"); ?></div>
</body>
</html>
我创建了文件“add_category.php”和“add_product.php”,它们包含html表单。他们正在工作,但我想在内容div中显示该表单,并将数据保存在数据库中,我有问题。我想应用我的全局页眉,页脚等,我不想将我的布局从索引文件复制到我的应用程序的每种形式。
我不知道:
如何在我的显示不同的“页面”(现在我试图用$ _POST ['action']数据切换分支进行管理,但我不知道这是最好的方式)
< / LI>我应该从哪里“发送”数据?我的意思是“行动”属性。换句话说 - 我应该处理数据保持在index.php
我有一些关于PHP的书籍,但是没有关于如何构建应用程序的书籍。它们都是关于PHP语言和单页/文件上的简单任务。
我需要关于管理表单/页面的简单模式/示例/文章,并在它们之间进行通信(例如通过POST)。试图从Wordpress资源中学习,但这对我来说有点太复杂了(大型复杂的注册表,对象缓存等)。
我一般都没有编程问题(im windows app程序员)。
答案 0 :(得分:3)
不要将脚本包含在主站点模板中,而是必须做相反的事情 - 将模板包含在PHP脚本中 您可以单独处理脚本或创建单个入口点。两种方法都没有太大差别,但我建议使用前者作为入门者。
因此,请将您的网站包含页面,页面模板和主要模板 一旦你的脚本被调用,它就必须处理数据,然后加载网站模板,然后加载网页模板。
示例布局将如下所示: 一页:
<?
//include our settings, connect to database etc.
include dirname($_SERVER['DOCUMENT_ROOT']).'/cfg/settings.php';
//getting required data
$DATA=dbgetarr("SELECT * FROM links");
$pagetitle = "Links to friend sites";
//etc
//and then call a template:
$tpl = "links.tpl.php";
include "template.php";
?>
它输出没有但只收集所需数据并调用模板:
template.php
这是您的主要网站模板,
由页眉和页脚组成:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My site. <?=$pagetitle?></title>
</head>
<body>
<div id="page">
<? include $tpl ?>
</div>
</body>
</html>
并调用实际的页面模板:
<h2><?=$pagetitle?></h2>
<ul>
<? foreach($DATA as $row): ?>
<li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li>
<? endforeach ?>
<ul>
对于表单,最好将表单的操作设置为完全相同的页面(因此,您可以将表单操作留空)。 该请求将被发送到同一页面,您可以在其顶部放置如下代码:
<?
if ($_SERVER['REQUEST_METHOD']=='POST') {
$err = array();
//performing all validations and raising corresponding errors
if (empty($_POST['name']) $err[] = "Username field is required";
if (empty($_POST['text']) $err[] = "Comments field is required";
if (!$err) {
//if no errors - saving data and redirect
header("Location: ".$_SERVER['PHP_SELF']);
exit;
} else {
// all field values should be escaped according to HTML standard
foreach ($_POST as $key => $val) {
$form[$key] = htmlspecialchars($val);
}
} else {
$form['name'] = $form['comments'] = '';
}
$tpl = "form.tpl.php";
include "template.php";
?>
它将处理您的数据,并在成功时重定向到同一页面或显示错误填写的表单
这个主要的想法是用户友好的表单处理和业务逻辑/显示逻辑分离,同时保持最自然的站点布局 - 不同站点模块的单独文件,但常见的设计。
答案 1 :(得分:1)
只需将GET参数?page=add_product
或?page=add_category
传递给您的index.php
并添加一个匹配的php脚本:
<?php
require_once '/inc/db.php';
$db = new Db();
// if no page-parameter was send, have a default page to display.
define("DEFAULT_PAGE", "my_default_page.php");
if (isset($_GET["page"]))
{
switch ($_GET["page"])
{
case "add_product": $page = "add_product.php"; break;
case "add_category": $page = "add_category.php"; break;
// add more cases here
default : $page = DEFAULT_PAGE;
}
}
else
$page = DEFAULT_PAGE;
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<div id="header"><?php require_once("header.php"); ?></div>
<div id="content">
<?php
require $page;
?>
</div>
<div id="footer"><?php require_once("footer.php"); ?></div>
</body>
</html>
编辑:MVC-Approach:
/index.php
/controllers/home.php Default page with some welcome stuff.
/controllers/new_product.php Display form for creating a product.
/controllers/create_product.php Process POST-data and create a product.
/controllers/new_category.php Display form for creating a category.
的index.php:
define("DEFAULT_PAGE", dirname(__FILE__)."/controllers/home.php");
// Did the user pass page?
if (isset($_GET["page"])
// Does page contain a valid controller name?
&& preg_match("~^[a-zA-Z_]+$~D", $_GET["page"])
// Does this controller exist?
&& file_exists(dirname(__FILE__)."/controllers/".$_GET["page"].".php"))
{
// Controller exists.
$page = dirname(__FILE__)."/controllers/".$_GET["page"].".php";
}
else
$page = DEFAULT_PAGE;
答案 2 :(得分:0)
从基础开始: http://www.tizag.com/phpT/forms.php
首先,您可能希望将数据发布到表单中,因此请在表单中添加action =“add_category.php”和method =“post”。 POST总是更好,以便在URL(GET)中传递数据时避免错误。
然后在PHP部分中,首先检查$ _SERVER ['REQUEST_METHOD']变量。如果它显示“POST”,则表示表单已提交。 使用isset()检查所有变量以避免php通知,并对这些变量进行任何验证。例如:$ _POST ['category']&gt; 0
我通常将所有错误存储在一个$ errors数组中,并根据之前的验证显示错误。
count($ errors)== 0表示您没有错误,然后您可以插入/更新您的数据库,并且您可以向用户显示一条消息,说明插入已完成,或者使用位置重定向他:例如,标题到类别列表。