2011-11-13 19 views
0

私は利用可能なすべてのカメラをプリントアウトするテーブルを持っています。フォームを使用してこれらの設定を変更します。問題は、フォームがエントリ内の最後のカメラのみを更新することです。言い換えれば、フォームを変更し、リスト内の最後のカメラの「適用」を押すと、それは機能します。このリスト内の他のカメラのフォームを変更すると、リスト内の最後のカメラと同じ設定に変更されます。私が知る限り、どんな値でも問題はありません。フォーム送信が動作しない

ここに長いダンプのため申し訳ありませんが、私はそれの大部分を含むべきであると思った問題を絞り込むことができず:

// Dont allow direct linking 
defined('_JEXEC') or die('Direct Access to this location is not allowed.'); 
//get current user 
$user =& JFactory::getUser(); 
// get a reference to the database 
$db = &JFactory::getDBO(); 

$query_camera_name = "SELECT camera_id, camera_name, camera_status, camera_quality, camera_hash, camera_type FROM #__cameras WHERE user_id=".$user->id." AND camera_status!='DELETED'"; 
$db->setQuery($query_camera_name); 
//get number of cameras so we can build the table accordingly 
$db->query(); 
$num_rows = $db->getNumRows(); 
// We can use array names with loadAssocList. 
$result_cameras = $db->loadAssocList(); 


if (isset($_POST['apply_changes'])) { 

    //process changes to camera options  
    $camera_id = $_POST['camera_id']; 
    $camera_status = check_input($_POST['camera_status']); 
    $camera_name = check_input($_POST['camera_name'], "You entered an empty camera name. Enter another name and apply changes."); 
    $camera_quality = check_input($_POST['camera_quality']); 

    $query_insert_camera = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'", `camera_name` ="'.$camera_name.'", `camera_quality` ="'.$camera_quality.'" WHERE `camera_id`='.$camera_id; 
    $db->setQuery($query_insert_camera); 
    $db->query(); 
    header("location: " . $_SERVER['REQUEST_URI']); 
} 

echo "<html>"; 
echo "<head>"; 


<link href="dashboard/webcam_widget.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript"> 
function oncameraSubmit(camera_id) 
{ 
    document.active_cameras.camera_id.value = camera_id; 
    return confirm('Apply changes?'); 
} 


</script> 
<?php 


echo "</head>"; 
echo "<body>"; 


if (!isset($result_cameras)) 
{ 
    //TODO 
} 
else 
{ 

    if ($num_rows == 0) 
    {   
     echo '<b><i><center>You currently have no cameras setup. Add a Camera below.</center></i></b>'; 
    } 
    else 
    { 
     ?> 
     <form name="active_cameras" action="<?php htmlentities($_SERVER['REQUEST_URI']); ?>" method="POST"> 
     <input type="hidden" name="camera_id" value="" /> 
     <table id="webcam-table"> 
     <thead> 
      <tr> 
       <th>Camera Type</th> 
       <th>Name</th> 
       <th>Quality</th> 
       <th>Status</th> 
       <th>Camera Actions</th> 
      </tr> 
     </thead> 
     <tbody> 
<?php 
     for($i=0;$i<$num_rows;$i++) 
     { 

      //camera_status 
      if ($result_cameras[$i]["camera_status"] == "ENABLED") 
      { 
       $enabled_option = "value='ENABLED' selected='selected'"; 
       $disabled_option = "value='DISABLED'"; 
      } 
      else 
      { 
       $enabled_option = "value='ENABLED'"; 
       $disabled_option = "value='DISABLED' selected='selected'"; 
      } 

      //camera_quality 
      if ($result_cameras[$i]["camera_quality"] == "HIGH") 
      { 
       $high_option = "value='HIGH' selected='selected'"; 
       $medium_option = "value='MEDIUM'"; 
       $mobile_option = "value='MOBILE'"; 
      } 
      else if ($result_cameras[$i]["camera_quality"] == "MEDIUM") 
      { 
       $high_option = "value='HIGH'"; 
       $medium_option = "value='MEDIUM' selected='selected'"; 
       $mobile_option = "value='MOBILE'"; 
      } 
      else if ($result_cameras[$i]["camera_quality"] == "MOBILE") 
      { 
       $high_option = "value='HIGH'"; 
       $medium_option = "value='MEDIUM'"; 
       $mobile_option = "value='MOBILE' selected='selected'"; 
      } 
      else 
      { 
       //TODO proper logging 
      } 

      //camera_type 
      if ($result_cameras[$i]["camera_type"] == "WEBCAM") 
      { 
       $webcam = "value='WEBCAM' selected='selected'"; 
       $axis = "value='AXIS'"; 
       $other = "value='IPCAM'"; 
      } 
      else if ($result_cameras[$i]["camera_type"] == "AXIS") 
      { 
       $webcam = "value='WEBCAM'"; 
       $axis = "value='AXIS' selected='selected'"; 
       $other = "value='IPCAM'"; 
      } 
      else if ($result_cameras[$i]["camera_type"] == "IPCAM") 
      { 
       $webcam = "value='WEBCAM'"; 
       $axis = "value='AXIS'"; 
       $other = "value='IPCAM' selected='selected'"; 
      } 
      else 
      { 
       //TODO 
      } 

?> 

      <tr> 
       <td> 
        <select name="camera_type"> 
        <option <?php echo $webcam; ?>>Webcam</option> 
        <option <?php echo $axis; ?>>AXIS</option> 
        <option <?php echo $other; ?>>Other</option> 
        </select> 
       </td> 
       <td> 
       <input type="text" size="32" maxlength="64" name="camera_name" value="<?php echo $result_cameras[$i]["camera_name"]; ?>" /> 
       </td> 
       <td> 
        <select name="camera_quality"> 
        <option <?php echo $high_option; ?>>High</option> 
        <option <?php echo $medium_option; ?>>Medium</option> 
        <option <?php echo $mobile_option; ?>>Mobile</option> 
        </select> 
       </td> 
       <td> 
        <select name="camera_status"> 
        <option <?php echo $enabled_option; ?>>Enabled</option> 
        <option <?php echo $disabled_option; ?>>Disabled</option> 
        </select> 
       </td> 
       <td> 
        <input type="submit" name="apply_changes" value="Apply" onClick="javascript:return oncameraSubmit(<?php echo $result_cameras[$i]["camera_id"]; ?>);"/> 
       </td> 
      </tr> 

      <?php 
     } 
     echo "</tbody>"; 
     echo "</table>"; 
     echo "</form>"; 
    } 
} 

答えて

2

同じ名前のHTML要素が複数あるようです。そのため、フォームの投稿時に値の配列を取得したいとします。

このように、Get $_POST from multiple checkboxesは役に立ちそうです。

または、oncameraSubmitを拡張して、非表示の入力フィールド(idだけでなく)にすべてのデータを格納するようにします。次に、データベースを更新するときに、これらの非表示のフィールドを使用します。

+0

ありがとうございました。まだよくわからない場合、配列を使って更新クエリをどのように行うのでしょうか? – Tom

+0

最も簡単な方法は、xが配列要素の数であるx updateクエリを発行することです。代わりに、私の最後の段落を見てください。そうすれば、1つの更新だけを発行することができます。 – mjwills

0

あなたのフォーム要素名が衝突しているが。たとえば、フォーム要素を定義すると'camera_status'を2回入力すると、POSTの最後の値のみが表示されます。

フォーム配列表記を使用してください(例:「camera_status []」、さらには「camera_status [$ id]」)。 PHPコードは配列をPOSTデータとして受け取るので、すべてを一度に更新することができます。

関連する問題