好吧,您必须使用 post meta 来获取更多信息,但是如果您想这样做,那么这里是从 sql 获取数据以显示的完整方法。
必需:运行 PHP 和 MySQL 的服务器。如果您没有通过网络使用或测试,则需要在您的 PC 上安装 WAMP,在您的 Mac 上启用 Apache,或者在您的 Linux 机器上安装 Apache。所需技能:
创建 MySQL 数据库和表 基本 HTML:创建表单和表单元素 基本 PHP:创建变量 echo 语句
我们将通过创建一个真实世界的应用程序来探索这个主题。我们的目标是访问车辆(汽车)的 MySQL 数据库,通过它们的制造和/或出售/租赁可用性动态选择它们。创建你的 MySQL 数据库
您应该已经熟悉在服务器上创建 MySQL 数据库。请参阅其他教程和参考资料以获取具体帮助。w3schools.com 是一个很好的信息来源。
将您的数据库命名为“myDatabase”或您选择的任何其他名称。跟踪用于设置此数据库的用户名以及使用的密码。您还需要通常是 localhost 的服务器名称,但这取决于您的服务器/网络主机。如果您不确定,请查看他们的文档。创建一个新表
在此数据库中创建一个新表。将其命名为车辆或您选择的任何其他名称。现在,创建一个包含 5 个字段和 7 行的表。我创建了这样的 5 个字段:
field: increment, Type: int(1), Extra: auto_increment, Primary Key
field: make, Type: varchar(15), Index
field: model, Type: varchar(15)
field: year, Type: year(4)
field: availability, Type: varchar(5), Index
'make' 和 'availability' 字段已编入索引,以提高搜索效率。对于这种大小的表来说,这并不重要,但对于一个大表来说,它可以帮助提高性能。将数据插入字段。对于此示例,我的表如下所示:
增量 制造 车型年 可用性
1 福特嘉年华 2011 销售
2 福特野马 2011 销售
3 福特野马 2010 租赁
4 福特嘉年华 2010 租赁
5 雪佛兰伏特 2011 销售
6 雪佛兰伏特 2011 租赁
7 雪佛兰伏特 2010 租赁
创建您的网页
创建、命名和保存网页为 .html 或 .php,无论您喜欢哪个。此页面将包含一个带有单选按钮的表单,允许用户根据品牌(在本例中为福特或雪佛兰)和/或可用性(车辆是出售还是租赁)缩小对汽车的搜索范围. 创建带有单选按钮的表单
这将是一个简单的表格,有 2 个单选按钮组 - 一个选择车辆制造商,另一个选择车辆可用性。该表单将有一个提交按钮,该按钮将作为其发布到 php 页面“vehicles.php”的操作。您可以使用 CSS 随意设置样式。这是代码:
<form name="input" action="vehicles.php" method="post">
<fieldset>
<legend>Make you are looking for:</legend>
<input type="radio" name="make" value="ford" /> Ford
<input type="radio" name="make" value="chevy" /> Chevy
<input type="radio" name="make" value="all" checked /> All
</fieldset>
<fieldset>
<legend>Looking to:</legend>
<input type="radio" name="availability" value="sale" /> Buy
<input type="radio" name="availability" value="lease" /> Rent
<input type="radio" name="availability" value="all" checked /> All
</fieldset>
<input type="submit" value="Submit" />
</form>
我们来看看表格
此提交的表单将发送值并触发文件“vehicles.php”。该文件将处理在此表单上单击的项目,并将查询 MySQL 数据库以返回请求的信息。
第一个单选按钮组被命名为“make”,以对应数据库表中的相同字段,可以选择的值与数据库表的“make”字段中的数据相同。换句话说,由于我们在数据库中有数据为“ford”和“chevy”,然后我们对按钮使用相同的区分大小写的值。'All' 按钮的值为 'all' 并且是一种特殊情况,我们稍后会看到。第二个单选按钮组名为“availability”,对应数据库表中的相同字段,其值与数据库表的“availability”字段中的数据相同(“sale”、“lease”和特殊情况“全部”)。
由于此表单将发布到“vehicles.php”,接下来让我们创建它。PHP 文件
创建一个新的空 php 文件并将其命名为“vehicles.php”。这个页面/文件需要完成几件事:
从单选按钮接收值 连接到数据库 根据从单选按钮传递的值查询数据库 打印出正确的信息
编写 PHP
为了访问数据库,我们需要用户名、密码、数据库名、服务器名和数据库表名。让我们首先将用户名、密码和数据库名称放入 php 变量中:
$username="myUserName";
$password="myPassWord";
$database="myDatabaseName";
我们可以通过将这些信息放在它自己的单独的 php 文件中,例如命名为“config.php”,从而使其更加安全。然后我们通过在主 php 文件中包含或要求它来访问它。如果放置在根文件夹之外,它会增加另一层安全性。
ob_start();
require("config.php");
ob_end_clean();
包装在命令中开始,然后结束并擦除(清理)输出缓冲(ob),我们也增加了一些安全问题。请查阅 PHP 资源以最好地满足您的安全需求。为请求创建一些变量
接下来我将创建一些变量以用作请求。这些将是从表单的 2 个单选按钮组发送的值。所以第一个,'$req' 将等于我们从'make'按钮组获得的值。第二个 $req2' 将等于从“可用性”单选按钮组中获得的值。
$req=$_REQUEST['make'];
$req2=$_REQUEST['availability'];
连接到数据库
我们接下来可以连接到数据库。任何打开的连接都必须在某个时候关闭!如果您需要复习 PHP 的这个或其他细节,请查阅其他 PHP 文档和手册。
mysql_connect("localhost",$username,$password);
mysql_select_db($database) or die( "Unable to select database");
“localhost”是数据库所在服务器的名称。这将因您的服务器而异。许多服务器将其定位为“本地主机”。其他将是特定地址,例如“sql28e8d34f.carrierzone.com”或其他内容。请咨询您的网络主机或服务器管理员以了解您的具体设置。
如果连接出现问题,您将看到消息“无法选择数据库”。选择要使用的表
在一个简单的场景中,您只需说明要在哪个数据库表中工作。在我们的例子中,我们正在使用“车辆”表。选择此表的简单代码(遍历每一行)如下所示:
$query="SELECT * FROM vehicles";
我们想要做的比这复杂一点。让我们来复习。我们想先看看选择了哪个“品牌”。如果选择了“ford”,我们只想将填写“make”字段的行视为“ford”。同样,如果选择了“chevy”,我们只想选择值为“chevy”的“make”字段。但是如果选择了“all”,那么我们确实要考虑所有行。
同样,如果选择了“购买”或“租赁”按钮,我们只想显示“购买”或“租赁”的行,如果选择了“全部”,则我们要考虑所有行。
仅从一个字段中进行选择也相当简单。例如,要只考虑'ford'的行,我们可以要求我们的查询从车辆表中选择所有行,其中字段'make'是'ford'。看起来像这样:
$query="SELECT * FROM vehicles WHERE make='ford'";
由于我们不知道将选择哪个“品牌”,因此我们无法对值进行硬编码。我们希望使用从表单中选择的按钮传递的值。请记住,我们将此值存储为 '$req',因此现在我们可以将此查询设为:
$query="SELECT * FROM vehicles WHERE make='$req'";
没那么糟糕。但是由于我们想检查 make 和可用性,我们可以使用一个查询,它使用 '$req' 来查找 'make' 和 '$req2' 来查找可用性:
$query="SELECT * FROM vehicles WHERE make='$req' AND availability='$req2'";
好的。仍然没有那么糟糕。但是现在如果为“全部”选择一个或两个按钮会发生什么?基本上,对于这 2 个单选按钮组,可能会发生 4 种不同的情况:
选择了特定的品牌并选择了特定的可用性 为“品牌”选择了“全部”,并选择了特定的可用性 为“可用性”选择了“全部” “制造”和“可用性”
可能还有其他方法可以处理这个问题。我选择将其作为一系列“if/else”条件句。这是处理这4个条件的代码:
if ($req!="all" && $req2!="all") $query="SELECT * FROM vehicles WHERE make='$req' AND availability='$req2'";
else if($req=="all" && $req2!="all" ) $query="SELECT * FROM vehicles WHERE availability='$req2'";
else if($req!="all" && $req2=="all" ) $query="SELECT * FROM vehicles WHERE make='$req'";
else if($req=="all" || $req2=="all" ) $query="SELECT * FROM vehicles";
您可能会注意到所有这些条件实际上只是检查一个值是否设置为“全部”:
if(&req=='all')
或者它是否被设置为其他东西(因此它不等于“全部”):
if(&req!='all')
完成查询并关闭连接
以下 4 行标准代码用于完成查询并关闭连接。从中,我们了解哪些行包含我们要求的信息,哪些信息存储在变量“$result”中,以及该信息所在的行数,该信息存储在变量“$num”中。另外,请注意连接现在已关闭。请参阅 PHP 手册以进行进一步讨论。
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_query($result);
mysql_close();
使用此信息
我们现在可以实际使用这些信息了!我们需要做的是迭代(循环)包含所请求数据的行,并将其打印出来('echo' it,用 php 行话)。我们将使用“for”循环来完成此操作。您将看到其他人使用“while”循环来执行此操作。根据手头的情况,两者之间的差异可能是微妙的或深刻的。在这种情况下,这并不重要,所以任何一个都可以。
$i=0;
for ($i; $i < $num; $i++){
$f12=mysql_result($result,$i,"model");
$f13=mysql_result($result,$i,"year");
$f14=mysql_result($result,$i,"availability");
请注意,在第 2 行的左大括号中尚未关闭。它很快就会关闭。解释
创建了一个变量“$i”,并将其初始值设置为整数零。'for' 循环从 $i 等于 0 开始,并在 $i 小于 '$num' 的值(即来自查询的正确行数)时继续。每次迭代后,$i 增加 1($i++)。变量 $f12 设置为查询行中值为 $i 的“模型”的值。变量 $f13 设置为查询行中值为 $i 的“年”值。变量 $f14 设置为查询行中值为 $i 的“可用性”值。
将此打印到页面
剩下要做的就是将此信息打印到页面上。我们将通过连接(组合)三个变量(包括每个变量之间的空格)并在第三个变量之后添加换行符来做到这一点。第二行代码用一个右大括号来关闭“for”循环。
echo $f12." ".$f13." ".$f14." ";
}
这是完整的html代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Untitled Document</title>
</head>
<body>
<form name="input" action="vehicles.php" method="post">
<fieldset>
<legend>Make you are looking for:</legend>
<input type="radio" name="make" value="ford" /> Ford
<input type="radio" name="make" value="chevy" /> Chevy
<input type="radio" name="make" value="all" checked /> All
</fieldset>
<fieldset>
<legend>Looking to:</legend>
<input type="radio" name="availability" value="sale" /> Buy
<input type="radio" name="availability" value="lease" /> Lease
<input type="radio" name="availability" value="all" checked /> All
</fieldset>
<input type="submit" value="Submit" />
</form>
</body>
</html>
这是“vehicle.php”的完整代码
<?php
ob_start();
require("config.php");
ob_end_clean();
$req=$_REQUEST['make'];
$req2=$_REQUEST['availability'];
mysql_connect("localhost",$username,$password);
mysql_select_db($database) or die( "Unable to select database");
if ($req!="all" && $req2!="all") $query="SELECT * FROM vehicles WHERE make='$req' AND availability='$req2'";
else if($req=="all" && $req2!="all" ) $query="SELECT * FROM vehicles WHERE availability='$req2'";
else if($req!="all" && $req2=="all" ) $query="SELECT * FROM vehicles WHERE make='$req'";
else if($req=="all" || $req2=="all" ) $query="SELECT * FROM vehicles";
$result=mysql_query($query);
$num=mysql_numrows($result);
mysql_query($result);
mysql_close();
$i=0;
for ($i; $i < $num; $i++){
$f12=mysql_result($result,$i,"model");
$f13=mysql_result($result,$i,"year");
$f14=mysql_result($result,$i,"availability");
echo $f12." ".$f13." ".$f14."<br />";
}
?>
这是“config.php”的完整代码,其中包含您的数据库密码等:
<?php
$username="myUserName";
$password="myPassWord";
$database="myDatabaseName";
?>