Jump to content

[SOLVED] Search form logic


soycharliente

Recommended Posts

I am having a problem with some radio buttons that I've placed on a search form. I think that my logic in checking which radio has been selected is wrong, therefore I'm getting incorrect results.

 

It's a search form to search a db of books for a library. There is a page that lists all the categories of books (physics, calculus, chemistry, etc.). The search form is reached after choosing a category. So in the form it already tells you what book category you are searching in. The form has an input for the text and 4 radio options (all, isbn, title OR author, title AND author).

 

When I chose all, it displays results for all book categories instead of just the book category that it's in.

 

Any help/ideas? Here's all the code:

<?php
require("main.php");
session_start();
?>
<html>
<head>
<title>Books Management</title>
</head>
<body>

<fieldset>
<legend><strong>Search Books in Book Category</strong></legend>
<strong>Book Category ID:</strong> <?php echo $_GET["id"]; ?><br />
<strong>Book Category Name:</strong> <?php echo getCategoryName($_GET["id"]); ?>
<form action="managebooks.php?id=<?php echo $_GET["id"]; ?>" method="post">
	<p>Search Books By: <input type="radio" name="searchbooksby" value="all" checked="checked" /> All    
	<input type="radio" name="searchbooksby" value="isbn" /> ISBN    
	<input type="radio" name="searchbooksby" value="tora" /> Title OR Author    
	<input type="radio" name="searchbooksby" value="tanda" /> Title AND Author</p>
	<p><input type="text" name="searchbooksdata" value="" size="40" maxlength="255" /></p>
	<input type="hidden" name="searchbookscategoryid" value="<?php echo $_GET["id"]; ?>" />
	<p><input type="submit" name="searchbookssubmit" value="Search" />
	<input type="submit" name="searchallbookssubmit" value="Search All Categories" /></p>
</form>
</fieldset>

<fieldset>
<legend><strong>Search Results</strong></legend>
<p><?php print_r($_POST); ?></p>
<?php
if (isset($_POST["searchbookssubmit"]))
{
	$searchbooksdata = $_POST["searchbooksdata"];
	$searchbooksby = $_POST["searchbooksby"];
	$searchbookscategoryid = $_POST["searchbookscategoryid"];

	dbconnect();
	$query = "SELECT * FROM books WHERE ";
	if ($searchbooksby === "isbn")
	{
		$query .= "isbn LIKE '%$searchbooksdata%'";
	} else if ($searchbooksby === "tora")
	{
		$query .= "title LIKE '%$searchbooksdata%' OR author LIKE '%$searchbooksdata%'";
	} else if ($searchbooksby === "tanda")
	{
		$query .= "title LIKE '%$searchbooksdata%' AND author LIKE '%$searchbooksdata%'";
	} else
	{
		$query .= "isbn LIKE '%$searchbooksdata%' OR title LIKE '%$searchbooksdata%' OR author LIKE '%$searchbooksdata%'";
	}
	$query .= " AND categoryid='$searchbookscategoryid'";

	$result = mysql_query($query) OR DIE ("Error searching for books.");
	if (mysql_num_rows($result) > 0)
	{
		echo '<table border="0" cellpadding="3" cellspacing="2" style="border: 1px solid black;">';
		echo '<tr style="text-align: left;"><th>ISBN</th><th>Title</th><th>Author</th><th>Book Category</th></tr>';
		while ($row = mysql_fetch_array($result))
		{
			$id = $row["id"];
			$isbn = $row["isbn"];
			$author = $row["author"];
			$title = $row["title"];
			$categoryname = getCategoryName($row["categoryid"]);
			echo '<tr><td>'.$isbn.'</td>';
			echo '<td>'.myWrap($title, 40, '<br />').'</td>';
			echo '<td>'.$author.'</td>';
			echo '<td>'.$categoryname.'</td>';
			echo '<td><a href="editbooks.php?id='.$id.'">Edit</a></td>';
			echo '</tr>';
		}
		echo '</table>';
	} else
	{
		echo '<p><span style="color: red;">No matches.</span></p>';
	}
	dbclose();

} else if (isset($_POST["searchallbookssubmit"]))
{
	$searchbooksdata = $_POST["searchbooksdata"];
	$searchbooksby = $_POST["searchbooksby"];
	$searchbookscategoryid = $_POST["searchbookscategoryid"];

	dbconnect();
	$query = "SELECT * FROM books WHERE ";
	if ($searchbooksby === "isbn")
	{
		$query .= "isbn LIKE '%$searchbooksdata%'";
	} else if ($searchbooksby === "tora")
	{
		$query .= "title LIKE '%$searchbooksdata%' OR author LIKE '%$searchbooksdata%'";
	} else if ($searchbooksby === "tanda")
	{
		$query .= "title LIKE '%$searchbooksdata%' AND author LIKE '%$searchbooksdata%'";
	} else
	{
		$query .= "isbn LIKE '%$searchbooksdata%' OR title LIKE '%$searchbooksdata%' OR author LIKE '%$searchbooksdata%'";
	}

	$result = mysql_query($query) OR DIE ("Error searching for books.");
	if (mysql_num_rows($result) > 0)
	{
		echo '<table border="0" cellpadding="3" cellspacing="2" style="border: 1px solid black;">';
		echo '<tr style="text-align: left;"><th>ISBN</th><th>Title</th><th>Author</th><th>Book Category</th></tr>';
		while ($row = mysql_fetch_array($result))
		{
			$id = $row["id"];
			$isbn = $row["isbn"];
			$author = $row["author"];
			$title = $row["title"];
			$categoryname = getCategoryName($row["categoryid"]);
			echo '<tr><td>'.$isbn.'</td>';
			echo '<td>'.myWrap($title, 40, '<br />').'</td>';
			echo '<td>'.$author.'</td>';
			echo '<td>'.$categoryname.'</td>';
			echo '<td><a href="editbooks.php?id='.$id.'">Edit</a></td>';
			echo '</tr>';
		}
		echo '</table>';
	} else
	{
		echo '<p><span style="color: red;">No matches.</span></p>';
	}
	dbclose();
}
?>
</fieldset>

</body>
</html>

 

DB stucture:

--books--

id

categoryid

isbn

type

author

title

edition

desc

copies

 

--categories--

id

name

desc

Link to comment
https://forums.phpfreaks.com/topic/80013-solved-search-form-logic/
Share on other sites

I think I figured it out. I just change the corresponding part to this:

<?php
$query = "SELECT * FROM books WHERE ";
if ($searchbooksby === "isbn")
{
$query .= "isbn LIKE '%$searchbooksdata%' AND ";
} else if ($searchbooksby === "tora")
{
$query .= "title LIKE '%$searchbooksdata%' OR author LIKE '%$searchbooksdata%' AND ";
} else if ($searchbooksby === "tanda")
{
$query .= "title LIKE '%$searchbooksdata%' AND author LIKE '%$searchbooksdata%' AND ";
}
$query .= "categoryid='$searchbookscategoryid'";
?>

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.