Я схожу с ума! Я пытаюсь отправить форму из 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();
?>
Спасибо всем, кто пытался мне помочь! Мне пришлось сделать это так:
$.post("./tellus.php", {tellName:name}, function(data){
alert(data)
});
У ajax-звонка должно быть что-то, что не работает.
Вызов 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
}
})
})
Ура!
Как насчет этого
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);
}
?>
Используйте 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 тоже может работать.
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.
$('.submit').click(function(e){ e.preventDefault(); $.get(...);});
eval()
для возвращаемых данных. Вы также должны НАСТОЯТЕЛЬНО рассмотреть возможность использования POST, а не GET, когда вы изменяете значения в своей базе данных. Делали ли вы какую-либо отладку для самого запроса, чтобы увидеть, получаете ли вы ошибки (поскольку вы вообще здесь не обрабатываете ошибки)?