trac26 Posted May 7, 2013 Share Posted May 7, 2013 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> Quote Link to comment Share on other sites More sharing options...
RonnieCosta50 Posted May 7, 2013 Share Posted May 7, 2013 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. Quote Link to comment Share on other sites More sharing options...
DavidAM Posted May 7, 2013 Share Posted May 7, 2013 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 Quote Link to comment Share on other sites More sharing options...
jazzman1 Posted May 7, 2013 Share Posted May 7, 2013 You messed up mysql_* with mysqli_* functions. Quote Link to comment Share on other sites More sharing options...
computermax2328 Posted May 7, 2013 Share Posted May 7, 2013 (edited) You use a mysqli_query but a mysql_num_rows. Use mysqli_num_row $matches=mysql_num_rows($data); **EDIT: Woop Jazzman1! I must have posted right after you. Edited May 7, 2013 by computermax2328 Quote Link to comment Share on other sites More sharing options...
trac26 Posted May 7, 2013 Author Share Posted May 7, 2013 (edited) Thanks for the tips. I am working on it now and will mark solved if it works. Edited May 7, 2013 by trac26 Quote Link to comment Share on other sites More sharing options...
trac26 Posted May 7, 2013 Author Share Posted May 7, 2013 (edited) 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 May 7, 2013 by trac26 Quote Link to comment Share on other sites More sharing options...
jazzman1 Posted May 7, 2013 Share Posted May 7, 2013 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 ?> Quote Link to comment Share on other sites More sharing options...
trac26 Posted May 7, 2013 Author Share Posted May 7, 2013 (edited) 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 May 7, 2013 by trac26 Quote Link to comment Share on other sites More sharing options...
litebearer Posted May 7, 2013 Share Posted May 7, 2013 Aside... four columns, five values: </pre> <ul>$query = "INSERT INTO TDBOE (Description, name,size, data ) " ."VALUES ('THIS IS A TEST', '$fileName', '$fileSize', '$fileType', '$content')";</ul> < 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.