2012-09-05 3 views
2

내가, 내가 AJAX를 통해 guestlist을 확인하려는 위해 window.onload 스크립트가Ajax와 MySQL은 확인 및 검색, 삽입

하나의 HTML 페이지에서 두 개의 데이터베이스 테이블, guestlist 출석 있습니다. url 쿼리의 이름과 성이 guestlist 테이블에 나타나면 페이지를로드하십시오. 그렇지 않은 경우 오류 메시지를로드하십시오.

페이지가 올바르게로드되면 이름과 성이 두 입력 필드에 미리 채워집니다. 사용자가 양식의 나머지 부분을 완성하고 제출을 클릭하여 이름과 성을 출석 표에 삽입합니다.

출석 표에 이름과 성이 이미 표시된 경우 오류 메시지를로드하십시오. 출석 표에 이름과 성이 나타나지 않으면 출석 표에 양식 정보를 제출하십시오.

아약스에 관해서, 나는 팩의 밝은 전구가 아니다. 이것은 내가 현재 가지고있는 코드 :

HTML

<body> 
<div id="formDiv"> 
<form id="partyForm" name="party" action="party_insert" method="post"> 
<h1>Welcome to The Party</h1> 
    <input name="first_name" id="firstname" class="input" type="text" maxlength="99" placeholder="First Name"><br/> 
    <input name="last_name" id="lastname" class="input" type="text" maxlength="99" placeholder="Last Name"><br/> 
    <input name="costume" id="costume" class="input" type="text" maxlength="999" placeholder="What are you supposed to be?"><br/> 
    <div id="buttonDiv"> 
     <a class="button" id="submit" style="cursor:pointer;">SUBMIT</a> 
    </div> 
</form> 
</div> 

<script> 
window.onload = function() { 
    var fname_init = decodeURIComponent(getUrlVars()["fname"]); 
    var lname_init = decodeURIComponent(getUrlVars()["lname"]); 

    if(fname_init !== "undefined" && lname_init !== "undefined"){ 
     var newString = 'fname='+encodeURIComponent(fname_init)+'&lname='+encodeURIComponent(lname_init); 
     $.ajax({ 
      type: "GET", 
      url: "guestList.php", 
      data: newString, 
      success: function(){ 
       alert("ON THE LIST"); 
       $('#firstname').val(fname_init); 
       $('#lastname').val(lname_init); 
      }, 
      error: function(){ 
       alert("NOT ON THE LIST"); 
       window.location = 'error1.html?fname='+encodeURIComponent(fname_init)+'lname='+encodeURIComponent(lname_init); 
      } 
     }) 
    } 
} 

$("#submit").click(function() { 
    validate(); 
}); 

function submit(){ 
    var fname = $("#firstname").val(); 
    var lname = $("#lastname").val(); 
    var cost = $("#costume").val(); 
    var dataString = 'fname='+encodeURIComponent(fname)+'&lname='+encodeURIComponent(lname)+'&cost='+encodeURIComponent(cost); 
    $.ajax({ 
     type: "POST", 
     url: "partyEntry.php", 
     data: dataString, 
     success: function() { 
      alert("ENJOY THE PARTY"); 
      clearForms(); 
     } 
    }); 
} 

function validate(){ 
    if ($("#firstname").val() == ""){ 
     alert("Please Enter your First Name"); 
    } else { 
     if ($("#lastname").val() == ""){ 
      alert("Please Enter your Last Name"); 
     }else{ 
      if ($("#costume").val() == ""){ 
       alert("You have to have a costume to be eligible for this raffle"); 
      }else{ 
       submit(); 
      } 
     } 
    } 
} 

function clearForms() { 
    $('#partyForm')[0].reset(); 

} 

function getUrlVars() 
{ 
    var vars = [], hash; 
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
    for(var i = 0; i < hashes.length; i++) 
    { 
     hash = hashes[i].split('='); 
     vars.push(hash[0]); 
     vars[hash[0]] = hash[1]; 
    } 
    return vars; 
} 

</script> 
</body> 

guestList.php

<?php 

    $host = "localhost"; 
    $user = "root"; 
    $password = ""; 
    $database = "party"; 

    $link = mysql_connect($host, $user, $password); 
    mysql_select_db($database); 

    //SURVEY INFORMATION 
    $fname = mysql_real_escape_string($_REQUEST['fname']); 
    $lname = mysql_real_escape_string($_REQUEST['lname']); 

    $checkClient = "SELECT * FROM guestlist WHERE first_name = ".$fname." AND last_name = ".$lname; 
    mysql_query($checkClient) or die(mysql_error()); 

    mysql_close($link); 

?> 

partyEntry.php

<?php 

    $host = "localhost"; 
    $user = "root"; 
    $password = ""; 
    $database = "party"; 

    $link = mysql_connect($host, $user, $password); 
    mysql_select_db($database); 

    //SURVEY INFORMATION 
    $fname = mysql_real_escape_string($_REQUEST['fname']); 
    $lname = mysql_real_escape_string($_REQUEST['lname']); 
    $cost = mysql_real_escape_string($_REQUEST['cost']); 

    $addClient = "INSERT INTO attendance (first_name, last_name, costume) VALUES ('$fname','$lname', '$cost')"; 
    mysql_query($addClient) or die(mysql_error()); 

    mysql_close($link); 

?> 

내가 점점 오전 오류가 그 경우에도 이름이 guestlist에 없으면 여전히 목록에 있음을 나타냅니다. 그래서 나는 guestlist.php에 대한 Ajax 호출에서 뭔가 잘못하고있을 것입니다. 그러나 나는 무엇이 있는지 전혀 모릅니다. 게스트가 이미 출석 테이블에 넣어 졌는지 확인하기 위해 아약스 호출을 스크립팅하는 데 문제가 있습니다.

+0

페이지가 죽었다고해서 오류 함수가 호출되었다는 것을 의미하지는 않습니다. 오류 함수는 연결에 문제가있는 경우 호출됩니다. 즉. 잘못된 대상 파일 이름 등. 사용자가 목록에 있는지 여부를 확인하는 성공 함수에 논리를 추가해야합니다. – Erik

+1

'die()'또는'exit()'를 사용하여 PHP 스크립트를 종료하더라도'guestList.php' 호출은 성공할 것입니다. 응답은 비어있을 것입니다. 'guestList.php'에서 값을 반환하고 콜백에서이 값을 확인하여 사용자가 guestlist에 있는지 여부를 알아야합니다. – Cyclonecode

답변

1

,이 같은 작업을해야합니다 :

$checkClient = "SELECT * FROM guestlist 
       WHERE first_name = ".$fname." AND 
         last_name = ".$lname; 
$result = mysql_query($checkClient); 
$count = mysql_num_rows($result); 
mysql_close($link); 
// output 1 or 0 stating if the user is on the list or not 
echo ($count ? 1 : 0); 
exit(); 

그러면 ajax 콜백에서 다음과 같은 확인을 할 것입니다 :

success:function(e) { 
    alert((e == 1 ? "User is on list" : "User isn't on list")); 
+0

고마워 ... 그게 완벽하게 작동 ... 나는 내 질문의 두 번째 부분에 대해 비슷한 것을 할 수 있다고 가정하고있다. 손님이 이미 체크인했는지 확인한다. – Murphy1976

+0

나는 그렇게 생각한다. 세션에 사용자 데이터를 저장하거나, 사용자가 데이터베이스에 로그인했는지 여부를 표시합니다. 또한 스크립트에서'json' 및'html'과 같은 다른 형식으로 데이터를 반환하는지 확인해야합니다. – Cyclonecode

+0

나는 e == 0인지를 확인할 수 있었으면 좋겠다. mysql_num_rows()는 매개 변수 1이 리소스가 될 것을 기대한다. – Murphy1976

1

REST 원칙에 따르면 HTTP 200으로 POST 요청에 응답하면 리소스가 성공적으로 만들어 졌음을 의미합니다. HTTP 400으로 응답하고 text/html/json/xml 형식의 오류에 대한 자세한 정보를 제공 할 수 있습니다. 당신이 guestList.php에서 값을 반환해야합니다 내 의견에 말했듯이

가 folowing 코드를 추가

에 한번 이렇게,

$query = mysql_query($addClient) or die(mysql_error()); 

if(mysql_num_rows($query) > 0) 
{ 
    header('HTTP/1.1 500 Internal Server Error'); 
    echo 'this is an error message'; 
} 
+0

편집보기 - 헤더를 잘못 설정했습니다. – verheesj

+0

사용자가 목록에 있는지 여부를 나타내는 값을 반환하는 것이 더 나은 방법이라고 생각합니다. 위의 코드는 요청이 실제로 실패하는 이유를 알 수 없게 만듭니다. – Cyclonecode

+0

die() 내에 오류 메시지를 넣습니다. – verheesj

0

적어도 잘못된 쿼리를 실행하려고하면 PHP 스크립트에서 오류가 발생하지 않습니다. 쿼리는 형식이 잘못되어 데이터베이스에서 행을 가져 오지 않아 오류가 발생하지 않으므로 오류없이 실행됩니다.