2014-11-03 6 views
0

나는 PHP 스크립트와 함께 양식의 유효성을 검사하려고합니다. 유효성 검사가 완벽하게 작동하지만 정확한 세부 정보를 제출하면 버튼이 클릭되지 않습니다. 필자는 세부 정보를 입력하지 않으면 필수 필드의 msg가 표시됩니다. 잘못된 세부 정보를 입력하면 경고 메시지가 표시됩니다. 하지만 정확한 세부 정보를 입력하면 로그인 버튼이 클릭되지 않습니다.alls() 함수에서 나는 사실을 반환하려고했지만 그 다음에는 필요한 필드 메시지를 잠시 표시 한 후에 새로 고치는 문제가 발생합니다.제출 버튼이 클릭되지 않았습니다

HTML 코드 :

<form id="frm_login" method="post" name="frm_login" onSubmit="return alls()"> 

     UserName: <input type="text" name="txt_usrnm" /><label id="i"></label> 
     <br/><br/> 
     Password: <input type="password" name="pswd" /><label id="i1"></label> 
     <br/><br/> 

     <input type="submit" name="submit" value="Login" style:"width=10px"/>&nbsp;&nbsp;&nbsp; 
     <a href="forgotPassword.php">Forgot Password ?</a> 

     <br/><br/> 
     <font size="+1"><a href="reg.html">Register Here</a></font> 
    </form> 

자바 스크립트 :

<script type="text/javascript"> 
function req() 
{ 

if (document.frm_login.txt_usrnm.value=="") 
{ 

    document.getElementById('i').innerHTML="*This field is required"; 
    document.getElementById('i').style.color="red"; 
    document.getElementById('i').style.fontSize="12px"; 
} 

if (document.frm_login.pswd.value=="") 
{ 

    document.getElementById('i1').innerHTML="*This field is required"; 
    document.getElementById('i1').style.color="red"; 
    document.getElementById('i1').style.fontSize="12px"; 
} 
return false; 
} 
function validateUname() 
{ 
submitFlag = true; 
var len=document.frm_login.txt_usrnm.value.length; 
if((len>0) && (len<6)){ 
    submitFlag=false; 
    document.getElementById('i2').innerHTML="*Enter atleast 6 characters"; 
    document.getElementById('i2').style.color="red"; 
    document.getElementById('i2').style.fontSize="12px"; 
} 
return submitFlag; 
} 
function alls() 
{ 
req(); 
validateUname(); 
//CheckPassword(this); 
//num(); 
//confirm_pswd(); 
//namevalid(); 
//ValidateEmail(this); 
return false; 
} 

</script> 

PHP 코드 :

<?php 
     if(isset($_POST['submit'])) 
{ 
$usrnm1=$_POST['txt_usrnm']; 
$pswd1=$_POST['pswd']; 

$user_name = "root"; 
$password = ""; 
$database = "show_your_talent"; 
$server = "127.0.0.1"; 
$db_handle = mysql_connect($server, $user_name, $password); 
$db_found = mysql_select_db($database, $db_handle); 

$res="select * from username where UserName='$usrnm1' and Password='$pswd1'"; 
$result2 = mysql_query($res,$db_handle); 


    $count=mysql_num_rows($result2); 
    if($count==1) 
    { 

     $_SESSION['user'] =$usrnm1; 
     //echo $_SESSION['user']; 
     header("Location: category.php"); 

    } 
    else 
    { 
     //$_SESSION['user']="false"; 
     echo "<script type='text/javascript'> alert('Incorrect UserName/Password.')</script>"; 
     //header('Location: index.php');    
    } 
    mysql_close($db_handle); 

    } 
    ?> 
+3

[mysql_ *'functions] (http://stackoverflow.com/questions/12859942/why-shouldnt-use-mysql-functions-in-php)를 사용하지 마십시오. 더 이상 사용하지 않습니다. (공식적으로 권장되지 않음) (https://wiki.php.net/rfc/mysql_deprecation). 대신 [prepared statements] (http://en.wikipedia.org/wiki/Prepared_statement)에 대해 알아보고 [PDO] (http://us1.php.net/pdo) 또는 [MySQLi] (http : //)를 사용하십시오. us1.php.net/mysqli). [이 기사] (http://php.net/manual/en/mysqlinfo.api.choosing.php)를 사용하면 결정하는 데 도움이됩니다. –

답변

0

alls() 항상 false를 반환합니다. 따라서 양식은 제출되지 않습니다. onsubmit 콜백이 false를 반환하면 서버에 대한 제출이 중지됩니다.

+0

하지만 alls() 함수에서 true를 반환하면 잠깐 동안 필요한 필드 메시지를 표시 한 후 페이지가 새로 고쳐지고 다른 (category.php) 페이지로 리디렉션됩니다. – Disha

1

당신이 제출 한 함수 alls()은 항상 양식을 제출하지 않음을 의미하는 false를 반환합니다. 이 시도 :

function req() { 
    var submitFlag = true; 
    if (document.frm_login.txt_usrnm.value == "") { 
     submitFlag = false; 

     document.getElementById('i').innerHTML = "*This field is required"; 
     document.getElementById('i').style.color = "red"; 
     document.getElementById('i').style.fontSize = "12px"; 
    } 

    if (document.frm_login.pswd.value == "") { 
     submitFlag = false; 

     document.getElementById('i1').innerHTML = "*This field is required"; 
     document.getElementById('i1').style.color = "red"; 
     document.getElementById('i1').style.fontSize = "12px"; 
    } 
    return submitFlag; 
} 

function validateUname() { 
    submitFlag = true; 
    var len = document.frm_login.txt_usrnm.value.length; 
    if ((len > 0) && (len < 6)) { 
     submitFlag = false; 
     document.getElementById('i').innerHTML = "*Enter atleast 6 characters"; 
     document.getElementById('i').style.color = "red"; 
     document.getElementById('i').style.fontSize = "12px"; 
    } 
    return submitFlag; 
} 

function alls() { 
    var valid = true; 
    valid *= req(); 
    valid *= validateUname(); 

    //CheckPassword(this); 
    //num(); 
    //confirm_pswd(); 
    //namevalid(); 
    //ValidateEmail(this); 

    return valid ? true : false; 
} 

경우가 req() 또는 validateUname() false를 반환 제출에서 양식을 방지 할 수있다.

+0

나는 이것을 시도했다. 하지만 그 새로 고침을 누른 다음 category.php 페이지로 리디렉션합니다. – Disha

+0

@Disha는 코드를 기반으로하므로 Ajax를 사용하여 양식 값을 전달하지 않으므로 category.php로 전체 페이지 리다이렉션 이상을 기대해서는 안됩니다. 페이지 새로 고침을 얻으려고합니다. 그러면 PHP 스크립트가 category.php로 리디렉션합니다. 당신이보고있는 것은 정확하게 페이지를 말하고있는 것처럼 버그는 아닙니다. 이해에 도움이 필요한 것이면 다른 질문을하고 싶을 수도 있습니다. –

+0

하지만 아약스를 사용하고 싶지 않으면 어떻게해야합니까? 거기에 자바 스크립트 또는 PHP 또는 HTML을 사용하여 이것을 해결하기 위해 다른 방법이 있습니까? – Disha

관련 문제