2010-02-19 7 views
0

체크 박스를 사용하여 데이터를 업데이트하려고합니다. 확인란 중 하나 이상을 선택하지 않은 때, 통지가 반환됩니다PHP를 통해 MySQL 데이터를 업데이트하는 중 오류가 발생했습니다.

공지 사항 : 정의되지 않은 인덱스 : stats2 E의 : 행에 \ WAMP \ WWW \ 병원 \의 update.php 12

공지 사항 : 정의되지 않은 인덱스 : E에서 stats3 : \ WAMP \ www가 \ 행에 병원 \의 update.php 12

공지 사항 : 정의되지 않은 인덱스 : E에서 stats5 : \ WAMP \ www가 \ 행에 병원 \의 update.php 12

<?php 
    $con = mysql_connect("localhost","root",""); 
    if (!$con) 
     { 
     die('Could not connect: ' . mysql_error()); 
     } 

    mysql_select_db("Hospital", $con); 




     mysql_query("UPDATE t2 SET HOSPNUM ='$_POST[hnum]', ROOMNUM='$_POST[rnum]', ADDATE= '$_POST[ad8]', ADTIME='$_POST[adtym]', LASTNAME='$_POST[lname]', FIRSTNAME='$_POST[fname]', MIDNAME='$_POST[mname]', CSTAT='$_POST[cs]', AGE='$_POST[age]', BDAY='$_POST[bday]', ADDRESS='$_POST[ad]', SEX='$_POST[sex]', 
                                                                               STAT='$_POST[stats1]', STAT2='$_POST[stats2]', STAT3='$_POST[stats3]', STAT4='$_POST[stats4]', STAT5='$_POST[stats5]', STAT6='$_POST[stats6]', STAT7='$_POST[stats8]', STAT8='$_POST[stats8]', NURSE='$_POST[nurse]'    
     WHERE TELNUM ='$_POST[telnum]'"); 



    mysql_close($con) 
    ?> 

통지서가 나타나지 않도록 도와 주시겠습니까?

답변

1

이것은 체크 박스에 대해 정의 된 동작이며, 설정이 폼 데이터에 포함되어있는 경우에만 해당합니다.

확인란을 선택했는지 확인하려면 isset()을 사용해야합니다.

변화 그것을

STAT='".isset($_POST['stats1']).", 
STAT2='".isset($_POST['stats2']).", 
STAT3='".isset($_POST['stats3']).", 
STAT4='".isset($_POST['stats4']).", 
STAT5='".isset($_POST['stats5']).", 
STAT6='".isset($_POST['stats6']).", 
STAT7='".isset($_POST['stats8']).", 
STAT8='".isset($_POST['stats8'])." 

확인란하기 전에, 같은 이름의 숨겨진 변수를 추가하는 것입니다 작동 다른 해결 방법에 : 예를 들어,

<form action='t1.php' method='post'> 
<input type='hidden' name="cb1" value="0"> 
<input type='checkbox' name="cb1" title='test'> 
<input type='submit' > 
</form> 
<?php 
print_r($_POST); 
?> 
+0

덕분에,이 트릭이 작동합니다. 나는 여기에서 좋은 기술을 배울 수 있었다. – user225269

0

양식에 체크 박스가있는 경우 해당 값이 상자에 체크 된 경우에만 서버로 전송됩니다. 체크되지 않은 경우 해당 키는 $ _POST 배열에 존재하지 않으므로보고있는 오류가 발생합니다.

1

$_POST 어레이는 stats2 인덱스를 포함하지 않는다. 확인란을 선택하지 않으면 게시 요청에 포함되지 않기 때문입니다.

양식 요소가 정적 인 경우 다음과 같이 설정되어 있는지 확인할 수 있습니다. STAT6='$_POST[stats6]'STAT6=(array_key_exists('stats6', $_POST))으로 바꿉니다.

양식 요소 예를 들어, 동적으로 생성하는 경우 : 당신이 선택 있는지 확인할 수 있도록

foreach($students as $student) 
{ 
    echo "<input element='checkbox' name='student-is-present-{$value}'>"; 
} 

다음 형태의 숨겨진 요소를 포함하고 무엇을 선택하지 않은 것 :

foreach($students as $student) 
{ 
    echo "<input element='hidden' name='student-{$value}' value='student-is-present-{$value}'>"; 
    echo "<input element='checkbox' name='student-is-present-{$value}'>"; 
} 

당신이해야 배열 키를 인용하자. 예 : $_POST[stats5] 대신 $_POST['stats5']을 사용하십시오. SQL은 SQL injection까지 열려 있습니다. 이것을 피하려면 mysql_real_escape_string()과 같은 함수로 데이터를 이스케이프 처리해야합니다.

0

배열에서 POST 및 GET 변수를 직접 사용하면 안됩니다. mysql 인젝션을 검색하여 더 많은 것을 찾으십시오 :

$hnum = isset($_POST['hnum']) ? mysql_real_escape_string($_POST['hnum']) : ''; 

그런 다음이 변수를 사용하십시오. 이 방법은 당신이 MySQL의 주입을 피하고 그 통지를 해결

관련 문제