2013-10-06 5 views
2

У меня есть три вещи.jQuery сериализованные данные не вставляются в базу данных

Я отправляю информацию в jQuery, используя следующую форму HTML.

 <div id="note_add_container"> 
      <form id="note_add" method="post"> 
       <input type="text" name="name" placeholder="name" /> 
       <input type="text" name="location" placeholder="location" /> 
       <button id="submit_note">Add note!</button> 
      </form> 
     </div> 

Это сценарий jQuery, который я использую для публикации такой сериализованной информации в базе данных.

$('button').click(function() { 
     $.ajax ({ 
      type: "POST", 
      url: "post.php", 
      data: $('#note_add').serialize(), 
      success: function(){ 
        alert("Done"); 
      } 
     });  
    }); 

Это PHP, который вставляет информацию в базу данных.

$name = $_POST['name']; 
$location = $_POST['location']; 

$sql = "INSERT INTO get (name, location) 
VALUES ('$name', '$location')"; 
if (!mysqli_query($connection, $sql)) { 
    die('Error: ' . mysqli_error($link)); 
} 

Это не работает. Я нажимаю кнопку, и ничего не происходит. Предупреждение не срабатывает. Может ли кто-нибудь привести меня в правильном направлении относительно того, почему мой код не работает?

+0

предлагают заглавной тип Аякса POST –

+0

@ Асансан сделал и не повезло, сэр. –

ответ

1

Это не работает. Я нажимаю кнопку, и ничего не происходит. Предупреждение не срабатывает

Вы абсолютно уверены, что работает обработчик кликов? Вы должны убедиться, что он работает в первую очередь, например,

$('button').click(function() { 
     alert('It works'); 
    }); 

Если он работает, то вы можете двигаться дальше. В противном случае проверьте, не загружена ли его внутри DOMReady$(function(){ ... }) и загружена jquery.js.

Предполагая, что это работает,

Как вы знаете, что ваш PHP скрипт возвращает? Вы просто предположим, что он «должен работать», здесь:

success: function(){ 
    alert("Done"); 
} 

success() метод действительно имеет переменную, которая является ответом, который приходит со стороны сервера.Она должна быть переписана,

success: function(serverResponse){ 
    alert(serverResponse); 
} 

Как для PHP скрипт,

if (!mysqli_query($connection, $sql)) { 
    die('Error: ' . mysqli_error($link)); 
} 

Вы только обработку неудачи на 'эхо' сообщения об ошибках. Вы не справляетесь с ситуацией, когда mysqli_query() возвращает TRUE. Вы должны отправить что-то вроде 1, что указывает на успех.

И, наконец, ваш код должен выглядеть так,

$('#submit_note').click(function() { 
     $.ajax ({ 
      type: "POST", 
      url: "post.php", 
      data: $('#note_add').serialize(), 
      success: function(serverResponse) { 
        if (serverResponse == "1") { 
        alert('Added. Thank you'); 
        } else { 
        // A response wasn't "1", then its an error 
        alert('Server returned an error ' + serverResponse); 
        } 
      } 
     });  
    }); 

PHP:

$sql = "INSERT INTO get (name, location) 
VALUES ('$name', '$location')"; 

if (!mysqli_query($connection, $sql)) { 
    die(mysqli_error($connection)); 
} else { 
    die("1"); // That means success 
} 

/** 
* Was it $connection or $link?! Jeez, you were using both. 
* 
*/ 
+0

Мне потребовалось 2 года, чтобы отметить этот вопрос как Спасибо. –

0

Функция обратного вызова, указанная в вашем вызове $.ajax, будет срабатывать только при получении ответа от сервера. Поскольку вы никогда ничего не отправляете клиенту с сервера после того, как данные вставляются в базу данных, клиент никогда не вызывает alert("Done");. Добавьте строку в ваш PHP-файл, который отправляет ответ клиенту после успешной вставки SQL. Ответ может быть таким же простым, как объект JSON, который сообщает {'status': 'success'}.

+0

Ничего не вставляется в базу данных. Сериализованные данные jQuery не вставлены в базу данных. –

+0

Причина, по которой ничто не является «предупреждением», все еще стоит. Однако проблема вставки данных не является полностью другой. Можете ли вы проверить значения '$ name' и' $ location', чтобы убедиться, что они правильно заполняются из запроса? – jayhendren

+0

Работает как шарм, когда я вынимаю jQuery и добавляю action = "" к предоставленной форме. Теперь об их проверке, как я могу это сделать? Веб-страница не перезагружает или не возвращает что-либо или не приводит меня в файл php. Большое спасибо за помощь. –

-1

Добавьте следующие строки в файл PHP, чтобы отправить ответ обратно:

HttpResponse::setCache(true); 
HttpResponse::setContentType('text/html');  
HttpResponse::setData("<html>Success</html>"); 
HttpResponse::send(); 
flush(); 

изменить вызов Ajax следующим образом, чтобы увидеть результат:

$('#submit_note').click(function() { 
     $.ajax ({ 
      type: "POST", 
      url: "post.php", 
      data: $('#note_add').serialize(), 
      success: function(respData) { 
        console.log('Response:', respData) 
        alert("Done"); 
      } 
     });  
    }); 
0

Вы должны применить лучший способ обрабатывайте свою форму. Сериализация() помогает, но лучше работать с данными в строку JSON. При использовании JSO вам также нужно будет установить тип данных в вызове ajax.

$('#note_add').submit(function (event) { 
    event.preventDefault(); 

    var formdata = $('#note_add').serializeArray(); 
    var formobject = {}; 

    $(formdata).each(function (event) { 
     formobject[formdata[event].name] = formdata[event].value; 
    }); 

    var data = { 
     action: "formsend", 
     json: JSON.stringify(formobject) 
    }; 

    //* * send with ajax * * 

    function sendajax(data) { 
     var deferred = $.ajax({ 
      method: "post", 
      url: "ajax.php", 
      dataType: "json", 
      data: data 
     }); 
     return deferred.promise(); 
    } 

    sendajax(formdata).done(function (response) { 
     console.log(response); 
     if (response.success == true) { 
      alert("Done!"); 
     } 
    }) 
}); 

задвижка с PHP

if(isset($_POST['action']) && $_POST['action'] == 'formsend') { 

    $data = json_decode($_POST['json']; 

// here you can now access the $data with the fieldnames 

    $name = $data->name; 
    $location = $data->location; 

// Write to the database 
$sql = "INSERT INTO get (name, location) VALUES ('$name', '$location')"; 
if (!mysqli_query($connection, $sql)) { 
    die('Error: '.mysqli_error($link)); 
} 

if (mysqli_affected_rows($connection) > 0) { 
    echo json_encode(array("success" = > true, "message" = > "data is submitted")); 
} else { 
    echo json_encode(array("success" = > false, "message" = > "an error occurred")); 
} 
} 
+0

OP хочет знать, возвращает ли' mysqli_query() 'true' или' false'. Единственное значение. Почему вы отправляете несколько значений? – Yang

-1
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<script type="text/javascript" src="js/jquery-1.7.min.js"></script> 
<title></title> 
</head> 
<body> 
<div id="note_add_container"> 
    <form id="note_add" method="post"> 
    <input type="text" name="name" placeholder="name" /> 
    <input type="text" name="location" placeholder="location" /> 
    <button id="submit_note">Add note!</button> 
    </form> 
</div> 
<div id="response"> </div> 
</body> 
<script type="text/javascript"> 
     $("#submit_note").click(function() { 
      var url = "post.php"; // the script where you handle the form input. 
      $.ajax({ 
        type: "POST", 
        url: url, 
        data: $("#note_add").serialize(), // serializes the form's elements. 
        success: function(data) 
        { 
         $('#response').empty(); 
         $('#response').append(data); // show response from the php script. 
        } 
       }); 

     return false; // avoid to execute the actual submit of the form. 
    }); 
    </script> 
</html> 

post.php

// Insert here your connection path 

<?php 
if((isset($_REQUEST['name']) && trim($_REQUEST['name']) !='') && (isset($_REQUEST['location']) && trim($_REQUEST['location'])!='')) 
{   
    $name = addslashes(trim($_REQUEST['name'])); 
    $location = addslashes(trim($_REQUEST['location']));  

    $sql = "INSERT INTO get (name, location) VALUES ('".$name."', '".$location."')"; 
    if (!mysqli_query($connection, $sql)) { 
    die('Error: ' . mysqli_error($link)); 
    } 

    echo "1 record added"; 
} 
?> 
Смежные вопросы