2017-11-30 1 views
0

これは曲の検索フィールドであるはずです。例えば ​​"o"のような単一の文字を検索すると、結果は任意の位置に文字 "o"を含む曲です。たとえば、「oo」のような複数の文字を検索すると、タイトルに「oo」という曲があるにもかかわらず、結果が全く得られません。入力変数に1文字以上の文字が含まれていると、結果が表示されないのはなぜですか?

<?php 
include 'conn.php'; 

if (isset($_POST['submitsearch'])){ 
    $search=$_POST['search']; 
    $query2 = "select * from songs where Title LIKE '%".$search."%'"; 

    $result2 = mysqli_query($connection, $query2); 

    $row = mysqli_fetch_array($result2, MYSQLI_ASSOC); 
    while($row = mysqli_fetch_array($result2, MYSQLI_ASSOC)){ 
     echo $row['Title']; 
    } 
} 
+0

$変数と演算子LIKE [の可能性のある重複](https://stackoverflow.com/questions/1843640/like-operator-with-variable) –

+1

あなたが '' 'AND(SELECT LEFT( ' 1)FROM 'users' WHERE' id' = 1)= 'A' AND '''?回答:すべての曲ですが、管理者のユーザ名がA(IDが1であることが前提)で始まる場合のみです。あなたがユーザー名全体の文字を見つけるまで繰り返す。あなたがパスワードを見つけられるまで(うまくいけばハッシュですが、あなたが示したコードの品質を考えれば、おそらくそうではありません)、繰り返します。あなたのウェブサイトをPwnしてください。 –

答えて

4

ooという行が1つしかない場合があります。 whileループをフェッチすると、結果セットの最初の行が常に失われます。それなし

てみてください。この

<?php 
include 'conn.php'; 

if (isset($_POST['submitsearch'])){ 
    $search=$_POST['search']; 
    $query2 = "select * from songs where Title LIKE '%".$search."%'"; 

    $result2 = mysqli_query($connection, $query2); 

    // gets first row and then does nothing with it 
    //$row = mysqli_fetch_array($result2, MYSQLI_ASSOC); 
    while($row = mysqli_fetch_array($result2, MYSQLI_ASSOC)){ 
     echo $row['Title']; 
    } 
} 

のようにあなたは、あなたのスクリプトがSQL Injection Attack の危険性があることも知っておくべきであってもif you are escaping inputs, its not safe! 使用prepared parameterized statements

関連する問題