отправка формы из jquery в php

0

Я схожу с ума! Я пытаюсь отправить форму из jquery в php и вставить запись в мою базу данных. Я не получаю ошибки, но запись не поступает. Все работает нормально, когда я просто перехожу на страницу php и помещаю переменные в URL. Но это не работает, когда я отправляю переменные через страницу jquery. Может ли кто-нибудь помочь мне, пожалуйста?

HTML:

<form id="tellusForm" >
      <div class="formHead">Tell us your story</div>
      <div id="thank">Thank you.</div>
      <table cellpadding="5">
      <tr><td>Name:</td><td><input id="tellName" type="text"/></td></tr>
      <tr><td>Country of origin:</td><td><select id="tellCountry"></select></td></tr>
      <tr><td>Age:</td><td><input type="text" id="tellAge"/></td></tr>
      <tr><td>Occupation:</td><td><input type="text" id="tellOccupation"/></td></tr>
      <tr><td>Email address:</td><td><input type="text" id="tellEmail"/></td></tr>
      <tr><td>Phone number:</td><td><input type="text" id="tellPhone"/></td></tr>
      <tr><td>A bit about you:</td><td><textarea  id="tellAbout" style="width: 100%;"></textarea></td></tr>
      <tr><td></td><td><input type="submit" value="Send" class="submit"/></td></tr>
      </table>
      </form>

JQuery:

$('.submit').click(function(){

        $.get('tellus.php', { name: "laura"}, function(data){
                 eval(data);
        });


});

tellus.php:

<?php
require_once ('../constants_test.php'); 

    $name = $_GET['name'];

    $db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
                if (mysqli_connect_errno()) {
                        printf("Connect failed: %s", mysqli_connect_error());
                        exit;
                }

    $q = "Insert into tellus('Name') values ('" . $name . "')";
    if ($db->query($q)) {
        echo "console.log('you got it')";
    };
    $db->close();

?>
  • 0
    По крайней мере, попытайтесь предотвратить поведение отправки по умолчанию: $('.submit').click(function(e){ e.preventDefault(); $.get(...);});
  • 0
    Не используйте eval() для возвращаемых данных. Вы также должны НАСТОЯТЕЛЬНО рассмотреть возможность использования POST, а не GET, когда вы изменяете значения в своей базе данных. Делали ли вы какую-либо отладку для самого запроса, чтобы увидеть, получаете ли вы ошибки (поскольку вы вообще здесь не обрабатываете ошибки)?
Показать ещё 3 комментария
Теги:
mysqli

5 ответов

1

Спасибо всем, кто пытался мне помочь! Мне пришлось сделать это так:

$.post("./tellus.php", {tellName:name}, function(data){
alert(data)
}); 

У ajax-звонка должно быть что-то, что не работает.

  • 0
    да благословит тебя Бог, Лора !!! исправлено окончательно !!
  • 0
    @Dato: Спасибо тебе тоже!
0

Вызов ajax не работал, потому что вы используете $.serialize для сериализации объектов формы, которые возвращаются;

{key:'tellName', value='name'} // <input name="tellName" value="name" />

тогда как вы ожидаете пару key:value. Чтобы получить данные для отправки ожидаемого, вы должны изменить объект, используя эту функцию jQuery:

$.fn.serializeObject = function(){
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
                o[this.name].push(this.value || '');
            } else  {
                o[this.name] = this.value || '';
            }
        });
    return o;
}

И назовите его, когда вы отправляете форму. Он будет структурировать вашу форму для пары key:value.

<form id="register">
    <input type="text name="username" />
    <input type="text" name="email" />
    <input type="submit value="Register!" />
</form>

и javascript (не забудьте включить функцию serializeObject)

$('#register').on('submit', function(){
    var data = $(this).serializeObject()
    // data will return {username: value, email:value}
    $.post('process.php', data, function(response){
        try{
            var r = JSON.parse(response) // Check if the response is an object
            console.log(JSON.stringify(r))
        }
        catch(e){
            console.log(response) // The response is a string
        }

    })
})

Ура!

0

Как насчет этого

JQuery

$("#submit").click(function() {
    formData = {
        name: "abc"
    }
    $.ajax({
        type: 'GET',
        contentType: 'application/json',
        url: "http://yourpage/tellus.php",
        dataType: "json",
        data: formData,
        success: function(data) {
            console.log(data.message);
        },
        error: function(data) {
            console.log(data.message);
        }
    });
});

PHP

  <?php

// array for JSON response
$response = array();

// check for required fields
if (isset($_GET['name'])) {

    $name = $_GET['name'];

    // include db connect class
    require_once ('../constants_test.php'); 

    // connecting to db
    $db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
                    if (mysqli_connect_errno()) {
                            printf("Connect failed: %s", mysqli_connect_error());
                            exit;
                    }

    // mysqli inserting a new row
    $q = "INSERT INTO tellus('Name') values ('" . $name . "')";

    // check if row inserted or not
    if ($db->query($q)) {
        // successfully inserted into database
        $response["success"] = 1;
        $response["message"] = "you got it";

        // echoing JSON response
        echo json_encode($response);
        $db->close();
    } else {
        // failed to insert row
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";

        // echoing JSON response
        echo json_encode($response);
        $db->close();
    }
} else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);
}
?>
  • 0
    Я вижу, что это происходит, но что-то идет не так на странице Tellus.php. Как я могу устранить неполадки на этой странице?
  • 0
    Или как узнать, какое сообщение об ошибке выдает эта страница?
Показать ещё 16 комментариев
0

Используйте serialize():

$("#tellusForm").on("submit", function() {

    event.preventDefault();

    $.ajax({
      url: 'tellus.php',
      data: $(this).serialize()
    }).done(function(data) {
      $(html).append(data);
    });

});

Также убедитесь, что имена на ваших элементах формы:

<input type="text" name="tellAge" id="tellAge" />

Эта тема очень распространена здесь, поэтому попробуйте найти другие сообщения - например, отправить форму с помощью AJAX, и jQuery тоже может работать.

  • 0
    Я использовал сериализацию, но это не решило мою проблему.
-1
I suggest you should use POST for actions which include insert/delete/update of data in database.  It keeps the data safe.

If you want to still use GET and test out something.  I suggest do not use jquery in the middle to handle the get.  Submit button on click submits the form anyway, so the jquery $.get is unnecessary.

To your form element add 
<form name='' action='tellus.php'>...</form>

This should fix the problem.
  • 0
    Это не Аякс

Ещё вопросы

Сообщество Overcoder
Наверх
Меню