2016-04-15 35 views
0

PHPを使用してMySQLデータベースのための小さなWebインターフェイスを構築しています。 1つのタスクは、ユーザーが文字列をテキストフィールドに入力できるようにすることで、システムはその文字列をその名前に含むテーブルの名前を返す必要があります。しかし、私の問題は、Webインターフェイスに入力するたびに、デフォルトですべてのテーブル名が表示されることです。ここに私の完全なコードです。PHPでデフォルト値として結果が表示されない

<!DOCTYPE html> 
<html> 
<head> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
</head> 
<style> 
.error {color: #FF0000;} 
</style> 
<body> 

<h1>This is H1</h1> 

<?php 

$servername = "xxx"; 
$username = "xxx"; 
$password = xxx; 

// Create connection 
$conn = new mysqli($servername, $username, $password); 

// Check connection 
if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); 
} 

?> 

<?php 
$search = $searchErr = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["search"])) { 
     $searchErr = "Search keyword is required"; 
    } else { 
     $search = test_input($_POST["search"]); 
     if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
      $nameErr = "Only letters and white space allowed";} 
     } 
    } 

    function test_input($data) { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     return $data; 
    } 
?> 

<h2>Search Keyword</h2> 
<p><span class="error">* required field.</span></p> 
<form method="post" action="<?php echo  htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
Search: <input type="text" name="search" value="<?php echo $search;?>"> 
<span class="error">* <?php echo $searchErr;?></span> 
<br><br> 
<input type="submit" name="submit" value="Submit"> </form> 

<?php 
    echo '<h2> Search Result: </h2>'; 
    $searchSQL = "SELECT table_name FROM information_schema.tables 
        WHERE LOWER(table_name) LIKE LOWER('%$search%') 
        AND table_schema = 'xxx'"; 

    $result = $conn->query($searchSQL); 

    echo '<form method="POST" action="show_columns.php">'; // opening form tag 

    if ($result->num_rows > 0) { 
     // output data of each row 
     while($row = $result->fetch_assoc()) { 
      $table_name = $row['table_name']; 
      echo "<input type='submit' name='table_name' value='$table_name' /> <br/>"; 
     } 
    } else { 
     echo ' '; 
    } 

    echo '</form>'; // closing form tag 
?> 

</body> 
</html> 

たとえば、ウェブエンドに入るたびに、検索結果にすべてのテーブル名が表示されます。私はそれが検索キーワードとして空の文字列を取るかもしれないと仮定しますか?どのようにそれを回避するためのアイデア?前もって感謝します!

+2

mysqliを使用している場合は、プリペアドステートメントと['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用してコードを安全にしてください[SQLインジェクションのバグ](http://bobby-tables.com/)から。データベースクエリに 'stripslashes'と' htmlspecialchars'を使用することは正しいことではなく、データを損なう可能性があります。特に、 '$ _SERVER [" PHP_SELF "]'で正しく行うように、 'htmlspecialchars'は任意のデータを表示するためにのみ使用するべきです。 – tadman

+0

** A:** *シンプル、*クエリの前後で条件文を使用する必要があります。 –

+0

... 'if(condition){クエリを実行}' –

答えて

0

これは、クリーンな解決策ではないかもしれませんが、私は

if ($search!='') 
    {$result = $conn->query($searchSQL);} 
else {...} 
... 

を照会し、問題が解決された検索を実行する前に条件を追加します。あなたの提案をありがとう。

関連する問題