为什么一个文件无法连接到 PHP 论坛系统中的其他文件?
Why is a file not connecting to the others in PHP forum system?
我正在开发一个 PHP 论坛,该论坛涉及多个相互连接的页面。我正试图让类别主题出现在单独的页面上,但由于某种原因,topics.php 文件正在连接到其余文件。当我单击主页按钮或尝试注销时,页面没有改变。我正在通过单独的函数文件做所有事情。
这是 topics.php 文件:
<?php
session_start();
include ('../db.php');
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
// Check if user is logged in using the session variable
if ( $_SESSION['logged_in'] != 1 ) {
$_SESSION['message'] = "You must log in before viewing your profile page!";
header("location: error.php");
}
else {
// Makes it easier to read
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
}
include ('content_function.php');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Home</title>
<!-- Bootstrap core CSS -->
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom fonts for this template -->
<link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<!-- Custom styles for this template -->
<link href="css/clean-blog.min.css" rel="stylesheet">
<link href="main.css" type="text/css" rel="stylesheet" />
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
<div class="container">
<a class="navbar-brand" href="../logout.php">Logout</a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
Menu <!-- Right above this ^ comment was this code: data-toggle="collapse" #NeverForget-->
<i class="fa fa-bars"></i>
</button>
<div class="nav-link" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-link" class="nav-item">
<a href="index2.php">Home</a>
</li>
<li class="nav-link" class="nav-item">
<a href="about.html">About</a>
</li>
<li class="nav-link" class="nav-item">
<a href="msgBoard.php">Posts</a>
</li>
<li class="nav-link" class="nav-item">
<a href="contact.html">Contact</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Page Header -->
<header class="masthead" style="background-image: url('img/bible.jpg')">
<div class="overlay"></div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-md-10 mx-auto">
<div class="site-heading">
<h1>Hi <?= $first_name ?>!</h1>
<span class="subheading">Have Fun Exploring the Fellowship Wall</span>
</div>
</div>
</div>
</div>
</header>
<!-- Main Content -->
<!-- <h1>Categories</h1>-->
<style>
body{
background: tan;}
</style>
<!-- The above code is for the bacckground color on index2.php -->
<hr>
<!-- Pager -->
<!--<div class="clearfix">
<a class="btn btn-primary float-right" href="#">Older Posts →</a>
</div>-->
</div>
</div>
</div>
<?php
/*
$select = mysqli_query($mysqli, "SELECT * FROM categories");
while($row = mysqli_fetch_assoc($select)){
echo "<h1>", $row['category_title']."</h1>" ;
}*/
disptopics($_GET['cid'], $_GET['scid']);
/*if (isset($_GET['cid'], $GET['scid'])){
disptopics();
}*/
?>
<hr>
<!-- Footer -->
<footer>
<div class="container">
<div class="row">
<div class="col-lg-8 col-md-10 mx-auto">
<ul class="list-inline text-center">
<li class="list-inline-item">
<a href="#">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
</span>
</a>
</li>
<li class="list-inline-item">
<a href="#">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-facebook fa-stack-1x fa-inverse"></i>
</span>
</a>
</li>
<!-- <li class="list-inline-item">
<a href="#">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-github fa-stack-1x fa-inverse"></i>
</span>-->
</a>
</li>
</ul>
<p class="copyright text-muted">Copyright © Your Website 2018</p>
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript -->
<script src="vendor/jquery/jquery.min.js"></script>
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Custom scripts for this template -->
<script src="js/clean-blog.min.js"></script>
</body>
</html>
这是函数文件 (content_function.php):
<?php
function dispcategories(){
include ('../db.php');
$select = mysqli_query($mysqli, "SELECT * FROM categories");
while($row = mysqli_fetch_assoc($select)){
echo "<table class = 'category-table'";
echo "<tr><td class= 'main-category'colspan='2'>".$row['category_title']."</tr></td>";
dispsubcategories($row['cat_id']);
echo "</table>";
}
}
function dispsubcategories($parent_id){
include ('../db.php');
$select = mysqli_query($mysqli, "SELECT cat_id, subcat_id, subcategory_title, subcategory_descr FROM categories, subcategories
WHERE ($parent_id = categories.cat_id) AND ($parent_id = subcategories.parent_id)");
echo "<tr><th width='90%'>Categories</th><th width='10%'>Topics</th></tr>";
while($row = mysqli_fetch_assoc($select)){
echo "<tr><td class='category_title'><a href='(A)Book 2.0/Bootstrap/topics.php/".$row['cat_id']."/".$row['subcat_id']."'>
".$row['subcategory_title']."<br/>";
echo $row['subcategory_descr']."</a></td>";
echo "<td class='num-topics'>".getnumtopics($parent_id, $row['subcat_id'])."</td></tr>";
}
}
//Displays categories
function getnumtopics($cat_id, $subcat_id){
include ('../db.php');
$select = mysqli_query($mysqli, "SELECT category_id, subcategory_id FROM topics WHERE ".$cat_id." = category_id
AND ".$subcat_id." = subcategory_id");
$get = mysqli_num_rows($select);
return $get;
}
//Displays Topics Within categories
function disptopics($cid, $scid){
include ('../db.php');
$select = mysqli_query($mysqli, "SELECT topic_id, author, title, date_posted, views, replies FROM categories, subcategories, topics
WHERE ($cid = topics.category_id) AND ($scid = topics.subcategory_id) AND ($cid = categories.cat_id)
AND ($scid = subcategories.subcat_id) ORDER BY topic_id DESC");
if(mysqli_num_rows($select) != 0) {
echo "<table class='topic-table'>";
echo "<tr><th>Title</th><th>Posted By</th><th>Date Posted</th><th>Views</th><th>Replies</th></tr>";
while($row = mysqli_fetch_assoc($select)){
echo "<tr><td><a href='readtopic.php/".$cid."/".$scid."/".$row['topic_id']."'>
".$row['title']."</a></td><td>".$row['author']."</td><td>".$row['date-posted'].".</td><td>".$row['views']."</td>
<td>".$row['replies']."</td></tr>";
}
echo "</table>";
} else {
echo "<p>This category has no topics yet! <a href='newtopic.php/".$cid."/".$scid."'> Add a new one!</a></p>";
}
}
?>
我已经找了好几天了,但似乎找不到语法错误。也许我输入错误?我对 PHP 还是很陌生。
这里发生了很多不好的事情。请不要刻薄,我们都必须学习,这是一个过程。我不知道我是否可以具体回答你的问题,但我可以指出一些事情。
session_start();
include ('../db.php');
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
// Check if user is logged in using the session variable
if ( $_SESSION['logged_in'] != 1 ) {
$_SESSION['message'] = "You must log in before viewing your profile page!";
header("location: error.php");
}
else {
// Makes it easier to read
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
}
Nuke 上半部分:
session_start();
include ('../db.php');
// Check if user is logged in using the session variable
if ( $_SESSION['logged_in'] != 1 ) {
$_SESSION['message'] = "You must log in before viewing your profile page!";
header("location: error.php");
exit; //<--- add this
}else {
// Makes it easier to read
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
}
它是多余的,因为它下面有 If。如果他们没有登录,你重定向页面(这些不再重要),如果他们是你重新设置这些。总是在做重定向后添加 exit;
,因为 header 并不一定会结束当前脚本的执行,它可能会导致意外的事情发生。
在你的HTML中你有
<body>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
比你在页面后面有
<style>
body{background: tan;}
</style>
样式应该放在标签之前,最好放在页面的头部。我不确定这会导致什么问题,因为它可能取决于几个因素,包括正在使用的浏览器。只是根据页面的呈现方式,如果标签是第一个,它可能无法及时选择样式以将其应用于标签。
对于功能,我不能肯定地说,因为我不知道你项目的全部范围,但如果你只调用它们一次就不需要使它们起作用,事实上它通过移动使事情复杂化远离使用它的地方的逻辑。如果你这样做,你可以忽略其中的一部分 re-use 他们。但通常,最好不要从与 HTML 分开的函数中回显 HTML,这会使格式化 HTML 变得困难,因为您必须同时打开两个文件。如果它被重复使用,您可能会在事先不知道的情况下修改使用它的页面。最好 return 数据然后内联格式化。这也是主观的,因为它实际上取决于它在项目的宏伟计划中是如何完成的。但请注意。其中一些是基于代码的过程性质,但即使在使用 classes 的面向 Object 的编程 (OOP) 中,直接输出 HTML 仍然不是一个好主意出于同样的原因,来自 class。
连接。
function getnumtopics($cat_id, $subcat_id){
include ('../db.php');
你多次包含这个文件,除了浪费处理能力和时间之外,你还创建了对该文件的硬依赖。如果您稍后选择替换该文件,您将需要编辑大量代码。最好 include/require
像您在页面顶部做的那样,然后在调用它们时将连接传递给函数。所以不是这个:
function getnumtopics($cat_id, $subcat_id){
include ('../db.php');
$select = mysqli_query($mysqli, ...
做这样的事情
function getnumtopics($cat_id, $subcat_id, $mysqli){
$select = mysqli_query($mysqli, ...
当您调用它时,只需将其添加到调用中,前提是它在调用它的文件中 included/require。如果您不确定并且需要在多个文件中使用它,那么您可以使用 'require_once'(稍后会详细介绍)。这导致的问题的一个例子。假设稍后您想要创建一个新的数据库文件(无论出于何种原因,我想不出一个,但它可能会发生)。将该文件名备份到所有函数中后,如果不修改该页面中使用的所有函数,您就无法仅在一个页面上对其进行测试,其中一些函数可能会在其他页面上使用。所以你被困在搜索和替换文件名的所有代码中。这可能是一个不好的例子,但这是我现在能想到的最好的例子。由于多种原因,这只是一种不好的做法。
要求与要求一次
文件 1.
require_once('../db.php');
require_once('../file2.php');
....
getnumtopics($cat_id, $subcat_id, $mysqli);
文件 2.
require_once('../db.php');
....
dispsubcategories($cat_id, $subcat_id, $mysqli);
在此示例中,File1 需要 DB,但 File2 也需要。但也许您也在不需要它的 File3 中使用 File2:
文件 3.
require_once('../file2.php');
在这种情况下,如果你只是需要它,你应该要求不包括它。然后,您在 File1 案例中获得 2 个副本,在 File3 案例中获得 1 个副本。您不能只将它包含在 File2 中,因为 File1 也需要它。所以你可以使用 _once
这确保如果它全部准备好你不会再次包含它,但如果它没有它也会(这在我的脑海中更有意义)。
包括与要求
至于包含与要求。如果文件丢失,include 不会抛出任何错误,require 会抛出任何错误。因此,您必须问问自己,如果找不到文件 x(要包含的文件),该脚本能否正常运行。在这种情况下,答案是否定的。所以你应该让它成为必需的。这将帮助您在文件丢失时调试错误。您可以将它移动到 Linux ,其中大小写(大写与小写)很重要,它在 Windows 上运行良好,但现在它被破坏了。这将通过告诉您所需的文件丢失来帮助您,而不是因为无法连接到数据库或在 NULL 资源上调用数据库函数而收到一般错误。
夏天
至于为什么合并页面,我不确定是不是没有调用exit,但是我不能肯定地说,因为我还没有研究过任何伟大的不调用exit的行为detail 我只知道你应该总是在重定向之后调用它,否则可能会发生奇怪的事情。
我也不能说这就是wr的全部ng,这正是我马上要改变的。
希望对您有所帮助。
我正在开发一个 PHP 论坛,该论坛涉及多个相互连接的页面。我正试图让类别主题出现在单独的页面上,但由于某种原因,topics.php 文件正在连接到其余文件。当我单击主页按钮或尝试注销时,页面没有改变。我正在通过单独的函数文件做所有事情。
这是 topics.php 文件:
<?php
session_start();
include ('../db.php');
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
// Check if user is logged in using the session variable
if ( $_SESSION['logged_in'] != 1 ) {
$_SESSION['message'] = "You must log in before viewing your profile page!";
header("location: error.php");
}
else {
// Makes it easier to read
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
}
include ('content_function.php');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Home</title>
<!-- Bootstrap core CSS -->
<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom fonts for this template -->
<link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link href='https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel='stylesheet' type='text/css'>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
<!-- Custom styles for this template -->
<link href="css/clean-blog.min.css" rel="stylesheet">
<link href="main.css" type="text/css" rel="stylesheet" />
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
<div class="container">
<a class="navbar-brand" href="../logout.php">Logout</a>
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
Menu <!-- Right above this ^ comment was this code: data-toggle="collapse" #NeverForget-->
<i class="fa fa-bars"></i>
</button>
<div class="nav-link" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-link" class="nav-item">
<a href="index2.php">Home</a>
</li>
<li class="nav-link" class="nav-item">
<a href="about.html">About</a>
</li>
<li class="nav-link" class="nav-item">
<a href="msgBoard.php">Posts</a>
</li>
<li class="nav-link" class="nav-item">
<a href="contact.html">Contact</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Page Header -->
<header class="masthead" style="background-image: url('img/bible.jpg')">
<div class="overlay"></div>
<div class="container">
<div class="row">
<div class="col-lg-8 col-md-10 mx-auto">
<div class="site-heading">
<h1>Hi <?= $first_name ?>!</h1>
<span class="subheading">Have Fun Exploring the Fellowship Wall</span>
</div>
</div>
</div>
</div>
</header>
<!-- Main Content -->
<!-- <h1>Categories</h1>-->
<style>
body{
background: tan;}
</style>
<!-- The above code is for the bacckground color on index2.php -->
<hr>
<!-- Pager -->
<!--<div class="clearfix">
<a class="btn btn-primary float-right" href="#">Older Posts →</a>
</div>-->
</div>
</div>
</div>
<?php
/*
$select = mysqli_query($mysqli, "SELECT * FROM categories");
while($row = mysqli_fetch_assoc($select)){
echo "<h1>", $row['category_title']."</h1>" ;
}*/
disptopics($_GET['cid'], $_GET['scid']);
/*if (isset($_GET['cid'], $GET['scid'])){
disptopics();
}*/
?>
<hr>
<!-- Footer -->
<footer>
<div class="container">
<div class="row">
<div class="col-lg-8 col-md-10 mx-auto">
<ul class="list-inline text-center">
<li class="list-inline-item">
<a href="#">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-twitter fa-stack-1x fa-inverse"></i>
</span>
</a>
</li>
<li class="list-inline-item">
<a href="#">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-facebook fa-stack-1x fa-inverse"></i>
</span>
</a>
</li>
<!-- <li class="list-inline-item">
<a href="#">
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-github fa-stack-1x fa-inverse"></i>
</span>-->
</a>
</li>
</ul>
<p class="copyright text-muted">Copyright © Your Website 2018</p>
</div>
</div>
</div>
</footer>
<!-- Bootstrap core JavaScript -->
<script src="vendor/jquery/jquery.min.js"></script>
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- Custom scripts for this template -->
<script src="js/clean-blog.min.js"></script>
</body>
</html>
这是函数文件 (content_function.php):
<?php
function dispcategories(){
include ('../db.php');
$select = mysqli_query($mysqli, "SELECT * FROM categories");
while($row = mysqli_fetch_assoc($select)){
echo "<table class = 'category-table'";
echo "<tr><td class= 'main-category'colspan='2'>".$row['category_title']."</tr></td>";
dispsubcategories($row['cat_id']);
echo "</table>";
}
}
function dispsubcategories($parent_id){
include ('../db.php');
$select = mysqli_query($mysqli, "SELECT cat_id, subcat_id, subcategory_title, subcategory_descr FROM categories, subcategories
WHERE ($parent_id = categories.cat_id) AND ($parent_id = subcategories.parent_id)");
echo "<tr><th width='90%'>Categories</th><th width='10%'>Topics</th></tr>";
while($row = mysqli_fetch_assoc($select)){
echo "<tr><td class='category_title'><a href='(A)Book 2.0/Bootstrap/topics.php/".$row['cat_id']."/".$row['subcat_id']."'>
".$row['subcategory_title']."<br/>";
echo $row['subcategory_descr']."</a></td>";
echo "<td class='num-topics'>".getnumtopics($parent_id, $row['subcat_id'])."</td></tr>";
}
}
//Displays categories
function getnumtopics($cat_id, $subcat_id){
include ('../db.php');
$select = mysqli_query($mysqli, "SELECT category_id, subcategory_id FROM topics WHERE ".$cat_id." = category_id
AND ".$subcat_id." = subcategory_id");
$get = mysqli_num_rows($select);
return $get;
}
//Displays Topics Within categories
function disptopics($cid, $scid){
include ('../db.php');
$select = mysqli_query($mysqli, "SELECT topic_id, author, title, date_posted, views, replies FROM categories, subcategories, topics
WHERE ($cid = topics.category_id) AND ($scid = topics.subcategory_id) AND ($cid = categories.cat_id)
AND ($scid = subcategories.subcat_id) ORDER BY topic_id DESC");
if(mysqli_num_rows($select) != 0) {
echo "<table class='topic-table'>";
echo "<tr><th>Title</th><th>Posted By</th><th>Date Posted</th><th>Views</th><th>Replies</th></tr>";
while($row = mysqli_fetch_assoc($select)){
echo "<tr><td><a href='readtopic.php/".$cid."/".$scid."/".$row['topic_id']."'>
".$row['title']."</a></td><td>".$row['author']."</td><td>".$row['date-posted'].".</td><td>".$row['views']."</td>
<td>".$row['replies']."</td></tr>";
}
echo "</table>";
} else {
echo "<p>This category has no topics yet! <a href='newtopic.php/".$cid."/".$scid."'> Add a new one!</a></p>";
}
}
?>
我已经找了好几天了,但似乎找不到语法错误。也许我输入错误?我对 PHP 还是很陌生。
这里发生了很多不好的事情。请不要刻薄,我们都必须学习,这是一个过程。我不知道我是否可以具体回答你的问题,但我可以指出一些事情。
session_start();
include ('../db.php');
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
// Check if user is logged in using the session variable
if ( $_SESSION['logged_in'] != 1 ) {
$_SESSION['message'] = "You must log in before viewing your profile page!";
header("location: error.php");
}
else {
// Makes it easier to read
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
}
Nuke 上半部分:
session_start();
include ('../db.php');
// Check if user is logged in using the session variable
if ( $_SESSION['logged_in'] != 1 ) {
$_SESSION['message'] = "You must log in before viewing your profile page!";
header("location: error.php");
exit; //<--- add this
}else {
// Makes it easier to read
$first_name = $_SESSION['first_name'];
$last_name = $_SESSION['last_name'];
$email = $_SESSION['email'];
$active = $_SESSION['active'];
}
它是多余的,因为它下面有 If。如果他们没有登录,你重定向页面(这些不再重要),如果他们是你重新设置这些。总是在做重定向后添加 exit;
,因为 header 并不一定会结束当前脚本的执行,它可能会导致意外的事情发生。
在你的HTML中你有
<body>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
比你在页面后面有
<style>
body{background: tan;}
</style>
样式应该放在标签之前,最好放在页面的头部。我不确定这会导致什么问题,因为它可能取决于几个因素,包括正在使用的浏览器。只是根据页面的呈现方式,如果标签是第一个,它可能无法及时选择样式以将其应用于标签。
对于功能,我不能肯定地说,因为我不知道你项目的全部范围,但如果你只调用它们一次就不需要使它们起作用,事实上它通过移动使事情复杂化远离使用它的地方的逻辑。如果你这样做,你可以忽略其中的一部分 re-use 他们。但通常,最好不要从与 HTML 分开的函数中回显 HTML,这会使格式化 HTML 变得困难,因为您必须同时打开两个文件。如果它被重复使用,您可能会在事先不知道的情况下修改使用它的页面。最好 return 数据然后内联格式化。这也是主观的,因为它实际上取决于它在项目的宏伟计划中是如何完成的。但请注意。其中一些是基于代码的过程性质,但即使在使用 classes 的面向 Object 的编程 (OOP) 中,直接输出 HTML 仍然不是一个好主意出于同样的原因,来自 class。
连接。
function getnumtopics($cat_id, $subcat_id){
include ('../db.php');
你多次包含这个文件,除了浪费处理能力和时间之外,你还创建了对该文件的硬依赖。如果您稍后选择替换该文件,您将需要编辑大量代码。最好 include/require
像您在页面顶部做的那样,然后在调用它们时将连接传递给函数。所以不是这个:
function getnumtopics($cat_id, $subcat_id){
include ('../db.php');
$select = mysqli_query($mysqli, ...
做这样的事情
function getnumtopics($cat_id, $subcat_id, $mysqli){
$select = mysqli_query($mysqli, ...
当您调用它时,只需将其添加到调用中,前提是它在调用它的文件中 included/require。如果您不确定并且需要在多个文件中使用它,那么您可以使用 'require_once'(稍后会详细介绍)。这导致的问题的一个例子。假设稍后您想要创建一个新的数据库文件(无论出于何种原因,我想不出一个,但它可能会发生)。将该文件名备份到所有函数中后,如果不修改该页面中使用的所有函数,您就无法仅在一个页面上对其进行测试,其中一些函数可能会在其他页面上使用。所以你被困在搜索和替换文件名的所有代码中。这可能是一个不好的例子,但这是我现在能想到的最好的例子。由于多种原因,这只是一种不好的做法。
要求与要求一次
文件 1.
require_once('../db.php');
require_once('../file2.php');
....
getnumtopics($cat_id, $subcat_id, $mysqli);
文件 2.
require_once('../db.php');
....
dispsubcategories($cat_id, $subcat_id, $mysqli);
在此示例中,File1 需要 DB,但 File2 也需要。但也许您也在不需要它的 File3 中使用 File2:
文件 3.
require_once('../file2.php');
在这种情况下,如果你只是需要它,你应该要求不包括它。然后,您在 File1 案例中获得 2 个副本,在 File3 案例中获得 1 个副本。您不能只将它包含在 File2 中,因为 File1 也需要它。所以你可以使用 _once
这确保如果它全部准备好你不会再次包含它,但如果它没有它也会(这在我的脑海中更有意义)。
包括与要求
至于包含与要求。如果文件丢失,include 不会抛出任何错误,require 会抛出任何错误。因此,您必须问问自己,如果找不到文件 x(要包含的文件),该脚本能否正常运行。在这种情况下,答案是否定的。所以你应该让它成为必需的。这将帮助您在文件丢失时调试错误。您可以将它移动到 Linux ,其中大小写(大写与小写)很重要,它在 Windows 上运行良好,但现在它被破坏了。这将通过告诉您所需的文件丢失来帮助您,而不是因为无法连接到数据库或在 NULL 资源上调用数据库函数而收到一般错误。
夏天
至于为什么合并页面,我不确定是不是没有调用exit,但是我不能肯定地说,因为我还没有研究过任何伟大的不调用exit的行为detail 我只知道你应该总是在重定向之后调用它,否则可能会发生奇怪的事情。
我也不能说这就是wr的全部ng,这正是我马上要改变的。
希望对您有所帮助。