2014-04-27 1 views
0

이 질문에 많은 시간이 걸렸지 만 답변은 게시 된 스크립트에만 국한된 것으로 알고 있으며 현재 지식으로는 수정 된 스크립트에서 내 스크립트로 이행하는 것.PHP가 아래에 표시된 echo와 같은 페이지에 양식을 제출하십시오.

이 모두가 정상적으로 작동합니다. 동일한 페이지에서 제출되어 오류에 대한 피드백을 제공하지만 양식 아래에 오류가 표시되기 때문에 사용자가 잘못 입력 한 내용을 변경하고 다시 입력하는 것이 편리합니다. 제출하십시오.

jQuery/Ajax를 사용하는 경우에만 게시 할 수있는 질문부터 수집 할 수 있습니다.

내 스크립트 :

<?php 

if(isset($_POST['submit'])){ 
require "connection.php"; 

$username = $_POST["username"]; 
$password = $_POST["password"]; 
$email = $_POST["email"]; 
$repeat_password = $_POST["repeat_password"]; 

$username_query = mysql_query("SELECT id FROM users WHERE username = '$username'"); 
$email_query = mysql_query("SELECT id FROM users WHERE email = '$email'"); 

if($username == "" || $password == "" || $repeat_password == "" || $email == ""){ 
    die("All boxes must be filled out!"); 
}//^Checking if all boxes have been filled out 
else { 
    if (!ctype_alnum($username)){ 
     die("Username can only contain letters and numbers"); 
    }//^Checking if username is alphanumeric 
    else { 
     if (strlen($username) < 6 || strlen($username) > 15){ 
      die("Username must be between 6-15 characters."); 
     }//^Checking if username is between 6-15 characters 
     else { 
      if (mysql_num_rows($username_query) != 0){ 
       die("Username is taken, please choose another."); 
      }//^Checking if username exists in database 
      else { 
       if (!preg_match("/[0-9]/",$password)){ 
        echo "password doesnt contain a number"; 
        } 
       else { 
        if ($password != $repeat_password){ 
         die("Passwords do not match"); 
        }//^Checking if password and repeat_password match 
        else { 
         if (strlen($password) < 6){ 
          die("Password must be atleast 6 characters long."); 
         }//^Checking if password is longer than 6 characters 
         else { 
          if (!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
           die("E-mail address is not vaild."); 
          }//^Checking if e-mail address is valid 
          else { 
           if (mysql_num_rows($email_query) != 0){ 
            die("This e-mail address has already been used to create a different account."); 
           }//^Checking if e-mail address has already been used 
           else { 
            mysql_query("INSERT INTO users (username, password, email, signup_date) VALUES ('$username', '$password', '$email', CURDATE())") or die(mysql_error()); 
            echo "Account succesfully created, welcome ".$username."!"; 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
} 
exit; 
} 

// 

?> 

     <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
      <table> 
       <tr> 
        <td> 
         Username: 
        </td> 
        <td> 
         <input type="text" name="username"> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         Password: 
        </td> 
        <td> 
         <input type="password" name="password"> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         Repeat password: 
        </td> 
        <td> 
         <input type="password" name="repeat_password"> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         E-mail: 
        </td> 
        <td> 
         <input type="email" name="email"> 
        </td> 
       </tr> 
       <tr> 
        <td colspan="2"> 
         <center><input type="submit" name="submit"></center> 
        </td> 
       </tr> 
      </table> 
     </form> 

답변

1

답변 : 예, 거기에 jQuery를 사용해야합니다.

사용자가 첫 번째 문자를 입력 한 직후 양식의 유효성을 검사 할 수 있습니다. 키 위/아래 또는 제출시 유효성을 검사 할 수 있습니다. jQuery Validation Plugin을 사용하는 것이 좋습니다.

아약스 요청 양식을 사용하려면. 그것은 간단합니다. 그것에 대해 읽을 수 있습니다 here. 마지막 페이지에는 몇 가지 예가 나와 있습니다.

jQuery 유효성 검사 플러그인을 사용하는 경우 valid 작업에 대해 ajax 요청을 보낼 수 있습니다. 이를 사용하여 직렬화 된 양식의 Ajax 요청은 유효한 양식의 submit + 양식으로 전송됩니다. 양식에 잘못된 필드가 있으면 오류가 표시되고 오류가 없으면 Ajax 요청이 전송됩니다.

조언 : 귀하의 아키텍처는 그리 좋지 않습니다. 왜? 사람들이 나쁜 이름을 쓰고 10 개의 다른 오류를 만들면 1 오류 만 :

Username can only contain letters and numbers

이 표시됩니다. 왜? 너 때문에 건축. 그 후에 그는 2 번째 오류를 바로 잡을 것입니다. 세 번째 오류 등그것은 출력에

$errors = array(); 
$errorsFlag = false; 

if(check_username1()) { 
    $errors[] = 'Tell about this error'; 
    $errorsFlag = true; 
} 

if(check_username2()) { 
    $errors[] = 'Tell about this error'; 
    $errorsFlag = true; 
} 
if(check_mail()) { 
    $errors[] = 'Tell about this error'; 
    $errorsFlag = true; 
} 

어떻게 :

난 당신이 오류를 이런 식으로 처리 할 제안? 사용 :

if($errorsFlag == true) { 
    foreach($errors as $error) { 
     echo $error . " <br /> ";; 
    }  
} 
+0

나는 그것에 대해 실제로 생각하지 않았습니다. 개선 할 수있는 방법을 제안 할 수 있습니까? – Daniel

+0

@ user3570991 정확히 무엇입니까? 오류를 출력하는 방법? –

+0

나는 내 대답을 편집하고 충고를 연장했다. –

0

나는 항상 세션으로 내 오류를 설정합니다. 이렇게하면 한 번에 여러 개의 오류를 설정하고 원하는 곳마다 인쇄 할 수 있습니다.

문을 사용하면 오류를 설정합니다 곳의 단지 예입니다 경우 다음을

은 ...
session_start(); //you will need this 

if (username_exists($un)) { 

    handleError("Username already exists!"); 

} 

...
if (!passwordIsStrong($pw)) { 

    handleError("Password is not strong enough!"); 

} 

다음은 실제로/인쇄 오류를 설정하는 기능을합니다.

function handleError($err) { 

    //get any existing errors 
    $existing = isset($_SESSION['form-errors']) ? $_SESSION['form-errors'] : ''; 

    //append the new error to the existing ones. Over-write the session with new data. 
    $_SESSION['form-errors'] = "$existing<li>$err</li>"; 

} 

function getErrors() { 

    if(isset($_SESSION['form-errors'])) 

     echo $_SESSION['form-errors']; 


} 

getErrors();은 html의 어느 곳에서나 호출 할 수 있습니다. 그것은 ... 이런 식으로 뭔가를 인쇄합니다

<li>Username already exists!</li> <li>Password is not strong enough!</li>

그것은 종류의 로그처럼

. 그러나 모든 프로젝트에서 저에게 효과적입니다!

0

예, 사용자는 javascript이 필요합니다. 반드시 jQuery 또는 ajax 일 필요는 없습니다.

그러나 을 사용하지 않고 항상 ajax 페이지를 다시로드해야합니다. 그렇지 않으면 PHP 코드가 실행되지 않습니다.

페이지를 다시로드하지 않으려면 javascript/jQuery 유효성 검사 스크립트를 검색하십시오. 그렇지 않으면 (페이지를 다시로드하는 것에 신경 쓰지 않는다면) php를 사용하여 폼의 끝에 오류 메시지를 출력 할 수 있습니다.

관련 문제