2017-01-17 11 views
1

データベースで複数の行を更新する:あなたはidとSTHの現在の状態を示すステータス(2 =完了、仕事で1 =という名前の別の列という名前の列があると見ることができるようには選択オプション

+------+------+ 
| id |status| 
+------+------+ 
| 50 | 2 | 
+------+------+ 
| 51 | 0 | 
+------+------+ 
| 52 | 1 | 
+------+------+ 

私は選択したオプション入力フィールドで現在のステータスを選択できる小さなGUIを実行しました。ステータスの現在のレコードもあらかじめ選択しています。

:私は、データベース内の各番号に述べたように

function generateSelect($name = '', $options = array(), $default = '') { 
    $html = '<select name="'.$name.'">'; 
    foreach ($options as $option => $value) { 
     if ($value == $default) { 
      $html .= '<option value='.$value.' selected="selected">'.$option.'</option>'; 
     } else { 
      $html .= '<option value='.$value.'>'.$option.'</option>'; 
     } 
    } 

    $html .= '</select>'; 
    return $html; 
} 

$statusArray=array("Done" => "2", "In Work" => "1","Open" => "0"); 

これは、すべてのidのすべての選択オプションフィールドの生成がどのように見えるかで、そのステータスを持つテキストの略

if ($result->num_rows > 0) { 

    while($row = $result->fetch_assoc()) { 

      $strStatus = generateSelect("stat", $statusArray, $row['status']);    

     echo '<tr><td>' . $row['id']. '</td><td>'.$strStatus.'</td></tr>'; 

私が今やっていることは、送信ボタンを押すとすべてのステータスレコードが更新されることです。

を、おそらく問題は別のオプションは、単に保存されるだろう

$tmp = getSelected(); 
$sql = "UPDATE form SET status='$tmp' WHERE *"; 

で選択された1

function getSelected(){ 

    $value=""; 

    if($_POST['status']=="0") 
     $value="0"; 
    else if($_POST['status']=="1") 
     $value="1"; 
    else if($_POST['status']=="2") 
     $value="2"; 
    else if($_POST['status']=="3") 
     $value="3"; 

    return $value; 

} 2. SQL文を1.getting:私が試してみました何

選択されたフィールドのonchangeメソッドを使用して編集したものでしょうか? 本当に私が得ることができるすべての助けを感謝:)コードを見通すために時間を取るために事前にタイ。迅速な答えとエクストラアップデート@MarioZ

ため

UPDATE

TYまだdoesntの仕事にRLYようですが。 :

が最初に私は私が追加した複数のフィールドを更新することができるようにしたいので、ちょうど$行[「ID」]でうまくいきました^^ /多分あなたはそこに私を助けることができる「[ 『状態を』]」

$strStatus = generateSelect($row['id']."['status']", $statusArray, $row['status']); 

また、これは成功していない人のためにこれを試しました。

$personArray=array("Zivildiener" => "4", "Schmikl" => "3", "Poier" => "2","Dirnb&ouml;ck" => "1","Tom" => "0"); 

$strPerson = generateSelect($row['id']."['person']", $personArray, $row['person']); 

と私はまた、しかし、唯一の状態のために、また、うまく働いたこれを追加しました:/

foreach($_POST as $key => $value) { 

    $sql = "UPDATE form SET status='$value' WHERE id = $key"; 

    $result = $conn->query($sql); } 

は、私は正直に本当にforeachループを理解didntのが、それは何らかの形で働いていた、あなたは多分に必要IDK私が聞いていなかったデータベースにもっと多くの列があることを知っていますが、これにもかかわらず、あなたが与えた最初の答えは完璧に働いていましたが、何らかの時間があれば、あなたの助けに感謝します:)

+0

あなたがしたい場合はそれぞれのIDをステータスとともに投稿する必要がある3行を更新します。あなたが探しているものではありませんか? – MarioZ

答えて

0

各行のIDを名前として渡す必要がありますそれぞれの選択:あなたはその中にあなたの機能getSelected()を適応させることができ

foreach($_POST as $key => $value) { 
    $sql = "UPDATE form SET status='$value' WHERE id = $key"; 
} 

だから、
if ($result->num_rows > 0) { 

    while($row = $result->fetch_assoc()) { 

      $strStatus = generateSelect($row['id'], $statusArray, $row['status']);    

     echo '<tr><td>' . $row['id']. '</td><td>'.$strStatus.'</td></tr>'; 

あなたは$ _POSTデータを取得するとき、あなたはキーとしてidと値とオプションの値を持っています他の値がクエリに注入されていないことを確認してください。

FINAL UPDATE:

これは、あなたがやりたい方法です、私は理解し、自分のコードに適用しやすいように書いている:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
<form name="tasks" action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> 
<?php 
// Names of fields 
$status_list[] = "open"; 
$status_list[] = "in work"; 
$status_list[] = "done"; 

$person_list[] = "John"; 
$person_list[] = "Bran"; 
$person_list[] = "Edd"; 

$task_list[50] = "Kill enemies"; 
$task_list[51] = "Avenge father"; 
$task_list[52] = "Sleep"; 
// Database conection 
$db = new mysqli("localhost", "root", "", "test"); 
// Update database only if post 
if(!empty($_POST)) { 
    foreach($_POST as $key => $value){ 
    if($db->query("UPDATE change_status SET status = {$value['status']}, person = {$value['person']} WHERE id = $key ")) { 
      echo "<span>".$key." - UPDATED!</span>"; 
     } else { 
      echo "<span>".$key." - FAILED!</span>"; 
     } 
    } 
} 
// Get database 
$query = $db->query("SELECT * FROM change_status"); 
// Draw the HTML content 
$form = ""; 
while($result = $query->fetch_array()) { 
    $form .= '<div>'; 
    $form .= '<span>'.$task_list[$result['id']].'</span>'; 
    $form .= ' - '; 
    $form .= '<select name="'.$result['id'].'[status]">'; 
    foreach($status_list as $key => $value) { 
     $form .= '<option value="'.$key.'"'; 
     $form .= $result['status'] == $key? " selected" : ""; 
     $form .= '>'.$value.'</option>'; 
    } 
    $form .= '</select>'; 

    $form .= '<select name="'.$result['id'].'[person]">'; 
    foreach($person_list as $key => $value) { 
     $form .= '<option value="'.$key.'"'; 
     $form .= $result['person'] == $key? " selected" : ""; 
     $form .= '>'.$value.'</option>'; 
    } 
    $form .= '</select></div>'; 
} 

echo $form; // display html content 
?> 

<input type="submit"> 
</form> 
</body> 
</html> 
+0

ty mate :)これはすごくうまくいく、もう一度私を助けてくれるだろうか?pls :)人物という名前の2番目の列があったらどうすればいいだろうか?obviosuly cantは$ strPerson = generateSelect($ row ['id ']、$ personArray、$ row [' person '])。同じIDを持つ入力フィールドが選択されるためです。多分この問題の解決策を持っているかもしれません^^そしてこれまでに多くのことを:) –

+0

問題はありません@ AndroidAmateur99私はあなたが必要とすることを行うためのガイドラインで答えを更新しました。それが役に立てば幸い!それが機能する場合は、「回答を受け入れる」をクリックすることを忘れないでください。 – MarioZ

+0

ちょっと:)あなたの助けのためにTYと言いたいと思っていましたが、まだ少し問題があります^^私がこれまでに試したことを更新しました。アップデートを見ればいいと思うでしょう:) –

関連する問題