Trying to search ID and Display selected information

本秂侑毒 提交于 2019-12-12 03:13:46

问题


I have made a search box so that you can enter the product id that you wish to gain the information of. When i input data in the product id box, there are no results returned, anyone know what im doing wrong? I think that 'while ($row = mysql_fetch_array($result)) {' is wrong but not too sure as everything ive tried didn't work.

  <div class="searchbox">
    <form action="Search.php" method="get">
       <fieldset>
       <input name="search" id="search" placeholder="Search for a Product" type="text" />
         <input id="submit" type="button" />
      </fieldset>
    </form>
 </div>
 <div id="content">
 <ul>        
 <?php

 // connect to the database
    include('base.php');


 $search = mysql_real_escape_string($_GET['search']);
 $query = "SELECT * FROM Product WHERE ProductID LIKE '%{$search}%'";
 $result = mysql_query($query); 
 while ($row = mysql_fetch_array($result)) {
 echo "<li><span class='name'><b>{$row['ProductID']}</b></span></li>";
 }

回答1:


Don't use mysql specific syntax, It's outdated and can get you into real trouble later on, especially if you decide to use sqlite or postgresql.

Use a PDO connection, you can init one like this:

// Usage:   $db = connectToDatabase($dbHost, $dbName, $dbUsername, $dbPassword);
// Pre:     $dbHost is the database hostname, 
//          $dbName is the name of the database itself,
//          $dbUsername is the username to access the database,
//          $dbPassword is the password for the user of the database.
// Post:    $db is an PDO connection to the database, based on the input parameters.
function connectToDatabase($dbHost, $dbName, $dbUsername, $dbPassword)
{
    try
    {
         return new PDO("mysql:host=$dbHost;dbname=$dbName;charset=UTF-8", $dbUsername, $dbPassword);
    }
    catch(PDOException $PDOexception)
    {
        exit("<p>An error ocurred: Can't connect to database. </p><p>More preciesly: ". $PDOexception->getMessage(). "</p>");
    }
}

And then init the variables:

$host = 'localhost';
$user = 'root';
$dataBaseName = 'databaseName';
$pass = '';

Now you can access your database via

$db = connectToDatabase($host , $databaseName, $user, $pass); // You can make it be a global variable if you want to access it from somewhere else.

Then you should make sure that you actually have the variable:

$search = isset($_GET['search']) ? $_GET['search'] : false;

So you can actually skip the database thing if something, somehow, fails.

if(!$search)
{
    //.. return some warning error.
}
else
{
    // Do what follows.
}

Now you should construct a query that can be used as a prepared query, that is, it accepts prepared statements so that you prepare the query and then you execute an array of variables that are to be put executed into the query, and will avoid sql injection in the meantime:

$query = "SELECT * FROM Product WHERE ProductID LIKE :search;"; // Construct the query, making it accept a prepared variable search.
$statement = $db->prepare($query); // Prepare the query.
$statement->execute(array(':search' => $search)); // Here you insert the variable, by executing it 'into' the prepared query.
$statement->setFetchMode(PDO::FETCH_ASSOC); // Set the fetch mode.

while ($row = $statement->fetch())
{
    $productId = $row['ProductID'];
    echo "<li class='name><strong>$productId</strong></li>";
}

Oh yes, don't use the b tag, it's outdated. Use strong instead (It's even smarter to apply font-weight: bold; to .name in a separate css file.

Feel free to ask questions if anything is unclear.




回答2:


remove the {} before and after $search.

should be:

$query = "SELECT * FROM Product WHERE ProductID LIKE '%$search%'";



回答3:


You can use:

$result = mysql_query($query) or die($query."<br/><br/>".mysql_error());

To confirm that the data is returning.



来源:https://stackoverflow.com/questions/15350105/trying-to-search-id-and-display-selected-information

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!