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

    PHP에서 수있는 방법을 찾으려고 노력하고 하나의 SQL 문 여러 드롭 다운 상자에서 데이터를 결합하십시오. 나는 이것이 부분적으로 작동하도록 할 수있다.mysqli 쿼리 부분적으로 작동

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

    $bird, $cat 등 각 드롭 다운 상자에서 선택을 보유하고있는 변수 : 여기에 SQL 쿼리입니다. 결과가 서로 다릅니다. 4 개 모두 잘 작동하며 모두 모두 개별적으로 작동합니다.

    그래서 작가, 장르, 연도 및 출판사 중에서 선택하고 작동 선택을 선택하면 이들을 개별적으로 선택하면 잘 작동합니다.

    하지만 두 항목 만 선택하면 저자 및 연도를 가정 해 봅시다. 은 작동하지 않으며 다양한 잘못된 데이터를 생성 할 수 있습니다. 다음은 완전한 코드입니다. 어떤 도움을 주시면 감사 :

    <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 년 ...'. 필요에 따라 콤보가 선택되지 않은 경우 와일드 카드를 채워서 장르를 허용하려면 'AND genre ='% '...'로 설정해야합니다. – topshot

    +2

    확인 : http://stackoverflow.com/questions/14540135/how-to-create-a-dynamic-where-clause – SandroMarques

    답변

    0

    제외하고는 사실에서 당신이 MySQL로 연결하는 사용되지 않는 방법을 사용하고 있는지, 당신은 당신의 코드에서 모든 사용 사례를 커버하지 않는 (SQL 주입 및 PDO에 읽어).

    더 좋은 방법은 기본 쿼리 ($q = 'SELECT * FROM books WHERE)를 작성하고 해당 추가 WHERE 절을 매개 변수가 비어 있는지 확인 (if (!empty($goat)) // append new clause to the WHERE portion)하여 확장하는 것입니다.

    0

    검색어가 절반 만 좋습니다. 당신의 선언이 당신의 문제의 원인입니다! 그 이유는 본질적으로 다음과 같이 수행하고 있기 때문입니다.

    genre ='adventure' and year = null. 
    

    원하는대로 그에 따라 편집하십시오. 그래서 할거야

    if (!is_null($year)) { 
    
        $sql.= "AND Year = $year"; 
    
    } 
    

    위의 방법으로 주입이 가능합니다. 당신이 걱정된다면 큰 문제가 될 것입니다 !!!!

    은 그래서 당신은 각을 만들 필요가 bind_params를 사용하지만 bind_params에 cal_user_func_array를 호출하면 효과적으로

    관련 문제