2016-05-19 36 views
0

各ユーザーIDのスケジュールを含むフォームを送信しようとしています。これまでのところ、次のようになります。PHP入力を送信するForeach()ID

$sql = "SELECT * FROM dbtable"; 
    $result = $conn->query($sql); 
    $name_info = "SELECT udidId, name FROM udid"; 
    $name_result = $conn->query($name_info); 
    if ($result->num_rows > 0) { 
     while($row = $result->fetch_assoc()) { 
      $udidId = $row["udidId"]; 
      echo "<label for='hours' class='schedule'><strong>I want <span>".$row["name"]."</span>"; 
      echo "<input type='text' name='udidId' class='hidden' value='".$row["udidId"]."' />"; 
      echo " to be <br />allowed out between <input type='text' name='outAllowedStartHour' placeholder='8' value='" . $row["outAllowedStartHour"] . "'> - <input type='text' name='outAllowedEndHour' placeholder='8' value='" . $row["outAllowedEndHour"] . "'><br />allowed in between <div class='padd_left'></div><input type='text' name='inAllowedStartHour' placeholder='8' value='" . $row["inAllowedStartHour"] . "'> - <input type='text' name='inAllowedEndHour' placeholder='8' value='" . $row["inAllowedEndHour"] . "'></strong></label>"; 
     } 
}  


if(isset($_POST["update_schedule"])) { 
     foreach($_POST as $key => $value) { 
      echo "POST parameter '$key' has '$value' <br />"; 
      while($row = $result->fetch_assoc()) { 
       foreach($value as $x => $x_value) { 
       echo "Key=" . $x . ", Value=" . $x_value; 
       echo "<br>"; 
       $update_pets = "UPDATE v_spottData SET $x_value = $x_value WHERE udidId = $x"; 
$conn->execute($update_pets); 
       } 
      } 
     } 

ただし、データベースの最後のIDからの入力を更新するだけで、入力値はまったく更新されません。助言がありますか?

+0

$ conn-> query($ update_pets);を入力してください。 $ update_pets文字列の後ろにあります。 –

+0

@ Dr.Stitchさん、ありがとうございましたが、それは何も解決しないようです – ColoursB

+0

私はどのフレームワークを使用しているのか分かりませんが、$ conn-> queryを$ conn-> executeに変更しようとします。 –

答えて

0

私は本当にばかげていると感じますが、問題を扱っている他の人にとっては、私の解決策は簡単でした。

フォーム提出を処理するために、PHPをドキュメントの最下部に配置するようにしてください。私がそれを動かすとすべてうまくいった!

ご協力いただきありがとうございました、特に@ chris85!

+0

質問のコードは、ページの上部に移動しても実行されません。 – chris85

0
  1. Executeexecuteクエリでは、プリペアドステートメントを実行します。クエリを準備するには、prepareを使用する必要があります。
  2. 準備文にはプレースホルダを使用する必要があります。引用/エスケープはドライバによって処理されます。
  3. 注記列は結合/置き換えできません。
  4. 現在のクエリで、同じ値を持つ列を更新しようとしていますが、それは正しいとは限りません。 $updating_columnを更新しようとしている列に変更してください。

$columns = array('outAllowedStartHour', 'outAllowedEndHour', 'inAllowedStartHour', 'inAllowedEndHour'); // whitelist columns 
if(in_array($updating_column, $columns)) { 
    $update_pets = "UPDATE v_spottData SET `$updating_column` = ? WHERE udidId = ?"; 
    $stmt = $con->prepare($update_pets); 
    $stmt->bind_param("ii", $x_value, $x); 
    $stmt->execute(); 
} else { 
    echo 'Using a Not Allowed Column'; 
} 

あなたはここで、http://php.net/manual/en/mysqli.quickstart.prepared-statements.php準備された文についての詳細を読むことができます。

+0

ありがとうございます@ chris85、この場合、更新列とudidIdの値をどのように抽出しますか? – ColoursB

+0

これらは '$ x_value、$ x'でなければなりません。 – chris85

+0

そう? '$ update_pets = "UPDATE v_spottData SET' $ updating_column '= $ x_value WHERE udidId = $ x";' – ColoursB

関連する問題