2017-12-21 3 views
0

ユーザーID(users.uid)とフルネーム(users.full_name)の両方を格納するUSERSテーブルがあります。それから私は、各通話シフトスロット(例えば、一日&夜)の名前フィールドとユーザーID(uid)フィールドと共に、来年のすべての週をリストするOn Callスケジュール表を持っています。コールPHP MySQLi選択またはクエリのテキスト値を渡す

on_call_week、us_night_uid、us_night_full_nam、us_day_uid、us_day_full_name

17-12-25、53、ジェーン・ドウ、94、ジルTodd17-12-18、2342年、ジョン・スミス、24、ボブに私はその後、(それらの横にあるチェックボックスで)すべてのコールの週の開始日に一覧表示形式を持つオア

し、その上で送信ボタンをドロップして、コール週に選択されたすべてでフォームを表示するページに行きますコールスロットの両方でダウン(昼夜)

Wh私はUIDフィールドとfull_nameフィールドの両方を更新する方法を理解しようとしていますが、ドロップダウンリストボックスの値だけが渡されます(値はUIDであり、テキストはfull_namesです)。

選択ドロップダウンのテキストを(何らかの方法で)渡す必要がありますか?そうでなければ、FORループ内で2つの新しいクエリを作成して、各UIDの昼夜のfull_namesを取得する必要があります。または、配列全体にユーザーテーブル全体を照会してから、2つのUIDスロットの一致する名前を取得するために、FORループパスごとにその配列を2回ループするようなことをする必要がありますか?

mysqli_fetch_arrayを何度もループさせると、クエリが再作成されるか、$ resultを何度もループせずに返すことができますクエリーはデータベースに再作成されます(while($ row = mysqli_fetch_array($ result)))?私はまだPHPにはまだ初心者です。正直なところ、結果セットの一時的なコピー(?)を使用してPHPがデータベースの句に何回クエリを実行したかを視覚的に確認する方法さえもわかりません。

これは、レコードのチェックに基づいて一度に複数のレコードを更新するためのフォームを作成する方法について、このold guideに従っていました。

ありがとうございました。

<?php 
$dbname = "on_call"; 
include '../shared_recources/db_connect.php'; 

if(isset($_POST["submit"]) && trim($_POST["submit"]) != "") 
{ 
    $checked_weeks = count($_POST["selected_on_call_weeks"]); 

    for($i=0; $i<$checked_weeks; $i++) 
    { 
     $us_day_uid = $_POST["us_day_uid"][$i]; 
     $us_night_uid = ($_POST["us_night_uid"][$i]; 

     mysqli_query($con, "UPDATE on_call.on_call_schedule 
          SET us_day_full_name = '" . $_POST["us_day_full_name"][$i] . "', 
           us_day_uid = '?????????',       
           us_night_full_name = '" . $_POST["us_night_full_name"][$i] . "', 
           us_night_uid = '" '???????????????' . "', 
           WHERE id = '" . $_POST["selected_on_call_weeks"][$i] . "' 

          ");     
    } 
} 
?> 
+0

あなたのコードは、SQLインジェクションとPHPコードの例です。データベースに渡された各変数には、常に "mysqli_real_escape_string"関数を使用します。 mysqli_real_escape_string($ con、$ _POST ['variable'])(http://php.net/manual/pl/mysqli.real-escape-string.php) – JerzySBG

答えて

0

コード:

while($row = mysqli_fetch_array($result)) 

がクエリのみ1時間、その後、PHPマシンのRAMやデータベースサーバ上に保存することができた結果をループ実行します - それは保存されているどこにcontrollすることはできませんが、それが依存データベース 'php driver'にあります。


残りの質問は非常に分かりません。誰かがあなたに完全な答えを与えるのを待たなければなりません。 SQLスキーマ(テーブルスキーマ)を質問に追加すると、理解しやすくなります。

+0

ありがとうございます。私が本当に理解しようとしていたことは、それぞれの "WHILE($ row = mysqli_fetch_array($ result))"ループに対して、クエリがデータベースに再実行された場合です。実際にデータベースにクエリを再作成させると、フォームUPDATEアクションが発生し、数十のクエリが実行される可能性があります。 mysqli_fetch_arrayに対する各WHILEループで新しいクエリが実行されるか、PHPが(メモリ内の)値の格納された配列を処理している場合は、最初の後に? – Reno

+0

もっと単純に言われます。クエリをデータベースに再作成せずに、mysqli_fetch_arrayを何回繰り返してループしますか? – Reno

0

[mysqli_query]が実行されるたびにDBでクエリが実行されています。

私は、A)[mysqli_query]をコメントアウトしてデータベースに当たらないようにし、B)SQLクエリの[for]内に文字列変数を作成することをお勧めします。 [for]ループの後に、完了したクエリを画面にエコーすることができます。これにより、DBに送信する内容を正確に知ることができます。

動作を確認した後、期待どおりに[mysqli_query]のコメントを解除し、必要に応じて調整することができます。または[for]ループの外側に[mysqli_query]を実行できます変数をエコーし​​ます)。ここで

はPHP.netからいくつかの詳細です: http://php.net/manual/en/mysqli.query.php

+0

ありがとう!私が本当に求めていたのは、全体の結果セットを多次元配列に移動し、その結果が複数回使用できる(検索される)というコンセプトにすぎないと思います。私はこの答えが本当に必要なものだと思う:https://stackoverflow.com/questions/22565844/looping-through-query-results-multiple-times-with-mysqli-fetch-array – Reno

関連する問題