2011-11-13 3 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 업데이트 쿼리를 실행하는 것입니다. 또는 마지막 단락을 참조하십시오. 이렇게하면 단일 업데이트 만 실행할 수 있습니다. – mjwills

0

양식 요소 이름이 충돌됩니다. 예를 들어 양식 요소를 정의 할 때 'camera_status'를 두 번 입력하면 POST의 마지막 값만 수신됩니다.

"camera_status []"또는 "camera_status [$ id]"와 같은 형식 배열 표기법을 사용합니다. 그런 다음 PHP 코드가 배열을 POST 데이터로 수신하므로 모든 것을 한 번에 업데이트 할 수 있습니다.