2017-12-10 3 views
0

最後の質問はここに1週間!私はこのものから休憩を取る必要があります。私はwhileループで使用されるユーザーデータを抽出するためにクエリを実行しようとしています。最初のクエリは、$ _POSTに関係なく実行される(または実行される)デフォルトのクエリです。 2番目のクエリは、ViewAllFriendsボタンが送信されたときにのみ実行されます。ここに私が書いているものは次のとおりです。

<form action="" method="POST"> 
       <div class="panel panel-default friends"> 
        <div class="panel-heading"> 
          <h3 class="panel-title"><?php echo "<h4 style='font-family:Maven Pro;'>Friends of: <a href='" . $username ."'>" . $profile_user_obj->getFirstAndLastName() . "</a></h4><hr>"; ?></h3> 

     <?php 
       global $con; 
       $username = $_GET['profile_username']; 

       //Default query limits results to 5 
       $query = mysqli_query($con,"SELECT * FROM users WHERE friend_array LIKE '$username,%' OR friend_array LIKE '%,$username,%' OR friend_array LIKE '%,$username' LIMIT 0,5"); 

       //Query to run if button ViewAllFriends submitted 
       if(isset($_POST['ViewAllFriends'])) { 
        $query = mysqli_query($con,"SELECT * FROM users WHERE friend_array LIKE '$username,%' OR friend_array LIKE '%,$username,%' OR friend_array LIKE '%,$username'");    

     ?> 
         <div> 
          <div class="panel-body"> 
          <ul> 
       <?php 
        while ($row = mysqli_fetch_array($query)) { 
        $friends = $row['profile_pic']; 
        $friend_username = $row['username']; 
       ?> 
           <li><a class="thumbnail pull-left" href="<?php echo $friend_username; ?>"><img src="<?php echo $friends; ?>" title="<?php echo $friend_username; ?>"></a></li><?php } } ?> 
          </ul> 
          <div class="clearfix"></div> 
          <input class="btn btn-default" type="submit" id="ViewAllFriends" name="ViewAllFriends" value="View All Friends"> 
          </div> 
         </div>  
        </div><!-- End Panel Heading --> 
       </div><!-- End Panel Friends --> 
      </form> 

今、最初のクエリは実行されません。IOWのプロファイル写真は表示されません。しかし、私はすべての友達を表示ボタンを提出すると、すべてのプロフィール写真が表示されます。私は最初のクエリをデフォルトとして実行する方法を評価する方法がわかりません。私は次のように試した:

しかし、これは2番目のクエリがユーザーアクションに依存するので、正しいロジックではないelseステートメントになります。

これについての助力は本当に感謝します。ありがとうございました!

+0

SQLインジェクション攻撃を避けるために、クエリ内にvarsを記述するのではなく、プリペアドステートメントを使用する必要があります – jeprubio

答えて

0
global $con; 
$username = $_GET['profile_username']; 

if(isset($_POST['ViewAllFriends'])) { 
    //Query to run if button ViewAllFriends submitted 
    $query = mysqli_query($con,"SELECT * FROM users WHERE friend_array LIKE '$username,%' OR friend_array LIKE '%,$username,%' OR friend_array LIKE '%,$username'"); 
} else { 
    //Default query limits results to 5 
    $query = mysqli_query($con,"SELECT * FROM users WHERE friend_array LIKE '$username,%' OR friend_array LIKE '%,$username,%' OR friend_array LIKE '%,$username' LIMIT 0,5"); 
} 

そして今では、余分なブラケット取り外し:サムネイル後

<?php } ?> 

:へ

<?php } } ?> 

を。

SQLインジェクション攻撃を防ぐためにSQLクエリ内に変数値を書き込むのではなく、プリペアドステートメントを使用するようにコードを変更することを検討してください。

関連する問題