2014-03-31 3 views
0

그래서, 나는 다음과 같은 코드를 가지고 :이 PHP를 양식으로 이동 그래서삽입 검증 Foreach 루프 문제

$required = array('uexam_id', 'usubject', 'uexam_date'); 

$error = false; 
//VALIDATION: first check all required fields are not empty. if post has values 
if(!empty($_POST)) 
foreach($required as $field) 
    if (empty($_POST[$field])) 
     $error = true; 
//a field was empty, show error 
if ($error) { 
die ("All fields required!!! <a href='examisud.php'> Back to PHP Form </a>"); 
} 
//no error - try the query 
elseif($error === false && !empty($_POST)) 

{ 
$InsertQuery = "INSERT INTO Exam (exam_id, subject, exam_date) VALUES ('$_POST[uexam_id]','$_POST[usubject]','$_POST[uexam_date]')"; 
$result = mysql_query($InsertQuery, $con) or die('query Failure:'. mysql_error()); 
} 

을 (지금은 SQL 주입/MySQL의 감가 상각에 대해 걱정하지 마십시오)을 (examisud.php) , 나는 "모든 분야가 필요함"으로 처음으로 인사합니다. 그런 다음 양식으로 돌아가서 모든 필드가 채워져 있지 않으면 정상적인 데이터 삽입 및 오류 표시로 작동합니다. * 양식 페이지로드시 "모든 필드 필요"가 표시되지 않도록하려면 어떻게해야합니까? 나는 그것을 필요로한다 (들판이 비어있을 때). 또한 필드를 업데이트하거나 삭제할 때 "모든 필드가 필요합니다"라는 오류 메시지가 나타납니다. 그러나 모든 것이 업데이트/정상적인 오류를 제외하고 삭제 가져옵니다.

그래서 기본적으로 필드가 삽입 쿼리에 공백으로 남을 때 표시해야합니다. 도움을 주시면 미리 감사드립니다. 양식 제출 여부를 확인해야합니다 여부를

예를 들어이

<input type="submit" name="submit"> 

then in your php check it like this 

if(!empty($_POST['submit']))//means the form is submitted 
{ 
//your code 
} 
else 
{ 
//no form is submitted here display your form normally 
?> 

<form action="" method="POST"> 
...... 
...... 
<input type="submit" name="submit"> 

</form> 

<?php 
} 

이 도움이 되었으면 좋겠 같은 형태로 제출하는 경우

{ 
echo "<form action=examisud.php method=post>"; //HTML FORM ECHOED OUT BY PHP 
echo "<tr>"; 
echo "<td>" . "<input type=text name=exam_id value=" . $record['exam_id'] . " </td>"; 
echo "<td>" . "<input type=text name=subject value=" . $record['subject'] . " </td>"; 
echo "<td>" . "<input type=text name=exam_date value=" . $record['exam_date'] . " </td>"; 
echo "<td>" . "<input type=hidden name=hidden value=" . $record['exam_id'] . " </td>"; 
echo "<td>" . "<input type=image name=update value=update id=submit src=images/update.png" . " </td>"; 
echo "<td>" . "<input type=image name=delete value=delete id=submit src=images/delete.png" . " </td>"; 
echo "</tr>"; 
echo "</form>"; 
} 
echo "<form action=examisud.php method=post>"; 
echo "<tr>"; 
echo "<td><input type=text name=uexam_id></td>"; 
echo "<td><input type=text name=usubject></td>"; 
echo "<td><input type=text name=uexam_date></td>"; 
echo "<td>" . "<input type=image name=insert value=insert id=submit src=images/insert.png" . " </td>"; 
echo "</form>"; 
echo "</table>"; 
+0

양식에 숨겨진 필드를 넣고 코드에 숨겨진 변수가 있는지 확인하십시오. 양식이있는 경우 양식이 제출됩니다. 그렇지 않은 경우 "처음 방문" –

+2

'SQL 주입에 대해 걱정하지 마십시오./mysql depreciation for now' : 걱정할 필요가있는 사람이 아닙니다 * * do :) –

답변

0

:

* 내 양식을 편집 너, 모두 최고

+0

아니요, PHP에서 내 양식이 반향됩니다.이 형식으로는 작동하지 않습니다./ 입력 해 주셔서 감사합니다. ! – user3473793

+0

네, 다른 부분에 양식을 반향시킬 수도 있습니다. –

0

이 코드는 아래 설명을 따라야한다.

if ($_SERVER['REQUEST_METHOD'] == 'POST') { // check if the user submits data (POST) or just loads the page (GET) 
    $error = false; 
    $required = array('uexam_id', 'usubject', 'uexam_date'); 


    foreach($required as $field) { 
     if (!isset($_POST[$field]) || empty($_POST[$field])) { 
      $error = true; 
      break; 
     } 
    } 

    if ($error) { 
     die("All fields required!!! <a href='examisud.php'> Back to PHP Form </a>"); 
    } else { 
     $InsertQuery = "INSERT INTO Exam (exam_id, subject, exam_date) VALUES ('".mysql_real_escape_string($_POST["uexam_id"], $con)."','".mysql_real_escape_string($_POST["usubject"], $con)."','".mysql_real_escape_string($_POST["uexam_date"], $con)."')"; 
     $result = mysql_query($InsertQuery, $con) or die('query Failure:'. mysql_error()); 
    } 
} 

첫째, 당신의 코드는 일부 심각한 보안 문제가 및 생산에 사용되지되지 않아야합니다.

mysql_* 함수이다 deprecated - 또는 PDO_MYSQL (mysql 매우 유사하다) mysqli을 사용한다.

코드는 SQL injection attacks에 취약합니다. 코드를 방지하는 방법 (값을 올바르게 이스케이프 처리하거나 준비된 문을 사용하는 방법)은 this question입니다.

현재이 코드가 안전해야하므로 변수를 이스케이프 처리하기 위해 mysql_real_escape_string을 사용했습니다.

마지막으로 내 코드는 사용자가 실제로 (요청 방법이 POST인지 확인하여) 양식을 제출하는지 확인하므로 유효성 검사를 실행하기 전에 첫 번째 문제가 해결됩니다. 실패한 경우).

+0

*** 가장 많이 사용했을 *** *** mysql_real_escape_string'을 사용했습니다 –

+0

@Hanky ​​웃겨요 Panky yeah 맞아요, 제 대답이 업데이트되었습니다. 처음에 나는 그것을 고치지 않았고 mysqli 또는 PDO로 전환 할 때 자신이 직접 해보길 바랬습니다. –

+0

@andre, 나는 무엇을 말할지 모르겠다. 나는 아직도 똑같은 것을 얻고있다./ – user3473793