2017-04-04 12 views
2

私はテーブル1〜5のような異なるテーブルをmysqlデータベースに持っています。私はドロップダウンテーブルのリストからそれを選択すると、各テーブルを表示するためのコードが必要です。私は以下を実行しようとすると、私は応答がなく、データはSQLからロードされませんでした。PHPでドロップダウンリストを使用して異なるmysqlテーブルを表示するには

<div> 
<form action="table1.php" method="GET"> 
<input list="name" name="name"> 
<datalist id="name"> 
    <option value="table 1"> 
    <option value="table 2"> 
    <option value="table 3"> 
    <option value="table 4"> 
    <option value="table 5"> 
</datalist> 
<input type="submit" name="search" value="search"> 
</form> 
</div> 

<div> 
<table width="600" border="0" cellpadding="1" cellspacing="1"> 
    <tr> 
     <th>Column 1</th> 
     <th>Column 2</th> 
     <th>Column 3</th> 
     <th>Column 4</th> 
    </tr> 
</table> 

PHPコードでは、選択値の変数を割り当ててプログラムに与えます。変数が定義されていないか、$ conn文で使用されていないというエラーが出ました。

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "sheet"; 
$tbname= $_GET['name']; 

if (isset($_GET['search'])) { 
    try { 
     $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $stmt = $conn->prepare("SELECT * FROM '$tbname'"); 
     $stmt->execute(); 

     $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 

     echo "<tr>"; 
     echo "<th>".$result['Column 1']."</th>"; 
     echo "<th>".$result['Column 2']."</th>"; 
     echo "<th>".$result['Column 3']."</th>"; 
     echo "<th>".$result['Column 4']."</th>"; 
     echo "</tr>"; 
    } 
    catch(PDOException $e) { 
     echo "Error: " . $e->getMessage(); 
    } 
    $conn = null; 
    echo "</table>"; 
} 
+0

テーブル名を引用しないでください。 "SELECT * FROM $ tbname" 'を試してください。 – miken32

+0

また、データベースに送信する前に、既知のテーブル名に一致する入力を確認することをお勧めします。 – miken32

+0

なぜ、ローカルのhtmlファイルからローカルのphpファイルに移動していれば、取得してポストしないのですか? – Gert

答えて

0

希望、

I少しあなたのコードの構造を変更し、DBから行を取得するfetchAll()メソッドが追加されました、fetch()メソッドを使用して、行を1行ずつ取得することもできます。最後に、最後にこれらの行を印刷します。

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "sheet"; 
$tbname= $_GET['name']; 
$results = array(); 

if (isset($_GET['search'])) { 
    try { 
     $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $stmt = $conn->prepare("SELECT * FROM `$tbname`"); 
     $stmt->execute(); 

     $stmt->setFetchMode(PDO::FETCH_ASSOC); 
     $results = $stmt->fetchAll();//Add this line to get db results 

    } catch(PDOException $e) { 
     echo "Error: " . $e->getMessage(); 
    } 
    $conn = null; 
} 
?> 

<div> 
    <form action="table1.php" method="GET"> 
     <input list="name" name="name"> 
     <datalist id="name"> 
      <option value="table 1"> 
      <option value="table 2"> 
      <option value="table 3"> 
     </datalist> 
     <input type="submit" name="search" value="search"> 
    </form> 
</div> 

<div> 
    <table width="600" border="0" cellpadding="1" cellspacing="1"> 
     <tr> 
      <th>Column 1</th> 
      <th>Column 2</th> 
      <th>Column 3</th> 
      <th>Column 4</th> 
     </tr> 
     <?php 
     if (is_array($results) && count($results)>0) { 
      foreach ($results as $result) { 
       echo "<tr>"; 
       echo "<td>".$result['Column 1']."</td>"; 
       echo "<td>".$result['Column 2']."</td>"; 
       echo "<td>".$result['Column 3']."</td>"; 
       echo "<td>".$result['Column 4']."</td>"; 
       echo "</tr>"; 
      } 
     } 
     ?> 
    </table> 
</div> 
+0

ありがとうプラサド。 –

3

テーブル名を一重引用符で間違えた場合は、代わりにバッククォートを使用する必要があります。

PHPコードに次の行が間違っている

$stmt = $conn->prepare("SELECT * FROM '$tbname'"); 

あなたがここでやったすべてのフェッチモードを設定されている、あなたが実際になかったこの

$stmt = $conn->prepare("SELECT * FROM `$tbname`"); 
+0

ありがとうジョシ。しかし、まだ私は応答もデータもデータベースからロードされません。 –

+0

sqlクエリを実行すると、sqlエラーが発生しますか?それをチェックして、データベース接続の設定が適切であることとそれらのテーブルにデータがあることを確認してください –

1

に変更する必要があります何かを取る。

変更:

$stmt->setFetchMode(PDO::FETCH_ASSOC); 

echo "<tr>"; 
echo "<th>".$result['Column 1']."</th>"; 
echo "<th>".$result['Column 2']."</th>"; 
echo "<th>".$result['Column 3']."</th>"; 
echo "<th>".$result['Column 4']."</th>"; 
echo "</tr>"; 

へ:このコードの意志があなたを助け

while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    echo "<tr>"; 
    echo "<th>".$result['Column 1']."</th>"; 
    echo "<th>".$result['Column 2']."</th>"; 
    echo "<th>".$result['Column 3']."</th>"; 
    echo "<th>".$result['Column 4']."</th>"; 
    echo "</tr>"; 
} 
+0

Augwa、次のエラーが発生しました 構文解析エラー:C:\ wamp64 \ wwwの構文エラー、予期しない 'catch'(T_CATCH) \ sample \ table1.php on line 74 –

+0

既に存在していた末尾の中括弧を削除しました。 'while(){...}'の閉じ括弧の後ろに別のものが必要です。 – Augwa

+0

コードの適切な書式設定は、そのような問題を防ぐのに役立ちます。私はあなたのPHPコードを適切にフォーマットするためにあなたの質問を編集しました。 – Augwa

関連する問題