【问题标题】:Search facility results PhP搜索设施结果 PhP
【发布时间】:2015-11-22 06:19:10
【问题描述】:

好的,所以问题很简单,基本上当您输入“W”时,它应该输出包含该字符的酒店名称和客人的姓氏。这不是酒店的名称,但无论我输入什么,它都不会为我提供客人的输出。应该出现几个匹配的客人,但我什么也没得到。我的代码看不到任何错误...帮助。

<!DOCTYPE html>
<html>
    <head>
        <title>Database</title>
        <link href="style.css" rel="stylesheet" type="text/css"> <!-- This is linking style sheet (css)into this HTML page-->
        <link href='https://fonts.googleapis.com/css?family=PT+Serif:400italic' rel='stylesheet' type='text/css'>
    </head>
    <body>
    <div class="navigation">
        <form action="index.php" method="get">
            <input type="submit" name="mainpage" value="Main Page" class="submitbut" id="but1" />
        </form>
    </div>
    <form action="index.php" method="post">
        <input type="text" name="search" id="searching" />
        <input type="submit" name="data_submit" value="Search" id="scan" />
    </form>

<?php
if( isset( $_GET['mainpage'] ) ) exit( header( "Location: mainpage.php" ) );

if ( isset( $_POST["data_submit"] ) ){

$search_term = strip_tags( trim( $_POST['search'] ) );
$conn = new PDO( 'mysql:host=localhost;dbname=u1358595', 'root' );

$stmt = $conn->prepare("SELECT * FROM `hotel` h
                        INNER JOIN `booking` b ON h.`hotel_id`=b.`hotel_id`
                        INNER JOIN `guest` g ON g.`guest_id`=b.`guest_id`
                        WHERE `name` LIKE :search_term;");
$stmt->bindValue(':search_term','%' . $search_term . '%');
$stmt->execute();


    echo "
    <table>
    <tr>  
    <th>Hotels Matched</th>
    </tr>";

while($hotel = $stmt->fetch()) {
    echo "
    <tr>
    <td><a href='details.php?name=".$hotel['name']."'>".$hotel['name']."</a></td>
    </tr>";
    }
    echo "</table>";

$stmt = $conn->prepare("SELECT * FROM `guest` g
                        INNER JOIN `booking` b  ON g.`guest_id`=b.`guest_id`
                        INNER JOIN hotel ON b.`hotel_id`=h.`hotel_id`
                        WHERE g.`last_name` LIKE :search_term;");
$stmt->bindValue(':search_term', '%' . $search_term . '%');
$stmt->execute();

    echo "
    <table>
    <tr>  
    <th>Guests Matched</th>
    </tr>";

while($hotel = $stmt->fetch()) {
    echo "
    <tr>
    <td><a href='details.php?name=".$hotel['first_name']."'>".$hotel['last_name']."</a></td>
    </tr>";
}
echo "</table>";
$conn = NULL;
}
?>
</body>
</html>

【问题讨论】:

  • 你的表单方法是 GET (
    ) 但你的索引是 POST (if ( isset( $_POST["data_submit"] ))
  • 按钮是get,但文本框和按钮有另一种形式
  • 对您想要发布的所有输入仅使用一个表单。否则为空。
  • 好吧,所有的输入都在一种形式中,所以它是文本框和提交按钮,在它上面我只有一个超链接,但需要是 GET
  • 删除或注释掉第一个表单并重试,如果有任何错误,请告诉我们,您也可以像这样将按钮包裹在链接周围

标签: php html mysql pdo


【解决方案1】:

使用带有 LIKE 的 PDO 准备语句首先准备 FULL 文字。请参阅PDO Wiki 即。

$name = "%$name%";

我已使用一个查询简化了您的代码。我已经在 2 个表上进行了测试,您需要 JOIN 其他表

<!DOCTYPE html>
<html>
<head>
    <title>Database</title>

</head>
<body>
<form action="index.php" method="post">
    <input type="text" name="search" id="searching" />
    <input type="submit" name="data_submit" value="Search" id="scan" />
</form>
<?php
$host= "localhost";
$username="XXXX";
$password="XXXX";
$database="XXXX";
function writeTable($host,$database, $username, $password,$search_term) {
//Create query
    $sql = "SELECT hotel.name AS hotel, guest.name AS guest
        FROM `hotel`
        LEFT JOIN `guest` ON hotel.guest = guest.id
        WHERE hotel.name LIKE ?
    OR guest.name LIKE ?
";
$html = '<table cellpadding="1" cellspacing="1">'. "\n";
//array for column names
$columnNames = array("hotel","guest"); 
//table header
$html .= '<tr>';
foreach ($columnNames as $value){
    $html .= '<th>' . $value . '</th>';
}
$html .= '</tr>'. "\n";   
// connect to the database  
$db = new PDO("mysql:host=$host;dbname=$database", $hotelname, $password);  
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
//Prepare and execute query 
$stmt = $db->prepare($sql);
$stmt->execute(array($search_term,$search_term));
// setting the fetch mode  
$stmt->setFetchMode(PDO::FETCH_ASSOC);  
//Add content
while($row = $stmt->fetch()) { 
    $html .= '<tr>';
    $html .= '<td>' . $row['hotel'] . '</td>';
    $html .= '<td>' . $row['guest'] . '</td>';
    $html .= '</tr>'. "\n";
}
$html .= '</table>';
echo $html;
// close the connection
$dbh = null;
}  

$search = strip_tags(trim($_POST['search'] ) );
if(isset($search) ){
    if ($search != ''){
        $search_term = '%'.$search.'%';
    }else{
        $search_term ='';
    }

}   
writeTable($host,$database, $hotelname, $password,$search_term);

?>

你应该可以修改以适应。

【讨论】:

  • 好的,我会试一试并在我让它工作后更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
相关资源
最近更新 更多