php
  • mysql
  • 2016-07-10 3 views -1 likes 
    -1

    PHPでという方法を見つけようとしていますが、いくつかのドロップダウンボックスのデータを1つのSQL文に結合しようとしています。私はこれを部分的に働かせることができます。mysqliクエリを部分的にしか実行しない

    $sql = " 
        SELECT * 
        FROM books 
        WHERE 
        author = '$bird' 
        AND genre = '$cat' 
        AND year= '$mouse' 
        AND publisher = '$goat' 
    "; 
    

    $bird$catなどが各ドロップダウンボックスから選択を保持する変数です:ここではSQLクエリです。 結果が混乱しています。 すべての4つはうまく連携し、すべてが個別に動作します

    だから私は著者、ジャンル、年および出版社から選択した場合は、それが動作し、私は個別にこれらを選択した場合、彼らは同様に動作選択キーを押します。

    しかし、2つの項目を選択してみると、著者と年と言うと、は機能せず、さまざまな間違ったデータを生成する可能性があります。ここに完全なコードがあります。すべてのヘルプ感謝:

    別にあなたがあなたのコード内のすべてのユースケースをカバーしていない、(SQLインジェクションとPDOをよく読んで)MySQLへの接続非推奨の方法を使用しているという事実から
    <html> 
        <head> 
         <title>My Page</title> 
        </head> 
        <body> 
         <br> 
         <form name="myform" action="authors3.php" method="POST"> 
          <select name="author" size="2"> 
          <option value="ken davies">ken davies</option> 
          <option value= "arthur smith">arthur smith</option> 
          <option value="gill rafferty">gill rafferty</option><br /> 
          <option value="molly brown">molly brown</option><br /> 
          <option value="gilbert riley">gilbert riley</option><br /> 
          <input type = "submit" name = "submit" value = "go"> 
    
          <select name="genre" size="4"> 
          <option value="adventure">adventure</option> 
          <option value="biography">biography</option> 
          <option value="crime">crime</option><br /> 
          <option value="romance">romance</option> 
          <option value="thriller">thriller</option> 
          <input type = "submit" name = "submit" value = "go"> 
    
          <select name="year" size="4"> 
          <option value="2002">2002</option> 
          <option value="2003">2003</option> 
          <option value="2004">2004</option> 
          <option value="2005">2005</option> 
          <option value="2006">2006</option> 
          <option value="2007">2007</option> 
          <option value="2008">2008</option> 
          <input type = "submit" name = "submit" value = "go"> 
    
          <select name="publisher" size="4"> 
          <option value="blue parrot">blue parrot</option> 
          <option value="yonkers">yonkers</option> 
          <option value="zoot">zoot</option> 
          <input type = "submit" name = "submit" value = "go"> 
    
           <?php 
            $bird = (!empty($_POST['author'])) ? $_POST['author'] : null; 
            $cat = (!empty($_POST['genre'])) ? $_POST['genre'] : null; 
            $mouse = (!empty($_POST['year'])) ? $_POST['year'] : null; 
            $goat = (!empty($_POST['publisher'])) ? $_POST['publisher'] : null; 
    
            $con = mysql_connect("localhost","root",""); 
            If (!$con) { 
             die("Can not Connect with database" . mysql_error()); 
            } 
            mysql_select_db("authors",$con); 
    
    
            if (isset($bird) && isset($cat) && isset($mouse) && isset($goat)){ 
             $sql = "SELECT * FROM books WHERE author = '$bird' 
               AND genre = '$cat' AND year = '$mouse' AND 
               publisher = '$goat' "; 
            } 
            else if (isset($bird)) { 
             $sql = "SELECT * FROM books WHERE author = '$bird' "; 
            } 
            else if (isset($cat)) { 
             $sql = "SELECT * FROM books WHERE genre = '$cat' "; 
            } 
            else if (isset($mouse)) { 
             $sql = "SELECT * FROM books WHERE year = '$mouse' ";  
            }  
            else if (isset($goat)) { 
             $sql = "SELECT * FROM books WHERE publisher = '$goat' ";  
            } 
    
            $myData = mysql_query($sql,$con); 
    
            echo"<table border=1> 
    
            <tr> 
             <th>id</th> 
             <th>author</th> 
             <th>title</th> 
             <th>publisher</th> 
             <th>year</th> 
             <th>genre</th> 
             <th>sold</th> 
            </tr>"; 
    
            while($record = mysql_fetch_array($myData)){ 
             echo "<tr>"; 
             echo "<td>" . $record['id'] . "</td>"; 
             echo "<td>" . $record['author'] . "</td>"; 
             echo "<td>" . $record['title'] . "</td>"; 
             echo "<td>" . $record['publisher'] . "</td>"; 
             echo "<td>" . $record['year'] . "</td>"; 
             echo "<td>" . $record['genre'] . "</td>"; 
             echo "<td>" . $record['sold'] . "</td>"; 
             echo "<tr />"; 
            } 
            echo "</table>"; 
    
            mysql_close($con); 
           ?> 
           note: all four are working<br /> 
           all work individually<br /> 
           two or three dont work together 
         </form> 
        </body> 
    </html> 
    
    +0

    あなたのパラメータを管理することができPDOを使用してお勧めしますので、 where句の一部が必須でない場合は条件付きです。今すぐジャンルが選択されていない場合、あなたの選択は 'WHERE author = 'x' AND genre = ''(または何もありません)AND ...'必要なところで 'WHERE author = 'を推測していますx 'AND year ...あなたの必要性に応じて、コンボが選択されていない場合は、任意のジャンルを許可するために 'AND 'genre ='% '...'にするためにワイルドカードを記入する必要があります。 – topshot

    +2

    これを確認してください:http://stackoverflow.com/questions/14540135/how-to-create-a-dynamic-where-clause – SandroMarques

    答えて

    0

    基本クエリ($q = 'SELECT * FROM books WHERE)を作成し、パラメータが空であるかどうかをチェックすることに基づいて、適切な余分なWHERE句でクエリを拡張することが良い方法です(if (!empty($goat)) // append new clause to the WHERE portion)。

    0

    あなたはクエリが半分です。あなたの宣言があなたの問題の原因です!理由は本質的にこれをやっているからです:

    genre ='adventure' and year = null. 
    

    あなたがしたいのは、それに応じてクエリを編集することです。だからあなたはしたいでしょう

    上記の方法は注入が可能です。あなたが大騒ぎしている場合は、大きな問題です!!!!

    だから私はbind_paramsを使用することをお勧めだろうが、bind_paramsにcal_user_func_arrayの呼び出しは少しトリッキーであることを言った私はあなたがそれぞれを作成する必要があり、あなたのクエリを編集して、安全かつ効果的に

    関連する問題