2013-09-04 2 views
0

알았어. 몇 번이나 대답했음을 알지만, 실제로 일하는 것 같지 않습니다!확인란 값을 사용하여 SQL 데이터베이스 업데이트

나는 (열로 설정) 내 데이터베이스 8 주하고 난 아마 그것이 있어야만큼 우아하지 알고

<form method="post" id="updating" action="<?php $_PHP_SELF ?>"> 

     <?php 
     $count = 1; 
     foreach ($results as $v) { 
      while($count<9){ 
       $week = Week.$count; 
       $checkvalue = $v -> $week; 
       ?> 
       Week<?echo $count;?> <input type="checkbox" id="Week<?php echo$count;?>" name="week[]" value="<?php echo $checkvalue;?>" <?php if($checkvalue==1){?> 
       checked="checked" 
       <?php } ?> 
       /> 
       <?php 
       $count++; 
      } 
     } 
     ?> 
     <input name="update" type="submit" id="update" value="Update"> 
    </form> 

을 다음과 같이 나는 PHP로 이들의 값을 표시하지만,하지 올바른 HTML을 출력하고 데이터베이스에 표시된대로 정보를 표시합니다.

<form method="post" id="updating" action=""> 

     Week1 <input type="checkbox" id="Week1" name="week[]" value="1"  checked="checked" 
     /> 
    Week2 <input type="checkbox" id="Week2" name="week[]" value="0"  /> 
    Week3 <input type="checkbox" id="Week3" name="week[]" value="1"  checked="checked" 
     /> 
    Week4 <input type="checkbox" id="Week4" name="week[]" value="1"  checked="checked" 
     /> 
    Week5 <input type="checkbox" id="Week5" name="week[]" value="0"  /> 
    Week6 <input type="checkbox" id="Week6" name="week[]" value="1"  checked="checked" 
     /> 
    Week7 <input type="checkbox" id="Week7" name="week[]" value="1"  checked="checked" 
     /> 
    Week8 <input type="checkbox" id="Week8" name="week[]" value="1"  checked="checked" 
     /> 
<input name="update" type="submit" id="update" value="Update"> 
</form> 

난 데 문제는 내가 틱 또는 그 확인란을을 선택 취소하는 경우, 업데이트 된 값을 캡처하고, 따라서 데이터베이스가 제대로 업데이트되지 않는 표시되지 않습니다이다. 자체 게시물 요청이 처리되는 곳은 다음과 같습니다.

<?php if(isset($_POST['update'])) 
{ 
    $count = 1; 
    if(isset($_POST['week']) && !empty($_POST['week'])) 
    foreach($_POST['week'] as $w){ echo $w; //prints 1 all the time 
$week = Week.$count; 
echo $week;//prints out weeks I want to update correctly (database headings) 
$query = $db->getQuery(true); 

// Fields to update. 
$fields = array(
    $week.'=' . $db->quote($w)); 

// Conditions for which records should be updated. 
$conditions = array(
    'UserID='. (int) $user_id); 

$query->update($db->quoteName('tools_engage'))->set($fields)->where($conditions); 

$db->setQuery($query); 

try { 
    $result = $db->query(); // Use $db->execute() for Joomla 3.0. 
    echo ("Values saved and updated </br>"); 
    $count++; 
} catch (Exception $e) { 
    // Catch the error. 
} 
} 
}?> 

나는 따라서 이상한 데이터베이스 업데이트 구문, 줌라이 일을 해요,하지만이 작업을 수행하고 내가이 프로그램의 다른 부분을 사용했습니다 그래서 나는 그들이 문제

로하지 거 알아 나는 코드에서 주석을 달았고, 배열 주 []는 내가 체크하거나 체크하지 않은 박스에 상관없이 모든 것에 대해 값 1을 포함하는 것 같다. 그렇다면 분명히 옳지 않은 1/true로 데이터베이스의 모든 값이 업데이트됩니다.

나는 업데이트 양식에 대한 내 HTML 출력에있는 의문점을 가지고 있지만, 어떤 도움을 주셔서 감사합니다.

업데이트 : 좋아 너무 nvuono의 제안에가는 내가 업데이트 한 내 양식은 이제 각각의 이름이 배열의 인덱스를하지 않는 한이

<?php 
$count = 1; 
foreach ($results as $v) { 
while($count<9){ 
    $week = Week.$count; 
    $checkvalue = $v -> $week; 
    ?> 
    Week<?echo $count;?> <input type="checkbox" id="Week<?php echo$count;?>" name="week[<?php echo $count;?>]" value="1" <?php if($checkvalue==1){?> 
    checked="checked" 
    <?php } ?> 
    /> 
<?php 
$count++; 
} 
} 
?> 

처럼되고? 그렇다면 이제는 입력 한 순서대로 배열의 모든 값을 인쇄하지 않아야합니까?

즉. 내 논리는 1,0,0,1,0,0,0 (상자 1과 상자 4 확인) 또는 상자가 체크 된 것을 인쇄하는 것입니다. 대신에 1,1을 인쇄하면 어떤 색인인지 알 수 없기 때문에 몇 주 후에 업데이트해야합니다.

+0

이 링크는 아래에 있지만 도움이 될 수도 있습니다. [checkboxes, php 및 post] (http://www.wastedpotential.com/html-multi-checkbox-set-the-correct-way-to) -group-checkboxes /). 올바른 정보가 전송되고 있는지 확인하십시오. (포스트 이전에) $ _Post [ 'week']'가 같은 데이터를 얻었는지 확인하십시오 ... –

+0

고마워요. 내가 겪고있는 특정 문제에 대한 질문은 그것이 의미가 있기를 바랍니다. – robobobobo

답변

1

업데이트를 수행하는 데있어 정말 해로운 방법을 추가했습니다. post을 사용할 때 SQL 인젝션 및 다른 나쁜 점에주의해야합니다. 데이터를 항상 유효성을 검사하고 위생 처리해야합니다. "hacky"방법은 정수 값을 가지고 작업하기 때문에 쉽게 작동합니다.

스크린 샷 :이 내 테이블 인

enter image description here

... I에 유래에 대한 ... 그래서 그것을라는

+----+-------+-------+-------+-------+-------+-------+-------+-------+ 
| id | week1 | week2 | week3 | week4 | week5 | week6 | week7 | week8 | 
+----+-------+-------+-------+-------+-------+-------+-------+-------+ 
| 1 |  |  |  |  |  |  |  |  | 
| 2 | 1  |  |  |  |  |  |  |  | 
| 3 | 1  |  | 1  |  |  |  |  |  | 
| 4 | 1  |  | 1  |  | 1  |  |  |  | 
| 5 | 1  |  | 1  |  | 1  |  | 1  |  | 
+----+-------+-------+-------+-------+-------+-------+-------+-------+ 

이 내 PHP 파일입니다 ....의

POST VARS: 
Array 
(
    [row2] => Array 
     (
      [0] => 1 
     ) 

    [row3] => Array 
     (
      [0] => 1 
      [1] => 3 
     ) 

    [row4] => Array 
     (
      [0] => 1 
      [1] => 3 
      [2] => 5 
     ) 

    [row5] => Array 
     (
      [0] => 1 
      [1] => 3 
      [2] => 5 
      [3] => 7 
     ) 

    [update] => Update 
) 

내 "소스보기"후 제출

<?php 
$mysqli = new mysqli("localhost", "root", "password", "test"); 

if (!empty($_POST)) { 
    print "<pre>POST VARS: \n".print_r($_POST,true)."</pre>"; 

    foreach($_POST as $i => $data) 
    { 
     if (substr($i,0,3)=='row' && is_numeric(substr($i,3))) 
     { 
     $row_id = substr($i,3); 
     $data = array_flip($data); 
     $values = array(); 

     for ($x=1; $x<9; $x++) { 
      $values[] = "week$x = ". ((isset($data[$x])) ? '1' : '0'); 
     } 

     $stmt = "\nupdate so ". 
       "\n set ".implode(", \n  ",$values). 
       "\n where id = $row_id; \n"; 

     $update = $mysqli->query($stmt); 
     if ($update) { print "Row $row_id updated successfully.<br/>"; } 
     } 
     print "<br/>"; 
    } 
} 
$result = $mysqli->query("select * from so"); 

$mysqli->close(); 
?> 

<form method="post" id="updating" action="<?php $_PHP_SELF ?>"> 
    <?php 
    while($row = $result->fetch_object()) 
    { 

     $count = 1; 

     print "<div style='border:1px solid black; display:inline-block;'>\n"; 
     print "Row ".$row->id."<br/>\n"; 
     while($count < 9) 
     { 
     $week = "week$count"; 

     $checkvalue = $row->{$week}; 
     ?> 
     Week<?php echo $count ?> <input type="checkbox" id="Week<?php echo$count;?>" name="row<?php echo $row->id 
     ?>[]" value="<?php echo $count;?>" <?php if($checkvalue==1){ 
     ?> checked="checked" <?php } ?> />&nbsp;&nbsp;&nbsp; 
     <?php 
     $count++; 
     } 
     print "</div><br/><br/>\n\n\n"; 
    } 
    ?> 
     <input name="update" type="submit" id="update" value="Update"> 
    </form> 

이것은 $_POST입니다 (이것은 DB 연결 및 쿼리를 변경 외에 포함 된 자기의, 실행 빈 PHP 문서에 스틱) 형태 :

<form method="post" id="updating" action=""> 
    <div style='border:1px solid black; display:inline-block;'> 
Row 1<br/> 
     Week1 <input type="checkbox" id="Week1" name="row1[]" value="1" />&nbsp;&nbsp;&nbsp; 
        Week2 <input type="checkbox" id="Week2" name="row1[]" value="2" />&nbsp;&nbsp;&nbsp; 
        Week3 <input type="checkbox" id="Week3" name="row1[]" value="3" />&nbsp;&nbsp;&nbsp; 
        Week4 <input type="checkbox" id="Week4" name="row1[]" value="4" />&nbsp;&nbsp;&nbsp; 
        Week5 <input type="checkbox" id="Week5" name="row1[]" value="5" />&nbsp;&nbsp;&nbsp; 
        Week6 <input type="checkbox" id="Week6" name="row1[]" value="6" />&nbsp;&nbsp;&nbsp; 
        Week7 <input type="checkbox" id="Week7" name="row1[]" value="7" />&nbsp;&nbsp;&nbsp; 
        Week8 <input type="checkbox" id="Week8" name="row1[]" value="8" />&nbsp;&nbsp;&nbsp; 
     </div><br/><br/> 


<div style='border:1px solid black; display:inline-block;'> 
Row 2<br/> 
     Week1 <input type="checkbox" id="Week1" name="row2[]" value="1" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week2 <input type="checkbox" id="Week2" name="row2[]" value="2" />&nbsp;&nbsp;&nbsp; 
        Week3 <input type="checkbox" id="Week3" name="row2[]" value="3" />&nbsp;&nbsp;&nbsp; 
        Week4 <input type="checkbox" id="Week4" name="row2[]" value="4" />&nbsp;&nbsp;&nbsp; 
        Week5 <input type="checkbox" id="Week5" name="row2[]" value="5" />&nbsp;&nbsp;&nbsp; 
        Week6 <input type="checkbox" id="Week6" name="row2[]" value="6" />&nbsp;&nbsp;&nbsp; 
        Week7 <input type="checkbox" id="Week7" name="row2[]" value="7" />&nbsp;&nbsp;&nbsp; 
        Week8 <input type="checkbox" id="Week8" name="row2[]" value="8" />&nbsp;&nbsp;&nbsp; 
     </div><br/><br/> 


<div style='border:1px solid black; display:inline-block;'> 
Row 3<br/> 
     Week1 <input type="checkbox" id="Week1" name="row3[]" value="1" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week2 <input type="checkbox" id="Week2" name="row3[]" value="2" />&nbsp;&nbsp;&nbsp; 
        Week3 <input type="checkbox" id="Week3" name="row3[]" value="3" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week4 <input type="checkbox" id="Week4" name="row3[]" value="4" />&nbsp;&nbsp;&nbsp; 
        Week5 <input type="checkbox" id="Week5" name="row3[]" value="5" />&nbsp;&nbsp;&nbsp; 
        Week6 <input type="checkbox" id="Week6" name="row3[]" value="6" />&nbsp;&nbsp;&nbsp; 
        Week7 <input type="checkbox" id="Week7" name="row3[]" value="7" />&nbsp;&nbsp;&nbsp; 
        Week8 <input type="checkbox" id="Week8" name="row3[]" value="8" />&nbsp;&nbsp;&nbsp; 
     </div><br/><br/> 


<div style='border:1px solid black; display:inline-block;'> 
Row 4<br/> 
     Week1 <input type="checkbox" id="Week1" name="row4[]" value="1" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week2 <input type="checkbox" id="Week2" name="row4[]" value="2" />&nbsp;&nbsp;&nbsp; 
        Week3 <input type="checkbox" id="Week3" name="row4[]" value="3" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week4 <input type="checkbox" id="Week4" name="row4[]" value="4" />&nbsp;&nbsp;&nbsp; 
        Week5 <input type="checkbox" id="Week5" name="row4[]" value="5" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week6 <input type="checkbox" id="Week6" name="row4[]" value="6" />&nbsp;&nbsp;&nbsp; 
        Week7 <input type="checkbox" id="Week7" name="row4[]" value="7" />&nbsp;&nbsp;&nbsp; 
        Week8 <input type="checkbox" id="Week8" name="row4[]" value="8" />&nbsp;&nbsp;&nbsp; 
     </div><br/><br/> 


<div style='border:1px solid black; display:inline-block;'> 
Row 5<br/> 
     Week1 <input type="checkbox" id="Week1" name="row5[]" value="1" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week2 <input type="checkbox" id="Week2" name="row5[]" value="2" />&nbsp;&nbsp;&nbsp; 
        Week3 <input type="checkbox" id="Week3" name="row5[]" value="3" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week4 <input type="checkbox" id="Week4" name="row5[]" value="4" />&nbsp;&nbsp;&nbsp; 
        Week5 <input type="checkbox" id="Week5" name="row5[]" value="5" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week6 <input type="checkbox" id="Week6" name="row5[]" value="6" />&nbsp;&nbsp;&nbsp; 
        Week7 <input type="checkbox" id="Week7" name="row5[]" value="7" checked="checked" />&nbsp;&nbsp;&nbsp; 
        Week8 <input type="checkbox" id="Week8" name="row5[]" value="8" />&nbsp;&nbsp;&nbsp; 
     </div><br/><br/> 


     <input name="update" type="submit" id="update" value="Update"> 
    </form> 

편집
나는 REFE이 대답에 돌아왔다 그리고 나는 방금 ID 값을 체크 박스에 다시 사용하고 있다는 것을 깨달았다. 이 상황에서는 문제가 아니지만 언제나 나쁜 습관입니다. 각 체크 박스는 페이지에서 고유 한 ID를 가져야합니다. 그럼 .... 정말되어야합니다 id="row1week1", id="row1week2" ... id="row8week1" ... id="row8week8"입니다.

+0

당신은 선생님, 저를 위해 긴 두통을 끝냈습니다! 정말 고맙습니다! 당신은 실제로 내가 필요로하는 것 이상을 가졌지 만 (나는 업데이트하기 위해서 오직 한 줄의 체크 필드만을 가지고있다.) 그러나 나는 함께 조각하고 나머지를 알아낼 수 있었다. Joomla 함수는 데이터베이스를 업데이트 할 때도 모든 코드 정리를 처리합니다. 나는 내가 할 수있는 일에 대해 완전히 알지 못했기 때문에 PHP에 익숙하지 않다. 이것은 나에게 많은 도움이되었다. 다시 한 번 감사드립니다. – robobobobo

관련 문제