2010-03-01 4 views
0

내 코드는 다음과 같습니다. 왜 mysql 데이터베이스를 업데이트하려고 시도 할 때 확인란이 업데이트되지 않았는지 알 수 없습니다. 입력 상자 만 업데이트됩니다. 여기 MySQL 데이터베이스의 html 확인란을 업데이트하는 중 문제가 발생했습니다.

<tr> 
<td><font size="3"></td> 
<td></td> 
<input type='hidden' name="stats6" value="0"> 
<td><input name="stats6" type="checkbox" id="dep" value="<?php echo $row["STAT6"]; ?>" <?php echo $row["STAT6"] ? 'checked="checked"' : ''; ?> >Dependent</td> 
<td><font size="3"></td> 
<td></td> 
<input type='hidden' name="stats7" value="0"> 
<td><input name="stats7" type="checkbox" id="emp" value="<?php echo $row["STAT7"]; ?>" <?php echo $row["STAT7"] ? 'checked="checked"' : ''; ?> >Employee</td> 
<td><font size="3"></td> 
<td></td> 
<input type='hidden' name="stats8" value="0"> 
<td><input name="stats8" type="text" id="" value="<?php echo $row["STAT8"]; ?>" maxlength="15">Others</td> 

그리고

양식 액션의 :

mysql_select_db("Hospital", $con); 

mysql_query("UPDATE t2 SET HOSPNUM ='$_POST[hnum]', ROOMNUM='$_POST[rnum]', ADATE='$_POST[adate]', ADTIME='$_POST[adtime]', 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[stats7]', STAT8='$_POST[stats8]', NURSE='$_POST[nurse]'    
WHERE PNUM ='$_POST[pnum]'"); 

내 코드 문제가 무엇인지 정말 확인란에있는 데이터를 업데이트하지 않습니다. 그리고 그것을 검색하려고 할 때, 그것의 모든 0이

+0

SQL 인젝션 취약점이 있습니다. – SLaks

답변

0

많은 문제가 있습니다. 다음은 주요 내용 중 일부입니다.

  • HTML이 유효하지 않습니다. <input> 요소 표 셀 사이에 있습니다. validator을 사용하십시오.

  • 여러 동일한 이름 (<input type='hidden' name="stats6" value="0"> 및 예를 들어 <input name="stats6" type="checkbox")을 입력하고 있습니다

    • 당신은 그 이름의 단일 요소를 찾고 당신의 PHP의를
    • 당신은 []없이 명명된다

PHP, IIRC (PHP 만 문제가된다) 결국에, 만일 $ _POST [ '갑'를] 채워 그것을 만난 첫 번째 'foo'의 가치와 비교합니다.

확인란이없는 경우 기본값을 갖고있는 것처럼 보입니다. 그렇다면 PHP로 완전히 처리하십시오. 양식에 숨겨진 입력을 추가하지 마십시오.

  • 당신은 이렇게 만드는 무엇이든지 확인 어떤 정신없이 데이터베이스에 직접 양식 데이터를 덤프되는 대규모sql injection vulnerability합니다 (php fixes 참조).
0

각 체크 박스에 대한 숨겨진 입력이 태그 뒤에 있어야 할 수도 있습니다. 필자는 PHP가 복제본과 어떻게 관련이 있는지 기억하지 못합니다.하지만 문제 일 수 있습니다.

그러나 다른 메모. 그 코드가 예를 들어 단지 이 아니길 바란다. 데이터를 입력으로부터 데이터베이스에 직접 입력하고 미리 살균 및 검증하지 않아도된다. 그렇게하면 SQL 인젝션의 가능성이 열리게됩니다.

0

우선 $ _POST [hnum] 대신 $ _POST [ "hnum"]을 사용하는 것이 좋습니다. 그것이 오타이라고 생각해보십시오.

실제 문제. 확인란 값은 선택시에만 설정됩니다. 검사하지 않으면 $ _POST [ "hnum"]과 같은 값이 없습니다. 어쩌면 그것이 당신 문제의 일부일지도 모릅니다.

-1

귀하의 HTML은, 당신은 " '"를에 넣어 잊지해야

$sql = "UPDATE t2 SET "; 
$sql .= "HOSPNUM ='".$_POST['hnum']."', "; 
$sql .= "ROOMNUM ='".$_POST['rnum']."', "; 
$sql .= "ADATE  ='".$_POST['adate']."', "; 
$sql .= "ADTIME  ='".$_POST['adtime']."', "; 
$sql .= "LASTNAME ='".$_POST['lname']."', "; 
$sql .= "FIRSTNAME ='".$_POST['fname']."', "; 
$sql .= "MIDNAME ='".$_POST['mname']."', "; 
$sql .= "CSTAT  ='".$_POST['cs']."', "; 
$sql .= "AGE  ='".$_POST['age']."', "; 
$sql .= "BDAY  ='".$_POST['bday']."', "; 
$sql .= "ADDRESS ='".$_POST['ad']."', "; 
$sql .= "SEX  ='".$_POST['sex']."', "; 
$sql .= "STAT  ='".$_POST['stats1']."', "; 
$sql .= "STAT2  ='".$_POST['stats2']."', "; 
$sql .= "STAT3  ='".$_POST['stats3']."', "; 
$sql .= "STAT4  ='".$_POST['stats4']."', "; 
$sql .= "STAT5  ='".$_POST['stats5']."', "; 
$sql .= "STAT6  ='".$_POST['stats6']."', "; 
$sql .= "STAT7  ='".$_POST['stats7']."', "; 
$sql .= "STAT8  ='".$_POST['stats8']."', "; 
$sql .= "NURSE  ='".$_POST['nurse']."'"; 
$sql .= "WHERE PNUM ='".$_POST['pnum']."'"; 

mysql_query($sql); 

문제가 난 그냥 만든

이 쿼리에 대한 수정은 그것을 시도 온 당신의 SQL 함께 올 포스트는 $_POST['stats1']

헥타르해야 당신이 $_POST[stats1]

앞의 예를 값 시도해보십시오

+0

HTML이 올바르지 않으며 SQL에 주요 SQL 주입 취약점이 있습니다. – Quentin

관련 문제