몇 가지 검사를 통과 한 다음 데이터베이스에 데이터를 저장하는 간단한 등록 양식을 작성하려고합니다. 초기에는 등록 양식과 처리 양식 만 있었고 유효성이 검증되지 않은 양식 데이터는 데이터베이스에 저장되었습니다. 문제는 프로세스에 대한 유효성 검사를 시도 할 때 시작되었습니다.동일한 페이지에서 PHP 양식 유효성 검사 -이 논리가 맞습니까?
- 등록을 시도하는 사용자에 기록되지 않도록하려면 다음과
<Edit>
여기에만 세 골이있다.
- 브라우저에서 실행중인 활성 사용자 계정이없는 한 먼저 빈 필드가 없는지 확인하고
- 처리 할 양식 데이터를 보냅니다. 자신을 PHP로 게시 # 1의 경우 는
나를 위해 별도의 코딩을 많이 피할 수로 이상적인 듯 다시 모든 물건을 입력 할 필요가 없다는 사용자에게 장점이있다.
# 2의 경우 유효성 검사는 현재 빈 필드를 확인하는 것으로 제한됩니다. 이 양식은 등록 양식이며 사용자 데이터는 수집 중이며 사용자 인증은 전혀 수행되지 않습니다.
# 3, 나는 다른 PHP로 데이터를 보내는 방법을 고안하고 더 이상 문제가되지 않습니다.
문제는 논리입니다. 함께 조립할 때 별도로 작동하는 부품이 왜 실패합니까? 프로세스에 적용 할 논리에 오류가 있습니까?
댓글 중 하나는 elseif에 대해 뭔가를 말했고 나는 또한 시도했습니다. 구문 분석 오류가없고 구문 오류가없고 치명적인 오류가 발생하지 않지만 코드에서 오류가 발생하지 않습니다.하지만 아무 것도 발생하지 않습니다. 단지 등록 양식이 새로 고쳐집니다. 시스템의 개별 부분은 테스트 페이지에서 개별적으로 작동하지만 전체 양식과 함께 사용할 경우 작동하지 않습니다.
</Edit>
여기 SE에서 양식을 PHP 자체에 게시하는 방법을 찾았으며 게시물의 샘플 코드로 시험해 보았습니다. 예상대로 작동했는데 모두 괜찮은 것 같아서 양식 페이지에 추가했습니다. 하지만 실제 페이지에서 다시로드하는 경우를 제외하고는 아무 작업도 수행하지 않습니다.
다시 SE에서 나는 모든 오류가 어레이에서 발견되어 표시되는 방법을 보여준 게시물을 발견했습니다. 샘플 파일에서 작동하는 것처럼 보였고 변수 이름이 적절하게 변경된 코드를 등록 페이지에 추가했습니다. 로그인 한 사용자가없고 제출을 클릭하면 캐치 된 빈 필드 오류가 표시됩니다. 그렇지 않았습니다. 모든 필드가 비어있는 경우에도 오류를 표시하십시오. 그 후 모든 것이 무너졌습니다.
이제 등록 양식이 다시로드됩니다. 오류가 발생했거나 오류가 없습니다.
나는 지난 밤 이후에 내가하려고했던 것이 코드가 지금하고있는 일인지 더 이상 확신 할 수없는 많은 것을 시도했다. 그래서 나는 단지 논리와 관련 질문으로 시작하고 있습니다. 여기
논리와 각 단계에 대한 질문입니다 ....
<php session_start() ;?>
<?php
//check if the user is logged in
if (isset($_SESSION['validuser'])) {
//catch this first - before user spends time filling out the 12 fields!
//send to message page saying "you cannot register - you are already a member and logged in"
//WORKING PERFECTLY - CONFIRMS FORM POSTING TO SAME PAGE CORRECTLY!
//time for other checks....
}
else (!isset($_SESSION['validuser']) && isset($_POST['submit'])) {
//if there is no logged in user and form has been submitted, start checking the fields to see if any fields are empty
//collect all errors in array and display?
//direct back to the form with appropriate messages, form fields retained
//exit here? or no?
//focus now has to pass to the form again - need any code for this? or will it happen automatically?
}
if isset($_POST['submit'])) {
//Should this part be within the else block?
//If it is out side, will it get rendered on load?
//if there are no errors proceed to process the form
//there are further checks that need talking to the database
//once those checks and approvals are over the data gets saved to the database
}
?>
<html>
<body>
<form action="<?=$_SERVER['PHP_SELF']?>" method = "POST">
<!-- 12 fields to be filled out by user -->
<input type = "submit" name = "submit" value = "submit" />
</form>
</body>
</html>
나는 무엇을 놓치고?이것이 내가 정리하려고하는 작업 흐름임을 기억하십시오. 원래 코드는 너무 멋져서 여기에 폭로하고 싶지 않습니다. 입력 위생과 출력 이스케이프에 관해 많은 조언을 얻을 수 있습니다! 필자는 폼과 데이터베이스에 대한 액세스 권한이있는이 개발 환경에서 의도적으로 이러한 비트를 제외 시켰습니다. Sanitizing과 escaping은이 시점에서 혼란을 일으킬뿐입니다. 내가 워크 플로 권리가 일단 내가 너무
당신에 내가'참조 PHP 코드 (있는 경우 조건) {} else (condition) {}'이것은 오타입니까? 이상적으로는 'elseif'여야합니까? – face
은 모두 물건을 보호하려는 정도에 따라 다릅니다. :) NSA와 대부분의 정부 기관은 또한 현재 도메인 등 (IP 제한/검증), 시간대, 글로벌 위치 등을 확인합니다. 전역 정보는 클라이언트 측에서 결정되지만, 페이지가로드 될 때 PHP가 헤더에 액세스 할 수 있는지를 확인합니다. 페이지 데이터 등. 그것은 모두 귀하의 사용자가 확인할 필요가있는 범위에 달려 있습니다. tbh – Fallenreaper
PHP 서버에서 코드를 실행하려했는데 '500 내부 서버 오류'가 발생했습니다. 그것을 조금 변형 시켰습니다. 이제는 잘 작동합니다.이 코드를 사용하여 유스 케이스를 충족 시키려고 시도해 볼 수 있습니까? 제출시 여전히 페이지가 다시로드됩니다. CODE - http://pastebin.com/W97R513C – face