0

jqueryでページを更新せずにフォームを送信したい。

しかし、データがデータベースに挿入されなかった理由がわかりません。以下のコードに問題はありますか?

その前に、ここを参照しましたが、書き間違えていないことを願っています。

HTML

<form id="submit">
    <fieldset><legend>Enter Information</legend> <label for="fname">Client First Name:</label> 
    <input id="vName" class="text" type="text" name="vName" size="20" /> 
    <label for="lname">Client Last Name:</label> 
    <input id="vLat" class="text" type="text" name="vLat" size="20" /> 
    <input id="vLng" class="text" type="text" name="vLng" size="20" /> 
    <input id="Add" class="text" type="text" name="Add" size="20" /> 
    <button class="button positive"> <img src="../images/icons/tick.png" alt="" /> Add Client </button></fieldset>
</form>

Javascript

$("form#submit").submit(function() {
// we want to store the values from the form input box, then send via ajax below
var vName     = $('#vName').val();
var vLat      = $('#vLat').val();
var vLng      = $('#vLng').val();
var Add      = $('#Add').val();
    $.ajax({
        type: "POST",
        url: "ajax.php",
        data: "vName="+ vName +"&amp; vLat="+ vLat +"&amp; vLng="+ vLng +"&amp; Add="+ Add,
        success: function(){
            $('form#submit').hide(function(){$('div.success').fadeIn();});

        }
    });
return false;
});

dbtools.inc.php

<?php
      function create_connection()
      {
        $link = mysql_connect("localhost", "root", "52082475");
        if (!$link) {
            die('Could not connect: ' . mysql_error());
        }
        echo 'Connected successfully';
        mysql_close($link);

        mysql_query("SET NAMES utf8");
      }

      function execute_sql($database, $sql, $link)
      {
        $db_selected = mysql_select_db($database, $link)
          or die("Fail <br><br>" . mysql_error($link));

        $result = mysql_query($sql, $link);

        return $result;
      }
?>

ajax.php

<?php

    include ("dbtools.inc.php");
    $link = create_connection();
    // CLIENT INFORMATION
    $vName        = htmlspecialchars(trim($_POST['vName']));
    $vLat         = htmlspecialchars(trim($_POST['vLat']));
    $vLng         = htmlspecialchars(trim($_POST['vLng']));
    $Add          = htmlspecialchars(trim($_POST['Add']));

    $sql  = "INSERT INTO map_db (vName,vLat,vLng,add) VALUES ('$vName','$vLat','$vLng','$Add')";


        $result = execute_sql("map",$sql,$link);        
        mysql_close($link);
        header("location:add.html"); 
        exit(); 
?>
4

4 に答える 4

2

手始めに、PHPコードは安全ではありません(SQLインジェクションとプリペアドステートメントを調べてください)。次に、PHPコードに何かをエコー/印刷させます-クエリの結果。たとえば、JSONまたはXMLを使用して、クエリの結果を出力したい場合があります(良い||悪い)。このようにして、ajaxはsuccess関数でこれを使用して、クエリが成功したかどうかを判断し、エラーまたは成功メッセージを適切に表示できます。

また、ajaxリクエストのエラーにも対応します(こちらを参照)。例えば:

ajax.({
   url:..,
   ....
   error: function() {
   ...
   }
}); 

PHPからの応答を解釈することで、エラーの原因(mysql接続、クエリ、構文、URL、データなど)を特定できるはずです。

幸運を。

于 2012-04-07T07:20:05.397 に答える
0

ajax post メソッドの data フィールドに構文エラーがあると思います...

フォーム全体を投稿する場合は、次を使用します...

var formData= $('form').serialize();

data: formData

または以下のコードを使用して個々のパラメーターを送信します...

data: { 'vName' : vName, 'vLat' :  vLat, 'vLng' : vLng}

私はコーディングのphpスタイルに慣れていません...しかし、これはC#メソッドシグネチャでうまく機能します...投稿されたデータフィールドに従ってphpのコードを変更してください

注: ページをリダイレクト/更新しないように、submit メソッドで preventDefault() を使用します。

于 2012-04-07T07:21:38.820 に答える
0

フォーム データを送信する場合は、フォーム タグを使用する必要はなく、代わりにこのようなボタンを使用します。

<input type = 'image' src ='blah blah' id = 'submit'>

また、クリックイベントを使用する代わりに送信イベントを使用していることがわかります。

于 2012-04-07T07:22:53.040 に答える
0

接続を閉じるべきではないcreate_connection()と思います。その機能は新しいものを開くために存在します:)

ああ、同じメソッドからも を返したいようです。その$linkすべてのコードが実際には必要ない場合でも (明示的にmysql_close()も を使用しても、同じメソッド$linkで 2 つ以上の異なるデータベースに接続する場合を除きます)。脚本)。

サーバー側のコードは非常に弱く、安全ではないようです。ペット プロジェクトであれば問題ありませんが、深刻な事態になる可能性がある場合は、SQL インジェクションや PHP の脆弱性に注意するか、通常はこれを処理する PHP フレームワークを使用する必要があります。

于 2012-04-07T07:26:06.847 に答える