2016-07-22 2 views
1

이름, 성, 전화 번호, 메시지 등의 입력 필드가 여러 개인 양식이 있고이 필드에 모두 유효성이 있다고 가정 해 보겠습니다. 우리는 잊었 기 때문에 이름을 제외한 모든 것을 입력합니다. 데이터 전송을 위해 제출을 클릭했지만 이름을 입력하는 것을 잊어 버렸기 때문에 오류가 반환되었습니다. 입력 한 모든 정보가 계속 표시되므로 다시 입력 할 필요가 없습니다.PHP에 입력 된 값을 유지하는 방법 사용자가 제출 버튼을 누른 후 다시 입력 할 필요가 없습니까?

어떻게해야합니까? 아래 코드는 from this website입니다.

<?php 
    if (isset($_POST["submit"])) { 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $message = $_POST['message']; 
     $human = intval($_POST['human']); 
     $from = 'Demo Contact Form'; 
     $to = '[email protected]'; 
     $subject = 'Message from Contact Demo '; 

     $body ="From: $name\n E-Mail: $email\n Message:\n $message"; 
     // Check if name has been entered 
     if (!$_POST['name']) { 
      $errName = 'Please enter your name'; 
     } 

     // Check if email has been entered and is valid 
     if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
      $errEmail = 'Please enter a valid email address'; 
     } 

     //Check if message has been entered 
     if (!$_POST['message']) { 
      $errMessage = 'Please enter your message'; 
     } 
     //Check if simple anti-bot test is correct 
     if ($human !== 5) { 
      $errHuman = 'Your anti-spam is incorrect'; 
     } 

// If there are no errors, send the email 
if (!$errName && !$errEmail && !$errMessage && !$errHuman) { 
    if (mail ($to, $subject, $body, $from)) { 
     $result='<div class="alert alert-success">Thank You! I will be in touch</div>'; 
    } else { 
     $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later.</div>'; 
    } 
} 
    } 
?> 
+1

에코 그들

+0

그렇지 않으면 초보자가'get' 변수를 이스케이프 처리하지 않고 모든 종류의 XSS 문제를 일으키기위한 작은 단계 일뿐입니다. – halfer

답변

0

당신은 형태로 정보를 표시 값을 저장 Session을 사용할 수 있습니다 like

PHP

<?php 

    session_start(); 

    $form_name = isset($_SESSION['name']) ? $_SESSION['name'] : ''; 
    $form_email= isset($_SESSION['email']) ? $_SESSION['email'] : ''; 
    $form_message= isset($_SESSION['message']) ? $_SESSION['message'] : ''; 
    $form_human = isset($_SESSION['human ']) ? $_SESSION['human'] : ''; 

    if (isset($_POST["submit"])) { 

     //store information into session 

     $_SESSION["name"]=$_POST['name']; 
     $_SESSION["email"]=$_POST['email']; 
     $_SESSION["message"]=$_POST['message']; 
     $_SESSION["human"]=intval($_POST['human']); 

     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $message = $_POST['message']; 
     $human = intval($_POST['human']); 
     $from = 'Demo Contact Form'; 
     $to = '[email protected]'; 
     $subject = 'Message from Contact Demo '; 

    ..... 
    .... 
if (mail ($to, $subject, $body, $from)) { 
     $result='<div class="alert alert-success">Thank You! I will be in touch</div>'; 

     //remove information from session 
     unset($_SESSION["name"]); 
     unset($_SESSION["email"]); 
     unset($_SESSION["message"]); 
     unset($_SESSION["human "]); 

    } else { 
     $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later.</div>'; 
    } 

HTML HTML의 형태

<input type="text" value="<?php echo $form_name; ?>" name="name"> 
----- 
----- 
+0

이 코드를 스팸 프록시로 사용할 수 있다고 생각합니다. - 대부분의 메일 필드에서 캐리지 리턴 탐지가 없으므로 "To"또는 "숨은 참조"헤더를 쉽게 추가 할 수 있습니다. – halfer

2

당신은 당신의 HTML 양식

처럼의 내용을 에코 할 수

<input type="text" name="name1” value="<?=(isset($_POST['name1']) ? $_POST['name1'] : "") ?> 
+0

안녕하세요, Robin,이 HTML 양식을 구현할 때 작동하지 않는 것 같습니다. value = " 물음표 바로 뒤에"php "가 누락되어 있음을 확인했습니다. 고의적으로 POST가 두 번 나열된 이유도 있습니까? 감사합니다! –

+0

예 .. php가 의도적으로 빠졌습니다. 게시물이 있는지 여부를 확인하기 위해 두 번 나열됩니다. –

0

사용이

<input type="text" name="name" value="<?php echo $_POST['name'];?>"> 
관련 문제