Collegeboox Posted February 19, 2011 Share Posted February 19, 2011 Can someone help me debug this code...this is a search page where it searches the keyword typed in the mysql db and it limits 10 results per page...and at the bottom if there are more than 10 results it says next 10 and its a link but when it is clicked it goes to the code and says please type a search, here is the code can someone please help me with this I would really appreciate it. <?php $page = $PHP_SELF; // Get the search variable from URL $var = @$_GET['search'] ; $searchtype = @$_GET['searchtype']; $isbn = "ISBN"; $school = "School"; $title = "Title"; $subject = "Subject"; $trimmed = trim($var); //trim whitespace from the stored variable // rows to return $limit=10; // check for an empty string and display a message. if ($trimmed == "") { echo "<p>Please enter a search...</p>"; exit; } // check for a search parameter if (!isset($var)) { echo "<p>We dont seem to have a search parameter!</p>"; exit; } //connect to your database $connect = mysql_connect("","]",]") or die("Not connected"); //specify database mysql_select_db("collegebooxboox") or die("could not log in"); if ($searchtype == ($title)) { // Build SQL Query $query = "select * from boox where name like \"%$trimmed%\" order by name"; // EDIT HERE and specify your table and field names for the SQL query } elseif ($searchtype == ($school)) { // Build SQL Query $query = "select * from boox where school like \"%$trimmed%\" order by school"; // EDIT HERE and specify your table and field names for the SQL query } elseif ($searchtype == ($isbn)) { // Build SQL Query $query = "select * from boox where isbn like \"%$trimmed%\" order by isbn"; // EDIT HERE and specify your table and field names for the SQL query echo "isbn"; } elseif ($searchtype == ($subject)) { // Build SQL Query $query = "select * from boox where subject like \"%$trimmed%\" order by subject"; // EDIT HERE and specify your table and field names for the SQL query } $numresults=mysql_query($query); $numrows=mysql_num_rows($numresults); // If we have no results, offer a google search as an alternative if ($numrows == 0) { echo "<h4>Results</h4>"; echo "<p>Sorry, your search: "" . $trimmed . "" returned zero results</p>"; // google echo "<p><a href=\"http://www.google.com/search?q=" . $trimmed . "\" target=\"_blank\" title=\"Look up " . $trimmed . " on Google\">Click here</a> to try the search on google</p>"; } // next determine if s has been passed to script, if not use 0 if (empty($s)) { $s=0; } // get results $query .= " limit $s,$limit"; $result = mysql_query($query) or die("Couldn't execute query"); // display what the person searched for echo "<p>You searched for: "" . $var . "" in "" . $searchtype ."" </p>"; // begin to show results set echo "Results "; $count = 1 + $s ; if ($searchtype = $title) { // now you can display the results returned while ($row= mysql_fetch_array($result)) { $title = $row["name"]; echo "$count. $title   </br><table width='297' border='1' align='center'> <tr> <td width='152'>Book Title:</td> <td width='129'>$row[name]</td> </tr> <tr> <td>Author:</td> <td>$row[author]</td> </tr> <tr> <td>ISBN#</td> <td>$row[isbn]</td> </tr> <tr> <td>Date Posted:</td> <td>$row[date]</td> </tr> <tr> <td>Posted By:</td> <td><a href='backpack.php' onclick='document['packback'].submit()'>$row[username]</a></td> </tr> <tr> <td>School:</td> <td>$row[school]</td> </tr> </table></br>"; $count++ ; } } elseif ($searchtype = $school) { // now you can display the results returned while ($row= mysql_fetch_array($result)) { $title = $row["school"]; echo "$count. $title" ; $count++ ; } } elseif ($searchtype = $subject) { // now you can display the results returned while ($row= mysql_fetch_array($result)) { $title = $row["subject"]; echo "$count. $title" ; $count++ ; } } elseif ($searchtype = $isbn) { // now you can display the results returned while ($row= mysql_fetch_array($result)) { $title = $row["isbn"]; echo "$count. $title" ; $count++ ; } } $currPage = (($s/$limit) + 1); //break before paging echo "<br />"; // next we need to do the links to other results if ($s>=1) { // bypass PREV link if s is 0 $prevs=($s-$limit); print " <a href=\"$PHP_SELF?s=$prevs&q=$var\"><< Prev 10</a>  "; } // calculate number of pages needing links $pages=intval($numrows/$limit); // $pages now contains int of pages needed unless there is a remainder from division if ($numrows%$limit) { // has remainder so add one page $pages++; } // check to see if last page if (!((($s+$limit)/$limit)==$pages) && $pages!=1) { // not last page so give NEXT link $news=$s+$limit; echo " <a href=\"$PHP_SELF?s=$news&q=$var\">Next 10 >></a>"; } $a = $s + ($limit) ; if ($a > $numrows) { $a = $numrows ; } $b = $s + 1 ; echo "<p>Showing results $b to $a of $numrows</p>"; ?> Quote Link to comment Share on other sites More sharing options...
litebearer Posted February 19, 2011 Share Posted February 19, 2011 Some rough psuedo code. At top of page... start sessions check if $_GET['search'] and $_GET['searchtype'] are both set if gets are not set check if session variables $_SESSION['search'] and $_SESSION['searchtype'] are both set if session variables are not set, send back to the page where search selections are made if session variables are set, then use them for $var and $searchtype if gets are set, then validate them and use as $var and $searchtype also set the session variables Quote Link to comment Share on other sites More sharing options...
Pikachu2000 Posted February 19, 2011 Share Posted February 19, 2011 $PHP_SELF is deprcated, and may not work. Remove the @s from the code. They suppress errors, and make problems that much harder to nail down. Quote Link to comment Share on other sites More sharing options...
Veteah Posted February 19, 2011 Share Posted February 19, 2011 This is untested so you'll probably have to fiddle with it, but try <?php $var = (isset($_GET['search'])) ? $_GET['search'] : ''; $searchtype = (isset($_GET['searchtype'])) ? $_GET['searchtype'] : ''; $post_limit = (isset($_GET['l'])) ? $_GET['l'] : 0; $isbn = "ISBN"; $school = "School"; $title = "Title"; $subject = "Subject"; $post_limit = (int) preg_replace("/[^\d\]/", "", $post_limit); $post_limit = (empty($post_limit)) ? 0 : $post_limit; $trimmed = trim($var); //trim whitespace from the stored variable // rows to return $limit = 10; if(empty($trimmed)) { echo "<p>Please enter a search...</p>"; exit; } //connect to your database $connect = mysql_connect() or die("Not connected"); //specify database mysql_select_db("collegebooxboox") or die("could not log in"); switch($searchtype) { case $title: default: $sql_field = 'name'; break; case $school: $sql_field = 'school'; break; case $isbn: $sql_field = 'isbn'; break; case $subject: $sql_field = 'subject'; break; } $sql = "SELECT * FROM `boox` WHERE ". $sql_field ." LIKE ". $trimmed; $run = mysql_query($sql) or die('error:<br/>' . mysql_error()); $num = mysql_num_rows($run); $p_total_rows = 'There are ' . $num . ' results'; if($num > $limit) { $sql = $sql . 'ORDER BY ' . $sql_field . ' ASC LIMIT '. $post_limit .', '. $limit; $run = mysql_query($sql) or die('error:<br/>' . mysql_error()); } while($row = mysql_fetch_array($run, MYSQL_ASSOC)) { // echo your results here } $link_prev = $post_limit - 10; $link_prev = (0 > $post_limit) ? 0 : $link_prev; $link_next = $post_limit + 10; ?> In which case your next and previous links would look like this <?php $url = $_SERVER['script_name']; echo '<a href="'.$url.'?l='.$link_prev.'">Previous</a>'; echo '<a href="'.$url.'?l='.$link_next.'">Next</a>'; ?> Also, you really, really really need to put some sort of checking on those $_GETs Quote Link to comment Share on other sites More sharing options...
Collegeboox Posted February 19, 2011 Author Share Posted February 19, 2011 That code didnt exactly worked, thank you for trying though... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.