2016-11-15 17 views
0

私は質問したいと思います。PHPのMySQLでwhileステートメントのループを停止するには?

exit()を追加しても問題ありません。は各ステートメントの最後にあるか、またはexit()のほかに良い方法があります。

理由は、表示データがループするのを防ぐためです。exit();の場合、データはループされ、データベーステーブルで使用可能なすべての行が表示されます。そして、else文はexit();コードから削除します。

次のようにコード:

<?php 
    $connect  = mysqli_connect("localhost", "root", "", "database"); 
    global $connect; 

    if(isset($_POST['Submit'])){ 
     $input  = $_POST['input']; 

     $sql = "SELECT * FROM table"; 
     $get = mysqli_query($connect,$sql); 
     if($get && mysqli_num_rows($get) > 0){ 
      while($row = mysqli_fetch_assoc($get)){ 
       $input_db = $row['input']; 
       $output_db = $row['output']; 

       if (($input >= $input_db) && ($output <= $output_db)) 
       { 
        echo "Input and output is in between"; 
        exit(); 
       } 
       else 
       { 
        echo "Data added ! <br/>"; 
        exit(); 
       } 
      } 
     mysqli_free_result($get); 
     } 
     else 
     { 
      echo "data is outside range"; 
     } 
    } 
?> 
<form action="testdate.php" method="post"> 
    <table> 
     <tr> 
      <td><i class="fa fa-unlock-alt"></i> </td> 
      <td>Input : </td> 
      <td><input type ="text" name="input" size="30"></td> 
     </tr> 
    </table>  

    <p><input class="btnSuccess" type ="submit" name="Submit" value="Submit"> </p>    
</form> 

感謝。

+0

前に 'break'を使用したことがありますか? http://www.php.net/break – Irvin

+0

それは本当にうまくいきません。だからこそ私はwhileループを使っています:) – Jamilah

+0

さらに明確にすることができますか? SQLレベルでフィルタリングできますか? (例:WHERE条件) – Ronald

答えて

0

質問に直接答えるには、exit();break;にスワップするだけです。それが終了せずにループを一時的に停止させます

// Let's go infinite.. 

while(true) 
{ 

echo 'This only appears once, because we\'re breaking out of the loop.'; 

// Not today! 
break; 
} 

// Everything is normal again down here. 
echo 'That was a close one!'; 

をあなたの特定のケースでは、より良いアプローチは、そうでない場合、MySQLは唯一のほとんどを削除するPHP用のテーブル全体を送信して忙しくなる、唯一のあなたがを必要とするデータを選択にあります受信したデータこのような何か:

(int)は単純なセキュリティ対策であることを
<?php 
$connect  = mysqli_connect("localhost", "root", "", "database"); 
global $connect; 

if(isset($_POST['Submit'])) 
{ 
    $input  = (int)$_POST['input']; // * See note below 

    $sql = "SELECT * FROM table where ".$input.">=`input` and ".$output."<=`output`"; 

    $get=mysqli_query($connect,$sql); 

    if($get && $get->num_rows) 
    { 
     echo "Input and output is in between"; 
    } 
    else 
    { 
     echo "data is outside range"; 
    } 
} 
?> 
  • - それはSQLインジェクションを実行することから誰かを防ぐことができます。 $outputにする必要があります。可能であれば、代わりに準備照会を使用してください
+0

私はこのテクニックを使用する場合、どのようにデータベースからデータを呼び出すつもりですか? while($ row = mysqli_fetch_array())を使っています。$ data = $ row ['data']; ..あなたの提案コードでどのようにデータを呼び出すのですか? – Jamilah

+0

クエリに複数の行がある場合は、前と同じようにループすることができます。結果の行がすべて「関連性がある」ため、終了する必要はありません。 (編集:既存のコードでは1つの行しか必要としないと思っていましたが) –

+0

既に試しました。コードが動かない – Jamilah

関連する問題