Как передать и получить значение php для jquery
У меня есть одна проблема при передаче значения, и я не могу передать его через строку запроса. Мой PHP:
<div class="menu">
<div class="sub_menu_header">ABOUT</div>
<?php
$query1="SELECT id,title FROM aboutus_tbl";
$resulto=mysql_query($query1);
while ($row = mysql_fetch_array($resulto)) {
?>
<a href="about" class="menuid" id="<?php echo $row['id'];?>"><div class="<?php echo $row['title'];?>" id="sub_menu"><?php echo $row['title'];?>
</div></a>
<?php
}
?>
</div>
JQuery
<script>
$(".menuid").click(function() {
date_time = $(this).attr('id');
console.log(data);
$.ajax({
type: 'POST',
url: 'about',
data: {"aboutus_id" : date_time},
success: function(data){
alert( data );
}
});
});
</script>
Полный код:
<?php ob_start(); include('web/header.php');?>
<!--main-->
<div class="main_btm">
<div class="wrap">
<div class="main">
<div class="new_head"><font size="5" color="#FC2B5F">
<script>
$(".menuid").click(function() {
date_time = $(this).attr('id');
console.log(data);
$.ajax({
type: 'POST',
url: 'about',
data: {"aboutus_id" : date_time},
success: function(data){
alert( data );
}
});
});
</script>
<?php
if (isset($_POST['aboutus_id'])) {
$id=$_POST['aboutus_id'];
echo $id;
}
else{
$id=1;
}
$que="SELECT title FROM aboutus_tbl WHERE id='".$id."'";
$re=mysql_query($que);
$r=mysql_fetch_array($re);
echo $r[0];
?>
</font></div>
<div class="menu">
<div class="sub_menu_header">ABOUT</div>
<?php
$query1="SELECT id,title FROM aboutus_tbl";
$resulto=mysql_query($query1);
while ($row = mysql_fetch_array($resulto)) {
?>
<a href="about" class="menuid" id="<?php echo $row['id'];?>"><div class="<?php echo $row['title'];?>" id="sub_menu"><?php echo $row['title'];?>
</div></a>
<?php
}
?>
</div>
<div class="contant">
<div class="con_details">
<?php
$query="SELECT * FROM aboutus_tbl WHERE id='".$id."'";
$res=mysql_query($query);
$result=mysql_fetch_array($res);
$d1_per=explode(" ", $result['desc1']);
$d1_lenth=sizeof($d1_per);
$d2_per=explode(" ", $result['desc2']);
$d2_lenth=sizeof($d2_per);
$d3_per=explode(" ", $result['desc3']);
$d3_lenth=sizeof($d3_per);
if ($result['sub_title1']) {
?>
<legend><font size="5"><?php echo $result['sub_title1'];?></font></legend>
<?php
}
if ($result['desc1']) {
for ($i=0; $i < $d1_lenth; $i++) {
echo "<p>".$d1_per[$i]."</p>";
}
}
if ($result['sub_title2']) {
?>
<legend><font size="5"><?php echo $result['sub_title2'];?></font></legend>
<?php
}
if ($result['desc2']) {
for ($i=0; $i < $d2_lenth; $i++) {
echo "<p>".$d2_per[$i]."</p>";
}
}
if ($result['sub_title3']) {
?>
<legend><font size="5"><?php echo $result['sub_title3'];?></font></legend>
<?php
}
if ($result['desc3']) {
for ($i=0; $i < $d3_lenth; $i++) {
echo "<p>".$d3_per[$i]."</p>";
}
}
?>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
window.onload = function() {
$(document).ready(function() {
$('.<?php echo $result['title']?>').addClass('sub_menu_selected');
});
}
</script>
<?php include('web/footer.php'); ob_flush();?>
В приведенном выше коде я показываю меню в тегах <div>
и <a>
, поэтому я могу щелкнуть его. Моя проблема в том, что когда я нажимаю на меню, он должен принимать id
класса menuid
, но он не работает, а $_POST['aboutus_id']
не получает никакого значения.
Ответы
Ответ 1
попробуйте этот код: -
если вы хотите перенаправить пользователя:
header('Location: http://ashvin.com/page.php?' . http_build_query($_GET, '', '&')); die();
Если вы хотите просто получить страницу, используйте следующую команду:
file_get_contents('http://ashvin.com/page.php?' . http_build_query($_GET, '', '&'));
а другой: -
<a href="/exsomeurl.php?id=1&name=Jose" class="ajax-link"> Click </a>
<a href="/exsomeurl.php?id=2&name=Juan" class="ajax-link"> Click </a>
<a href="/exsomeurl.php?id=3&name=Pedro" class="ajax-link"> Click </a>
...
<a href="/exsomeurl.php?id=n&name=xxx" class="ajax-link"> Click </a>
<script type="text/javascript">
$(function() {
$('.ajax-link').click( function() {
$.get( $(this).attr('href'), function(msg) {
alert( "Data Saved: " + msg );
});
return false; // don't follow the link!
});
});
</script>
Ответ 2
Вы можете использовать id
в ссылке вместо элемента hidden
.
<a href="about.php" id="<?php echo $row['id'];?>">
<div class="<?php echo $row['title'];?>" id="sub_menu"><?php echo $row['title'];?></div>
</a>
Ответ 3
Это значение можно передать в href
<a href="about.php?aboutus_id=<?php echo $row['id'];?>" id="<?php echo $row['id'];?>" class="<?php echo $row['title'];?>">
<?php echo $row['title'];?>
</a>
теперь, когда вы нажмете ссылку
Ваша страница будет выглядеть примерно так:
about.php? Aboutus_id = 10
используйте это значение с помощью $_GET
if(isset($_GET['aboutus_id']) && $_GET['aboutus_id']!="")
{
echo $_GET['aboutus_id'];
}
Ответ 4
Если столбец id вашей таблицы aboutus_tbl имеет тип INT, то часть вашего кода, которая заключает идентификатор в кавычки, приведет к нулевому результату запроса. Идентификатор, переданный из элемента html, будет в форме строки "3"
, поэтому вы должны проанализировать целочисленное значение из $id для стартеров. Это также сделает ваш код менее уязвимым для SQL-инъекции, и вы, несомненно, потерпите поражение, оценив вход пользователя в SQL напрямую, рассмотрите следующее. Пользователь делает html-форму post ;DROP TABLE aboutus_tbl--
вместо идентификатора! Вот уязвимый код:
`
if (isset($_POST['aboutus_id'])) {
$id=$_POST['aboutus_id'];
echo $id;
}
else{
$id=1;
}
$que="SELECT title FROM aboutus_tbl WHERE id='".$id."'";`
Я бы рекомендовал изменить $id=$_POST['aboutus_id'];
на $id=intval($_POST['aboutus_id']);
и удалить кавычки вокруг последней строки следующим образом:
$que="SELECT title FROM aboutus_tbl WHERE id=$id";`
php будет читать переменные из двойных кавычек ""
без конкатенации. Надеюсь, это поможет вам!
Изменить: помните, что единственный верный способ предотвратить инъекцию - использовать PDO или подготовленные инструкции: Попробуйте this, чтобы изучить подготовленные заявления или здесь является достойным примером PDO. Кроме того, помните, что > PHP5.5 mysql не рекомендуется! Использовать mysqli!
Ответ 5
Кажется, что у вас есть только один файл, и вы хотите, чтобы он отображал то, что вы хотите, чтобы пользователь мог видеть и выбирать, а также получать ввод пользователя и отправлять обратно самому себе. Простите меня, если я ошибаюсь. Однако, хотя это возможно, я бы не посоветовал вам принять этот подход.
Разделите файл на два основных файла:
- Разметка (HTML/PHP) и JS, которые отображают то, что пользователь должен видеть изначально. Это загружаемая страница:
my.domain.com/index.php
- PHP, который будет получать пользовательский ввод, подключиться к базе данных и выводить/возвращать результат. Это будет значение
url
в вашем вызове ajax: /about.php
Первый файл: index.php(например)
Может потребоваться очистка
<!-- index.php ...hopefully header include jquery.js -->
<?php ob_start(); include('web/header.php');?>
<!--main-->
<div class="main_btm">
<div class="wrap">
<div class="main">
<div class="new_head"><font size="5" color="#FC2B5F">
<script>
//it usually a good idea to put this in it own .js file
$(function() {
$(".menuid").click(function(e) {
e.preventDefault();
var date_time = this.id;
console.log(date_time);
$.ajax({
type: 'POST',
url: '/about.php', //<<--- second file
data: {"aboutus_id" : date_time},
success: function(data){
alert( data );
}
});
});
});
</script>
</font></div>
<div class="menu">
<div class="sub_menu_header">ABOUT</div>
<?php
$query1="SELECT id,title FROM aboutus_tbl";
$resulto=mysql_query($query1);
while ($row = mysql_fetch_array($resulto)) {
?>
<a href="about" class="menuid" id="<?php echo $row['id'];?>"><div class="<?php echo $row['title'];?>" id="sub_menu"><?php echo $row['title'];?>
</div></a>
<?php
}
?>
</div>
<div class="contant">
<div class="con_details">
<?php
$query="SELECT * FROM aboutus_tbl WHERE id='".$id."'";
$res=mysql_query($query);
$result=mysql_fetch_array($res);
$d1_per=explode(" ", $result['desc1']);
$d1_lenth=sizeof($d1_per);
$d2_per=explode(" ", $result['desc2']);
$d2_lenth=sizeof($d2_per);
$d3_per=explode(" ", $result['desc3']);
$d3_lenth=sizeof($d3_per);
if ($result['sub_title1']) {
?>
<legend><font size="5"><?php echo $result['sub_title1'];?></font></legend>
<?php
}
if ($result['desc1']) {
for ($i=0; $i < $d1_lenth; $i++) {
echo "<p>".$d1_per[$i]."</p>";
}
}
if ($result['sub_title2']) {
?>
<legend><font size="5"><?php echo $result['sub_title2'];?></font></legend>
<?php
}
if ($result['desc2']) {
for ($i=0; $i < $d2_lenth; $i++) {
echo "<p>".$d2_per[$i]."</p>";
}
}
if ($result['sub_title3']) {
?>
<legend><font size="5"><?php echo $result['sub_title3'];?></font></legend>
<?php
}
if ($result['desc3']) {
for ($i=0; $i < $d3_lenth; $i++) {
echo "<p>".$d3_per[$i]."</p>";
}
}
?>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
window.onload = function() {
$(document).ready(function() {
$('.<?php echo $result['title']?>').addClass('sub_menu_selected');
});
}
</script>
<?php include('web/footer.php'); ob_flush();?>
Второй файл: about.php
<!-- about.php -->
<?php
if (isset($_POST['aboutus_id'])) {
$id=$_POST['aboutus_id'];
echo $id; //possibly part of the alert
} else {
$id=1;
}
$que="SELECT title FROM aboutus_tbl WHERE id='".$id."'";
$re=mysql_query($que);
$r=mysql_fetch_array($re);
echo $r[0]; //should show on the alert -- ajax call
?>
Ответ 6
Итак, сначала:
console.log(data)
Очевидно, дает ошибку, как в вашем коде, data
не установлен.
Затем вы, вероятно, должны заменить:
url: 'about',
С помощью:
url: '/about',
Кажется основным, но, пожалуйста, сделайте снимок.
Ответ 7
Попробуйте следующее:
<?php ob_start(); include('web/header.php');?>
<!--main-->
<div class="main_btm">
<div class="wrap">
<div class="main">
<div class="new_head"><font size="5" color="#FC2B5F">
<?php
if (isset($_POST['aboutus_id'])) {
$id=$_POST['aboutus_id'];
echo $id;
}
else{
$id=1;
}
$que="SELECT title FROM aboutus_tbl WHERE id='".$id."'";
$re=mysql_query($que);
$r=mysql_fetch_array($re);
echo $r[0];
?>
</font></div>
<div class="menu">
<div class="sub_menu_header">ABOUT</div>
<form action="index.php" id="form" method="post">
<input type="hidden" id="aboutus_id" name="aboutus_id" value="">
<?php
$query1="SELECT id,title FROM aboutus_tbl";
$resulto=mysql_query($query1);
while ($row = mysql_fetch_array($resulto)) {
?>
<a href="#" class="menuid" id="<?php echo $row['id'];?>"><div class="<?php echo $row['title'];?>" id="sub_menu <?php echo $row['id'];?>"><?php echo $row['title'];?>
</div></a>
<?php
}
?>
</form>
</div>
<div class="contant">
<div class="con_details">
<?php
$query="SELECT * FROM aboutus_tbl WHERE id='".$id."'";
$res=mysql_query($query);
$result=mysql_fetch_array($res);
$d1_per=explode(" ", $result['desc1']);
$d1_lenth=sizeof($d1_per);
$d2_per=explode(" ", $result['desc2']);
$d2_lenth=sizeof($d2_per);
$d3_per=explode(" ", $result['desc3']);
$d3_lenth=sizeof($d3_per);
if ($result['sub_title1']) {
?>
<legend><font size="5"><?php echo $result['sub_title1'];?></font></legend>
<?php
}
if ($result['desc1']) {
for ($i=0; $i < $d1_lenth; $i++) {
echo "<p>".$d1_per[$i]."</p>";
}
}
if ($result['sub_title2']) {
?>
<legend><font size="5"><?php echo $result['sub_title2'];?></font></legend>
<?php
}
if ($result['desc2']) {
for ($i=0; $i < $d2_lenth; $i++) {
echo "<p>".$d2_per[$i]."</p>";
}
}
if ($result['sub_title3']) {
?>
<legend><font size="5"><?php echo $result['sub_title3'];?></font></legend>
<?php
}
if ($result['desc3']) {
for ($i=0; $i < $d3_lenth; $i++) {
echo "<p>".$d3_per[$i]."</p>";
}
}
?>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
window.onload = function() {
$(document).ready(function() {
$('.<?php echo $result['title']?>').addClass('sub_menu_selected');
$(".menuid").click(function() {
date_time = $(this).attr('id');
$("#aboutus_id").val(date_time);
$("#form").submit();
//console.log(data);
/* $.ajax({
type: 'POST',
url: 'about',
data: {"aboutus_id" : date_time},
success: function(data){
alert( data );
}
}); */
});
});
}
</script>
<?php include('web/footer.php'); ob_flush();?>
-
$(".menuid").click(function() {...
он должен быть в пределах window.onload
и помещен в конец html-кода.
- Не используйте Ajax для перезагрузки самой страницы.
- Используйте submit из объекта формы для выполнения этой задачи.
- Используйте скрытое поле типа для хранения значения id.
- Поместите путь файла в:
<form action="index.php"...
Ответ 8
Мой ответ будет представлен в виде трех страниц, построенных таким образом:
index.php
<!DOCTYPE html>
<html>
<head>
<title>MyPageTitle</title>
<script src="path/to/javascript.js"></script>
</head>
<body>
<div id="mainContent"></div>
</body>
</html>
script файл (JavaScript)
$( document ).ready( function ()
{
$.ajax( {
url: "path/to/phpscript.php?myGet=true",
type: "GET",
success: function ( response )
{
$( "#mainContent" ).html( response );
},
beforeSend: function ()
{
$( "#mainContent" ).html( "Loading content..." );
}
});
} );
script файл (PHP)
<ul class="menu">
<li><a href="about.php">About</a></li>
<!-- More here -->
</ul>
Вам, очевидно, нужно будет добавить библиотеки jQuery для этого, но это способ сделать это и добавить HTML из заданной страницы AJAX в правильную область.
Надеюсь, это то, что вы ищете.