我无法整理列出各种商业联系信息的脚本。
基本上,用户可以输入商家名称,也可以从一个或多个类别中选择,然后单击提交按钮,然后开始搜索存储在mysql数据库中的结果。这部分工作正常,因为在用户可以输入名称或选择类别,然后单击按钮以查看列出匹配结果的表。这些结果以6个为一组进行分页。
以下是表单布局的代码:
$pageContent = '
<div class="content">
<h1>Browse Listings</h1>
<div class="searchBox">
<form method="post" action="'.$_SERVER['PHP_SELF'].'" name="search">
Enter a Business Name: <input name="bizName" type="text" size="25" placeholder="Search..." />
or Select a Category: <select name="bizCategory">
<option>Choose</option>
<option>Accomodation</option>
<option>Retail</option>
</select>
<button type="submit" name="searching" class="search" value="Search">Search</button>
<!-- end .searchBox --></div>
<br />
';
以下是处理用户在输入姓名时点击Search
的实例的代码:
if ((isset($_POST['searching']) && $_POST['searching'] == "Search") || isset($_SESSION['bizFind']))
{
if ((isset($_POST['bizName']) && $_POST['bizName'] == "") && $_POST['bizCategory'] == "Choose")
{
$pageContent .= '
<p>You forgot to enter a business name, or select a search category.</p>
';
} else {
...
if (((isset($_POST['bizName']) && $_POST['bizName'] !== "") && $_POST['bizCategory'] == "Choose") || (isset($_SESSION['bizFind']) && !in_array($_SESSION['bizFind'], array("", "Accomodation", "Retail"))))
{
if ((isset($_SESSION['bizFind']) && !in_array($_SESSION['bizFind'], array("", "Accomodation", "Retail"))) && !isset($bizFind))
{
$bizFind = $_SESSION['bizFind'];
}
else
{
$bizFind = $_POST['bizName'];
}
强调这一行,作为实际的实例:
if (((isset($_POST['bizName']) && $_POST['bizName'] !== "") && $_POST['bizCategory'] == "Choose") || (isset($_SESSION['bizFind']) && !in_array($_SESSION['bizFind'], array("", "Accomodation", "Retail"))))
现在,当用户离开页面并导航回来时,会保留搜索值并显示结果。
但是,在选择类别后,我无法出于某种原因掌握用户点击Search
背后的声明。
我试过这个:
if ((isset($_POST['bizCategory']) && $_POST['bizCategory'] !== "Choose") || (isset($_SESSION['bizFind']) && ($_SESSION['bizFind'] == "Accomodation" || $_SESSION['bizFind'] == "Retail"))
{
if ((isset($_SESSION['bizFind']) && ($_SESSION['bizFind'] == "Accomodation" || $_SESSION['bizFind'] == "Retail")) && !isset($bizFind))
{
$bizFind = $_SESSION['bizFind'];
}
else
{
$bizFind = $_POST['bizCategory'];
}
如果选择了某个类别且用户点击Search
,则会触发,但如果已设置会话变量并且用户导航回列表区域,则不会触发。
当选择了搜索类别时,这也会导致分页问题。
如果使用了商家名称,则分页工作正常,但是当选择某个类别,并且用户尝试导航到结果的下一页时,不会返回任何数据作为变量$bizFind
(搜索字符串) )尚未设定,或没有价值。
如果有人对此有任何意见或建议,我将非常感谢。
但问题是我在第二个实例中做错了什么,脚本没有被会话变量(搜索字符串)的存在单独触发。
谢谢!!
答案 0 :(得分:1)
function getPost($v)
{
return isset($_POST[$v]) ? $_POST[$v] : null;
}
然后你可以交换它:
if (isset($_POST['bizCategory']) && ($_POST['bizCategory'] !== "Choose")) ...
用这个:
$bizCat = getPost('bizCategory');
if ($bizCat && ($bizCat != 'Choose')) ...
另外,假设您有相当复杂的括号表达式,请执行以下操作:
// Just a random example!
$bizFindSession = (bool) getSession('bizFind');
$bizCatPosted = ...
if (!bizFindSession && $bizCatPosted) ...
您将发现您的陈述将(a)更少括号,(b)更容易理解。如果你对变量名使用简单易读的英语,那就更好了(因为如果语句可以像英语句子一样被读出来)。
最后,不要忘记在战略点不时做print_r($_POST); exit();
- 你可以偷看你的应用程序出错的地方。