2012-06-25 3 views
0

양식을 보내주십시오. 제발 저를 도울 수 있는지 궁금합니다.Ajax를 사용하여 MySQL에

가끔은 양식을 설정하고 AJAX를 사용하여 mySQL 데이터베이스에 사용자 입력을 제출하는 방법을 보여주는 자습서/기사를 검색했습니다.

데이터베이스에 데이터를 보내는 방법이 표시되지 않지만 this 기사에서 나에게 좋은 시작점을 알려주 었으며 온라인 메시지와 관련하여 '모양과 느낌'을주었습니다. 내 양식에 통합하십시오.

예제 스크립트를 적용하기 시작했지만 데이터베이스에 데이터를 제출하는 데 어려움이 있습니다. 나는이 부분 변경 한 형태에서

:

$.ajax({ 
      url: contactForm.attr('action') + "?ajax=true", 
      type: contactForm.attr('method'), 
      data: contactForm.serialize(), 
      success: submitFinished 
     }); 

    } 

$.ajax({ 
     url: contactForm.attr('savecontact.php') + "?ajax=true", 
     type: contactForm.attr('post'), 
     data: contactForm.serialize(), 
     success: submitFinished 
    }); 
    } 

하고 PHP 스크립트는, 지금 읽는이를 변경했습니다 :

<?php 

// Read the form values 
$success = false; 
$senderName = isset($_POST['senderName']); 
$senderEmail = isset($_POST['senderEmail']); 
$message = isset($_POST['message']); 


if ($senderName && $senderEmail && $message) { 

    $query = "INSERT INTO `contact` (senderName, senderEmail, message) VALUES ('$senderName', '$senderEmail', '$message')"; 
mysql_query($query) or die(mysql_error()); 
}   
// Return an appropriate response to the browser 
if (isset($_GET["ajax"])) { 
    echo $success ? "success" : "error"; 
} else { 
?> 
<html> 
    <head> 
    <title>Thanks!</title> 
    </head> 
    <body> 
    <?php if ($success) echo "<p>Thanks for sending your message! We'll get back to you shortly.</p>" ?> 
    <?php if (!$success) echo "<p>There was a problem sending your message. Please try again.</p>" ?> 
    <p>Click your browser's Back button to return to the page.</p> 
    </body> 
</html> 
<?php 
} 
?> 

내가 가지고있는 문제는 양식을 보낼 때 sending 메시지가 화면에 나타나 계속해서 멈추는 것입니다. 이 메시지와 데이터 중 일부는 내 데이터베이스로 전송되므로 필자는 그 이유를 확실히 알지 못합니다.

내 경험 부족으로 인해 내가 원하는 결과를 얻는 더 쉬운 방법이있을 수 있고 나는 이것을 너무 단순하게보고있을 수 있음을 인정합니다. 그러나 나는 누군가가 아마도 이걸 좀 봐 주 었는지 의아해했습니다. 내가 어디로 잘못 가고 있는지 알려줘.

많은 감사와 안부

+0

양식에'savecontact.php'와 같은 속성이 없습니다. 자바 스크립트 코드를 롤백해야합니다. –

+0

안녕하세요 @ 트루트, 고마워요. 나는 아래 게시물에 강조 표시된대로 변경했습니다. 친절한 답변 – IRHM

+0

더 많은 PHP를 게시해야합니다. 즉, 변수 $ senderName, $ senderEmail 및 $ message는 어디에 설정해야합니까? – bcmcfc

답변

1

변경 :

contactForm.attr('savecontact.php') 

사람 :

contactForm.attr('action') 

그리고

type: contactForm.attr('post'), 

type: contactForm.attr('method'), 

attr은 태그 속성을 읽는 데 사용됩니다. 이 경우 양식 태그의 action 속성 ,

는 양식의 method 속성에 따라 AJAX를 통해 제출 된 값을 얻을 수 $_POST 또는 $_GET 배열을 사용하는 것 또는 당신은 또한 블래스터의 대답에 또 $_REQUEST (하지만 권장되지 방법)

+0

안녕하세요 @ 블래스터, 도와 주셔서 감사합니다. 내 원래 게시물에서 말했듯이, 나는 상대적으로 새로운이에요, 그래서 내 경험이 분명히 이러한 초기 오류로 이끌었습니다. 나는 당신이 제안한 변화를 만들었지 만, 화면이 더 이상 "보내는 중"메시지에 붙어 있지는 않지만, 불행히도 데이터가 내 데이터베이스로 전송되지 않았다는 것을 의미하는 "문제가 있습니다 ..."라는 메시지가 나타납니다. , 제발 말해 줄래, 내가 잘못 가고있는 어떤 생각을 가지고 있니? 친절 관해서 – IRHM

0

을 사용할 수 있습니다 여기

$senderName = isset($_POST['senderName']); 
$senderEmail = isset($_POST['senderEmail']); 
$message = isset($_POST['message']); 

당신이 POST 변수가 실제 값을 설정하지되었는지 여부의 부울 값으로 그 변수를 설정하는 : PHP 코드는 몇 가지 고정이 필요합니다.

$senderName = mysql_real_escape_string($_POST['senderName']); 
$senderEmail = mysql_real_escape_string($_POST['senderEmail']); 
$message = mysql_real_escape_string($_POST['message']); 

정상적으로 작동해야하지만 SQL 주입에 취약합니다. mysql_* 기능은 더 이상 사용되지 않으며 PDO 또는 MySQLi와 준비된 문을 배우는 것이 좋습니다. 자세한 내용은 PHP 설명서의 this page을 참조하십시오.

+0

안녕하세요 @ bcmcfc, 도와 주셔서 대단히 감사합니다. 이제 데이터가 제 데이터베이스에 저장됩니다. 그러나 이런 일이 발생하더라도 '문제가 있음'을 받기 전에 잠깐 '보내기'메시지가 나타납니다. 이것은 양식이 화면에서 사라지지 않는다는 것을 의미합니다. 나는 몇 가지 테스트를 해봤고 문제는 위의 줄 바뀌 었습니다. 즉,이'$ senderName = isset ($ _POST [ 'senderName'])에? preg_replace ("/ [^ \. \ - \ 'a-zA-Z0-9] /", "", $ _POST ['senderName ']) : ""; 변경된 기능이 제대로 작동하지 않습니다. 어떤 아이디어를 주시겠습니까? 종류는 안부 – IRHM