Hi Apologies if this question has been answered before and I can't find it. I have searched and although finding similar issues, I haven't been able to fix.
I have a file that creates a search for and then is supposed to post to itself to retriev results. When I add the first function (the search form) everything seems OK. The page renders, the select menus are populated from my mySQL db.
When I add the second function (the results). I start getting an error that refers to a line number in my initial function that was previously OK. I gather the error has something to do with syntax, but I can't find it.
I'll show some examples and then detail the error.
My intial code that creates the search form and works is:
<?php
/**
* Searches users.
*
*/
/**
* Handles session initialization
*/
include("open_session.php");
if(!isset($mainfile))
{
/** Defines core functions. */
include("mainfile.php");
}
/** Global configuration data */
include("config.php");
/** Generates page header */
include ("header.php");
function sform() {
include("config.php");
$box_title = "Search Form";
$box_stuff = "<table width=\"100%\"><tr><td align=\"left\">";
$box_stuff .= "<span class=\"finePrint\">Search hints can go here</span></td></tr></table>";
$box_stuff .= "
<center><form action=\"./search_users.php\" method=\"post\">
<table><tr><td colspan=3 align=\"left\"><h4>Search for:</h4></td></tr>
<tr><td align=\"left\"><font size=\"-1\">Company</font></td><td align=\"left\"><font size=\"-1\">Category</font></td><td align=\"left\"><font size=\"-1\">City</font></td></tr>
<tr><td align=\"left\" valign=\"top\"><input name=\"company\"></td><td align=\"left\" valign=\"top\">
<select name=\"cat\" size=\"7\" multiple>\n";
$cat_result = mysql_query("select cat, catkey, cattext, count(cat) AS num_type FROM " . $table_prefix."users LEFT JOIN " . $table_prefix."users_cat ON cat=catkey GROUP BY cattext ORDER BY cattext");
$categories = mysql_fetch_array($cat_result);
if ($categories) {
while ($c2 = mysql_fetch_array($cat_result)) {
$num_type = $c2[num_type];
$box_stuff .= "<option name=\"cat\" value=\"$c2[catkey]\">$c2[cattext] ($num_type)</option>";
}
}
$box_stuff .= "
</select>
</td>
<td align=\"left\" valign=\"top\">
<select name=\"city\" size=\"7\" multiple>\n";
$city_result = mysql_query("select city, count(city) AS num_type FROM " . $table_prefix."users GROUP BY city ORDER BY city");
$cities = mysql_fetch_array($city_result);
if ($cities) {
while ($c3 = mysql_fetch_array($city_result)) {
$num_type3 = $c3[num_type];
$box_stuff .= "<option name=\"city\" value=\"$c3[city]\">$c3[city] ($num_type3)</option>";
}
}
$box_stuff .= "</select></td></tr>\n";
$box_stuff .= "
<tr><td align=\"left\" colspan=3 align=\"center\"><input type=\"submit\" value=\"Search\"> Note: searching for all can produce a large page!</td></tr>
</table><input type=\"hidden\" name=\"op\" value=\"search\" />
</form></center>";
//return $box_stuff;
thememainbox($box_title, $box_stuff);
include("footer.php");
}
switch($op) {
case "search":
search();
break;
default:
sform();
break;
}
?>
Now, when I add anything for the function search() , even a simple message printed to the page such as:
function search()
{
include('config.php');
global ;
$box_title = "Search Results";
$box_stuff .= "Results here";
thememainbox($box_title, $box_stuff);
include("footer.php");
}
I get the error: Parse error: parse error, expecting T_VARIABLE' or'$'' in /Library/WebServer/Documents/phpwebsite/search_users.php on line 45
BTW... line 45 is part of the initial funtion that was working before:
$cat_result = mysql_query("select cat, catkey, cattext, count(cat) AS num_type FROM " . $table_prefix."users LEFT JOIN " . $table_prefix."users_cat ON cat=catkey GROUP BY cattext ORDER BY cattext");
$categories = mysql_fetch_array($cat_result);
if ($categories) {
while ($c2 = mysql_fetch_array($cat_result)) {
$num_type = $c2[num_type];
$box_stuff .= "<option name=\"cat\" value=\"$c2[catkey]\">$c2[cattext] ($num_type)</option>";
} //THIS IS LINE 45
}
I feel that if I can get past this, I can likely get my actual search to work. If you're curious, the following code is what I actually have in mind for the search function. I just can't get far enough along to even test it. I would surely appreciate any advice that anyone can extend.:
function search() {
include("config.php");
global $company, $cat, $city, $catkey, $cattext, Order;
$box_title = "Search Results";
if ($cat>0) {
$classreq="AND catkey=$cat";
}
if (!$Order) {
$Order="company";
}
$query = "SELECT company, city, cat, catkey, cattext FROM " . $table_prefix."users LEFT JOIN " . $table_prefix."users_cat ON cat=catkey WHERE company LIKE '%$company%' AND city LIKE '%$city%' AND cat LIKE '%$cat%' $classreq ORDER BY $Order";
$result = mysql_query($query);
$box_stuff = "<center><br>";
$box_stuff .= "<table cellpadding=1 border=0 cellspacing=0 width=\"100%\">";
if ($result){
if ($r = mysql_fetch_array($result)){
do {
$box_stuff .="
<tr class=\"type5\"><td align=\"left\">Company</td><td align=\"left\">Category</td><td align=\"left\">City</td></tr>
<tr class=\"type5\"><td align=\"left\">$r[company]</td><td align=\"left\">$r[cattext]</td><td align=\"left\">$r[city]</td></tr>";
} while ($r = mysql_fetch_array($result));
} else {
$box_stuff .= "<b>Search Failed</b>";
}
}
$box_stuff .= "</center>";
thememainbox($box_title, $box_stuff);
include("footer.php");
}
Thanks again,
verdon