Jump to content

Search page not working properly


trac26

Recommended Posts

Hi I have a search page that is not working. Can anyone tell me how I can fix my code below to make it work?
Thank You

<?php 
require_once "../db/connect.php"; 

// make link here 
$link = $db->_impl; 

// Check connection 
if (mysqli_connect_errno()) 
  { 
  echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
  } 
?> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta name="keywords" content="" /> 
<meta name="description" content="" /> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<title>Employee</title>link href="style.css" rel="stylesheet" type="text/css" media="screen" /> 

</head> 

<body> 
<div id="wrapper"><!-- end #header --> 
    <div id="menu-wrapper"> 
        <div id="menu"> 
          <ul> 
                <li><a href="index.php">Home</a></li> 
                <li><a href="TDBOE.php">Department</a></li> 
                <li><a href="contact.php">Contact</a></li> 
                <li class="current_page_item"><a href="search.php">Search</a></li> 
                <li><a href="#"> </a></li> 
                <li><a href="#"> </a></li> 
                <li><a href="#"> </a></li> 
                <li><a href="#"> </a></li> 
                <li><a href="logout.php">Logout</a></li> 
            </ul> 
        </div> 
    </div> 
    <!-- end #menu --> 
    <div id="page"> 
        <div id="page-bgtop"> 
            <div id="page-bgbtm"> 
                <div id="page-content"> 
                    <div id="content"> 
                        <div class="post"> 
                            <h2 class="title">Search Proposals:</h2> 
                            <p> </p> 
                            <p>Enter a proposal name below to search...</p> 

                    <!-- search --> 
                    <div class="search"> 
                    <form method="get" id="searchform" action="search.php"> 
                    <input type="hidden" name="searching" value="yes" /> 
                    <input type="text" value = "Search here..." name="search" id="search" /> 
                    <input type="submit" id="searchSubmit" name="searchSubmit" value= "Find" /> 
                    </form> 
                    </div> 
                    <!-- ENDS search --> 

                    <?php 


                    //error handling//////////// 
                    //If they did not enter a search term, show an error 
                     if ($search == "") 
                     { 
                     echo "<p>You forgot to enter a search term"; 
                     exit; 
                     } 

                     //entered a value, show results 
                     //Only displayed if they have submitted the form 
                     if ($searching == "yes") 
                     { 
                     echo "<h2>Results:</h2><p>"; 
                     } 

                    $sql = 'SELECT * FROM PROPOSALS p WHERE p.Name LIKE '%$searchSubmit%''; 

                    $result = mysqli_query($link, $sql); 

                    //if no matches in DB 
                     $matches=mysql_num_rows($data); 
                     if ($matches == 0) 
                     { 
                     echo "Sorry, but we can not find an entry to match your query<br><br>"; 
                     } 

                    while ($row = mysqli_fetch_array($link,    $sql)) 
                    { 
                    echo " SEARCH RETURNED RESULTS! "; 
                    } 

                    ?> 
 

                        <div class="post"> 
                            <h2 class="title"> 
</h2> 
                            <p class="meta"> 

                          </div> 
                        <div style="clear: both;"></div> 
                    </div> 
                    <!-- end #content --> 

                </div> 
            </div> 
        </div> 
    </div> 
    <!-- end #page --> 
</div> 
<div id="footer"> 

</div> 
<!-- end #footer --> 
</body> 
</html> 
Link to comment
Share on other sites

1.  First off you should not require once your database connection.  You should close the connection after your done using it to free up the server. 

2.  Your form method is "get".  I'd use "post".

3.  Your sql statement says '%$searchSubmit%' but you never told it what that variable was.  Right above that line write in

$searchSubmit = $_POST['searchSubmit'];

 

I think that's about it.

Don't forget to mark me as Solved if it worked.

Link to comment
Share on other sites

1. First off you should not require once your database connection. You should close the connection after your done using it to free up the server.

1. Most web-page scripts are very short lived, and should connect to the database only once. The delay caused by opening a connection (a second or third time) is more significant than the savings of closing it between queries. Keep in mind that the Database server is NOT going to immediately release the connection anyway; so closing it can actually cause the database server to do more work managing connections than it will save in resources. PHP will automatically close the connection when the script ends if you don't do it in code.

 

2. Your form method is "get". I'd use "post".

2. It is generally true that forms will POST data. However, the W3 specification says use POST for "actions" -- things that change data (i.e. add a record), and use GET for "requests" -- things that ask for data. True, if there are a significant number for fields, or size of data, POST is a better choice over filling the URL with data; however, I have written search forms to use GET, especially in cases where I might want to use a link on another page to go directly to specific search results. It simplifies the coding and prevents the need for two scripts that do essentially the same thing.

 

3. Your sql statement says '%$searchSubmit%' but you never told it what that variable was. Right above that line write in

$searchSubmit = $_POST['searchSubmit'];

3. You are spot on about the $searchSubmit never having been assigned. In addition, the OP is using single quotes around the SQL statement, so the variable is not going to be interpreted. Also, the other single-quotes inside the string are going to cause a query error, since the first one will prematurely end the query. It should be:

$sql = "SELECT * FROM PROPOSALS p WHERE p.Name LIKE '%$searchSubmit%'";

 

4. OP: You need to shift your thought process slightly. Each page request is a separate activity. Putting the search (database) logic AFTER the form shows the implied sequence of events; but when the form is submitted it is a new run of the script. The best approach is to put all of the PHP logic at the top of the script, collecting the data you need. Then the only PHP in the HTML output is to echo the data you have collected. Something along these lines:

 

a. Connect to database
b. IF THE FORM WAS SUBMITTED
  1. Validate the search criteria (i.e. it cannot be empty, etc)
  2. If valid, SELECT the data to be displayed - store it in an array
c. Output the HTML to display the form
  1. ECHO the data from the PHP array in the appropriate places
Link to comment
Share on other sites

So this code is more organized, but I still receive an error on this line: if( isset($_GET['search'])

 

. Here is the updated code:

<?php
require_once "../db/connect.php";

// make link here
$link = $db->_impl;

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Employee</title>
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />

</head>

<body>
<div id="wrapper"><!-- end #header -->
	<div id="menu-wrapper">
		<div id="menu">
		  <ul>
				<li><a href="index.php">Home</a></li>
				<li><a href="department.php">department</a></li>
				<li><a href="contact.php">Contact</a></li>
                <li class="current_page_item"><a href="search.php">Search</a></li>
                <li><a href="#"> </a></li>
                <li><a href="#"> </a></li>
                <li><a href="#"> </a></li>
                <li><a href="#"> </a></li>
                <li><a href="logout.php">Logout</a></li>
			</ul>
		</div>
	</div>
	<!-- end #menu -->
	<div id="page">
		<div id="page-bgtop">
			<div id="page-bgbtm">
				<div id="page-content">
					<div id="content">
						<div class="post">
							<h2 class="title">Search document:</h2>
							<p> </p>
							<p>Enter a document name below to search...</p>

                    <!-- search -->
                    <div class="search">
					<form method="get" id="searchform" action="search.php">
                    <input type="hidden" name="searching" value="yes" />
                    <input type="text" value = "Search here..." name="search" id="search" />
                    <input type="submit" id="searchSubmit" name="searchSubmit" value= "Find" />
					</form>
					</div>
					<!-- ENDS search -->

                    <?php


					/*
						Where are you accessing the $_GET[] array for the $search or $searching results?

						if(isset($_POST['upload']))
						{
							$fileName = $_FILES['userfile']['name'];
							$tmpName  = $_FILES['userfile']['tmp_name'];
							$fileSize = $_FILES['userfile']['size'];
							$fileType = $_FILES['userfile']['type'];

							$fp      = fopen($tmpName, 'r');
							$content = fread($fp, filesize($tmpName));
							$content = addslashes($content);
							fclose($fp);

							if(!get_magic_quotes_gpc())
							{
							    $fileName = addslashes($fileName);
							}

							$query = "INSERT INTO TDBOE (Description, name,size, data ) ".
							"VALUES ('THIS IS A TEST', '$fileName', '$fileSize', '$fileType', '$content')";

							mysqli_query($link, $query) or die('Error, query failed');

							echo "<br>File $fileName uploaded<br>";
						}

						if( isset($_GET['search'])
						{
							$search = $_GET['search'];

							if ($search == "")
							{
								echo "<p>No search criteria specified</p>";
								exit;
							}

							echo "<h2>Results:</h2><p>";

							$sql = 'SELECT * FROM PROPOSALS p WHERE p.Name LIKE '%$search%'';

							$result = mysqli_query($link, $sql);

							//if no matches in DB
							$matches=mysqli_num_rows($data);

							if ($matches == 0)
							{
								echo "Sorry, but we can not find an entry to match your query<br><br>";
							}

							while ($row = mysqli_fetch_array($link,	$result))
							{
								echo " SEARCH RETURNED RESULTS! ";
							}
						}
					}
					*/
					?>

					?>


						<div class="post">
							<h2 class="title">
</h2>
							<p class="meta">

						  </div>
						<div style="clear: both;"></div>
					</div>
					<!-- end #content -->

				</div>
			</div>
		</div>
	</div>
	<!-- end #page -->
</div>
<div id="footer">

</div>
<!-- end #footer -->
</body>
</html>

Edited by trac26
Link to comment
Share on other sites

I see 3 errors in your php code. What editor are you using, is it a notepad?

if(isset($_POST['upload']))
						{
							$fileName = $_FILES['userfile']['name'];
							$tmpName  = $_FILES['userfile']['tmp_name'];
							$fileSize = $_FILES['userfile']['size'];
							$fileType = $_FILES['userfile']['type'];

							$fp      = fopen($tmpName, 'r');
							$content = fread($fp, filesize($tmpName));
							$content = addslashes($content);
							fclose($fp);

							if(!get_magic_quotes_gpc())
							{
							    $fileName = addslashes($fileName);
							}

							$query = "INSERT INTO TDBOE (Description, name,size, data ) ".
							"VALUES ('THIS IS A TEST', '$fileName', '$fileSize', '$fileType', '$content')";

							mysqli_query($link, $query) or die('Error, query failed');

							echo "<br>File $fileName uploaded<br>";
						}

						if( isset($_GET['search']) // wrong
						{
							$search = $_GET['search'];

							if ($search == "")
							{
								echo "<p>No search criteria specified</p>";
								exit;
							}

							echo "<h2>Results:</h2><p>";

							$sql = 'SELECT * FROM PROPOSALS p WHERE p.Name LIKE '%$search%'';

							$result = mysqli_query($link, $sql);

							//if no matches in DB
							$matches=mysqli_num_rows($data);

							if ($matches == 0)
							{
								echo "Sorry, but we can not find an entry to match your query<br><br>";
							}

							while ($row = mysqli_fetch_array($link,	$result))
							{
								echo " SEARCH RETURNED RESULTS! ";
							}
						} // extra curly brace 
                                      ?> // extra php closing tag 
?>

Try this:

<?php

if (isset($_POST['upload'])) {
    $fileName = $_FILES['userfile']['name'];
    $tmpName = $_FILES['userfile']['tmp_name'];
    $fileSize = $_FILES['userfile']['size'];
    $fileType = $_FILES['userfile']['type'];

    $fp = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);

    if (!get_magic_quotes_gpc()) {
        $fileName = addslashes($fileName);
    }

    $query = "INSERT INTO TDBOE (Description, name,size, data ) " .
            "VALUES ('THIS IS A TEST', '$fileName', '$fileSize', '$fileType', '$content')";

    mysqli_query($link, $query) or die('Error, query failed');

    echo "<br>File $fileName uploaded<br>";
}

if (isset($_GET['search'])) {
    $search = $_GET['search'];
    echo $search;
    exit;
    if ($search == "") {
        echo "<p>No search criteria specified</p>";
        exit;
    }

    echo "<h2>Results:</h2><p>";

    $sql = 'SELECT * FROM PROPOSALS p WHERE p.Name LIKE ' % $search % '';

    $result = mysqli_query($link, $sql);

    //if no matches in DB
    $matches = mysqli_num_rows($data);

    if ($matches == 0) {
        echo "Sorry, but we can not find an entry to match your query<br><br>";
    }

    while ($row = mysqli_fetch_array($link, $result)) {
        echo " SEARCH RETURNED RESULTS! ";
    }
} // close a php block of code ?>
Link to comment
Share on other sites

 

I see 3 errors in your php code. What editor are you using, is it a notepad?

if(isset($_POST['upload']))
						{
							$fileName = $_FILES['userfile']['name'];
							$tmpName  = $_FILES['userfile']['tmp_name'];
							$fileSize = $_FILES['userfile']['size'];
							$fileType = $_FILES['userfile']['type'];

							$fp      = fopen($tmpName, 'r');
							$content = fread($fp, filesize($tmpName));
							$content = addslashes($content);
							fclose($fp);

							if(!get_magic_quotes_gpc())
							{
							    $fileName = addslashes($fileName);
							}

							$query = "INSERT INTO TDBOE (Description, name,size, data ) ".
							"VALUES ('THIS IS A TEST', '$fileName', '$fileSize', '$fileType', '$content')";

							mysqli_query($link, $query) or die('Error, query failed');

							echo "<br>File $fileName uploaded<br>";
						}

						if( isset($_GET['search']) // wrong
						{
							$search = $_GET['search'];

							if ($search == "")
							{
								echo "<p>No search criteria specified</p>";
								exit;
							}

							echo "<h2>Results:</h2><p>";

							$sql = 'SELECT * FROM PROPOSALS p WHERE p.Name LIKE '%$search%'';

							$result = mysqli_query($link, $sql);

							//if no matches in DB
							$matches=mysqli_num_rows($data);

							if ($matches == 0)
							{
								echo "Sorry, but we can not find an entry to match your query<br><br>";
							}

							while ($row = mysqli_fetch_array($link,	$result))
							{
								echo " SEARCH RETURNED RESULTS! ";
							}
						} // extra curly brace 
                                      ?> // extra php closing tag 
?>

Try this:

<?php

if (isset($_POST['upload'])) {
    $fileName = $_FILES['userfile']['name'];
    $tmpName = $_FILES['userfile']['tmp_name'];
    $fileSize = $_FILES['userfile']['size'];
    $fileType = $_FILES['userfile']['type'];

    $fp = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);

    if (!get_magic_quotes_gpc()) {
        $fileName = addslashes($fileName);
    }

    $query = "INSERT INTO TDBOE (Description, name,size, data ) " .
            "VALUES ('THIS IS A TEST', '$fileName', '$fileSize', '$fileType', '$content')";

    mysqli_query($link, $query) or die('Error, query failed');

    echo "<br>File $fileName uploaded<br>";
}

if (isset($_GET['search'])) {
    $search = $_GET['search'];
    echo $search;
    exit;
    if ($search == "") {
        echo "<p>No search criteria specified</p>";
        exit;
    }

    echo "<h2>Results:</h2><p>";

    $sql = 'SELECT * FROM PROPOSALS p WHERE p.Name LIKE ' % $search % '';

    $result = mysqli_query($link, $sql);

    //if no matches in DB
    $matches = mysqli_num_rows($data);

    if ($matches == 0) {
        echo "Sorry, but we can not find an entry to match your query<br><br>";
    }

    while ($row = mysqli_fetch_array($link, $result)) {
        echo " SEARCH RETURNED RESULTS! ";
    }
} // close a php block of code ?>

So I tried this and I receive this error message: Parse error: syntax error, unexpected T_LNUMBER in /var/search.php on line 65

I am using a text editor: sublime text.

Edited by trac26
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.