PDA

View Full Version : سوال: اجرای یک query با onchange شدن یک Combobox



@AM!R!
یک شنبه 30 آبان 1389, 17:17 عصر
سلام دوستان
آیا با php میشه با تغییر یک combobox یک select اجرا کرد و یک جدول رو پر کرد؟

@AM!R!
یک شنبه 30 آبان 1389, 18:12 عصر
متن انتخابی کاربر رو دارم. مشکل اینجاست چطوری با تغییر انتخاب کاربر جدول رو تو همون صفحه دوباره بسازم

xoogle.ir
یک شنبه 30 آبان 1389, 18:29 عصر
اگر یک دکمه submit بذاری تا اطلاعات رو به سمت سرور بفرسته به راحتی میتونی با php این کار رو انجام بدی اما اگر میخای همزمان با انتخاب شدن جدولت پر بشه باید دست به دامن Ajax بشی که من بلد نیستم :لبخند:

@AM!R!
یک شنبه 30 آبان 1389, 18:48 عصر
من هم حدس میزنم چاره کار Ajax باشه

اما آیا میشه با اون یک جدول HTML پر از اطلاعات رو روی سرور ساخت و بسمت کاربر ارسال کرد؟

راستی چرا مدیران سایت تالاری برای Ajax ایجاد نمی کنند؟

binyaft
یک شنبه 30 آبان 1389, 20:11 عصر
اگر یکی از فریم ورک های جاوا اسکریپت رو یاد بگیری آژاکس خیلی راحت میشه !
مثلا با jquery

$('#e').load('db.php',{'name':'mahdi'});

راستی چرا مدیران سایت تالاری برای Ajax ایجاد نمی کنند؟
اژاکس یک فناوری هست که مربوط میشه به javascript ، تالار javascript هم که داریم!

funpatogh
یک شنبه 30 آبان 1389, 22:14 عصر
براتون یک نمونه با آژاکس نوشتم الان که میتونید استفاده کنید
اگه خواستید بگید همینو براتون با jquery هم مینویسم
index.html


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled</title>
<script type="text/javascript">
function result(value){
if(value.length==0){
return;
}

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("result").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","result.php?id="+value,true);
xmlhttp.send(null);
}



</script>
</head>
<body>
<p align="center">
<select name="number_query" id="number_query" onchange="result(this.value);">
<option value="1">record 1</option>
<option value="2">record 2</option>
<option value="3">record 3</option>
</select> <br>
</p><br>
<div id="result" align="center"></div>

</body>
</html>

result.php


<?php
$link=mysql_connect("localhost","root","")or die(mysql_error());
mysql_select_db("test");
mysql_query("SET NAMES utf8");
mysql_set_charset("utf8");
$result=mysql_query("select * from `users` where `id`='".$_GET['id']."' limit 0,1")or die(mysql_error());
if(mysql_num_rows($result)>0){
$row=mysql_fetch_row($result);
$prompt=<<<_END
<table border=1 align=center width=500><tr><th>id</th><th>Username</th><th>Email</th></tr><tr><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td></tr></table>
_END;

}else
$prompt="چیزی موجود نمی باشد";
echo $prompt;
?>
users.sql


-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(100) COLLATE utf8_persian_ci NOT NULL,
`email` varchar(100) COLLATE utf8_persian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', 'Mohammad', 'funpatogh.com@gmail.com');
INSERT INTO `users` VALUES ('2', 'Reza', 'reza.optima@yahoo.com');
INSERT INTO `users` VALUES ('3', 'Test', 'test@aol.com');
یک دیتابیس به اسم test بساز و این بک آپ رو توش import کن

@AM!R!
سه شنبه 02 آذر 1389, 16:40 عصر
سلام
لذت بردم از پاسختون
ولی 2 تا مشکل وجود داره:
1- در IE وقتی می خوام متن انتخابی کاربر رو از Combobox به فایل دیگه بفرستم ، هیچ چیزی برای اون فایل نمی ره
با Get , post تست کردم ولی برای اعداد مشکلی نداره البته تو FF همچین چیزی نیست

2- مشکل مهمتر اینکه

$result=mysql_query("select * from `users` where `id`='".$_GET['id']."' limit 0,1")or die(mysql_error());


select من به این صورت و از دو جدول چند تا رکورد به دست میاره :

$query="select educate.membershipID,educate.date_,person.name,per son.family,person.father,person.shsh,person.worklo c from educate,person where educate.membershipID=person.id and educate.codeedu='edu_onvan'";


یعنی با while باید نتیجه رو تو جدول نشون بدم

$sql="select educate.membershipID,educate.date_,person.name,per son.family,person.father,person.shsh,person.worklo c from educate,person where educate.membershipID=person.id and educate.codeedu='edu_onvan'";
$res=mysql_query($sql) or die(mysql_error());
$x=1;
while($row=mysql_fetch_assoc($res))
{

?>
<tr>
<td align="center"><?php echo $x; ?></td>
<td align="center"><?php echo $row['membershipID']; ?></td>
<td align="center"><?php echo $row['name']; ?></td>
<td align="center"><?php echo $row['family']; ?></td>
<td align="center"><?php echo $row['father'];?></td>
<td align="center"><?php echo $row['shsh']; ?></td>
<td align="center"><?php echo $row['workloc']; ?></td>
<td align="center"><?php echo $row['date_']; ?></td>
</tr> <?php
$x++;
} ?>

</table>

funpatogh
سه شنبه 02 آذر 1389, 21:46 عصر
منظورتون اینه که اعداد رو میفرسته به فایل php اما حروف رو خیر؟
امتحان کردید که توی فایل php میرسه یا خیر؟
ممکنه توی php ایراد باشه

@AM!R!
چهارشنبه 03 آذر 1389, 10:10 صبح
دقیقا IE با دریافت عدد از فایل هیچ مشکلی نداره اما وقتی text رو از combobox میفرستی به فایل php نمی رسه

var model = document.getElementById("text_onvan");
var combotext = model.options[model.selectedIndex].value;
var comboindex = model.selectedIndex;

combotext ارسال نمی شه اما comboindex ارسال میشه!!!! فقط IE این طوریه FF و Google Chrome و Safari و opera این مشکل رو ندارن
اما این مشکل رو حل کردم (عدد ارسال کردم) اما اون مشکل دومی هنوز حل نشده

funpatogh
چهارشنبه 03 آذر 1389, 20:52 عصر
توی بخش جاوا نحوه دسترسی به value و index هاشون فرق میکنه که شما اصلاح کردید درست شده
توی کد های جاوا من یک url رو به صورت get اجرا کردم


xmlhttp.open("GET","result.php?id="+value,true);

یعنی مثلا result.php?id=10
توی result.php هر جوری که دوست داری بنویس و مقادیر رو از url با get بگیر

@AM!R!
پنج شنبه 04 آذر 1389, 10:58 صبح
ممنون

حالا راه حلی برای برگرداندن جدول چند سطری از فایل php به صفحه اصلی دارین؟

funpatogh
پنج شنبه 04 آذر 1389, 17:00 عصر
خوب جداول رو با هم join کنید
مقداری هم که قرار هست بفرستی و بر اساس اون جستجو انجام بشه رو از طریق جاوا اسکریپت بفرستید

@AM!R!
پنج شنبه 04 آذر 1389, 18:40 عصر
منظور من بر اساس این راه حل شماست که می خوام به جای یک جدول تک سطری یک جدول چند سطری با Ajax به فایل بفرستم

یعنی همون فایل result.php


براتون یک نمونه با آژاکس نوشتم الان که میتونید استفاده کنید
اگه خواستید بگید همینو براتون با jquery هم مینویسم
index.html


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled</title>
<script type="text/javascript">
function result(value){
if(value.length==0){
return;
}

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("result").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","result.php?id="+value,true);
xmlhttp.send(null);
}



</script>
</head>
<body>
<p align="center">
<select name="number_query" id="number_query" onchange="result(this.value);">
<option value="1">record 1</option>
<option value="2">record 2</option>
<option value="3">record 3</option>
</select> <br>
</p><br>
<div id="result" align="center"></div>

</body>
</html>

result.php


<?php
$link=mysql_connect("localhost","root","")or die(mysql_error());
mysql_select_db("test");
mysql_query("SET NAMES utf8");
mysql_set_charset("utf8");
$result=mysql_query("select * from `users` where `id`='".$_GET['id']."' limit 0,1")or die(mysql_error());
if(mysql_num_rows($result)>0){
$row=mysql_fetch_row($result);
$prompt=<<<_END
<table border=1 align=center width=500><tr><th>id</th><th>Username</th><th>Email</th></tr><tr><td>$row[0]</td><td>$row[1]</td><td>$row[2]</td></tr></table>
_END;

}else
$prompt="چیزی موجود نمی باشد";
echo $prompt;
?>
users.sql


-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`username` varchar(100) COLLATE utf8_persian_ci NOT NULL,
`email` varchar(100) COLLATE utf8_persian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('1', 'Mohammad', 'funpatogh.com@gmail.com');
INSERT INTO `users` VALUES ('2', 'Reza', 'reza.optima@yahoo.com');
INSERT INTO `users` VALUES ('3', 'Test', 'test@aol.com');
یک دیتابیس به اسم test بساز و این بک آپ رو توش import کن

@AM!R!
یک شنبه 07 آذر 1389, 16:20 عصر
جناب funpatogh چیزی به نظرتون نرسید؟

funpatogh
یک شنبه 07 آذر 1389, 20:12 عصر
شما اگر صفحتون رو + 2 تا جدولی که میخوان نشان بدهی رو اینجا بزاری و توضیح کامل بدهی میتونم کمکتون کنم اما مشکل اینجاست که من دقیق نمیدونم مشکل کار شما کجاست؟

@AM!R!
دوشنبه 08 آذر 1389, 19:18 عصر
با سلام

کد صفحه گیرنده مقدار اینه:

<?php
$id = $_GET['value'];


$db=mysql_pconnect("localhost","---------------","-------------------");

if(!$db)
{
echo " خطا ";
exit;
}
mysql_select_db("-----------",$db);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");

$query="select * FROM program WHERE id='$id'";
$result=mysql_query($query) or die("خطا !!");
$row=mysql_fetch_assoc($result);
$onvan=$row['onvan'];

$query="select educate.membershipID,educate.date_,person.name,per son.family,person.father,person.shsh,person.worklo c FROM educate,person WHERE educate.membershipID=person.id AND educate.codeedu='$onvan'";

$result=mysql_query($query) or die("خطا !!");

//Build Result String
$display_string = "<table border=1 align=center width=500>";
$display_string .= "<tr align='center' scope='col'>";
$display_string .= "<th>ردیف</th>";
$display_string .= "<th>کد عضویت</th>";
$display_string .= "<th>نام</th>";
$display_string .= "<th>نام خانوادگی</th>";
$display_string .= "<th>نام پدر</th>";
$display_string .= "<th>شماره شناسنامه</th>";
$display_string .= "<th>شاغل در</th>";
$display_string .= "<th>تاریخ ثبت نام</th>";
$display_string .= "</tr>";

$x=1;
// Insert a new row in the table for each person returned
while($row=mysql_fetch_assoc($result)){
$display_string .= "<tr align='center'>";
$display_string .= "<td>$x</td>";
$display_string .= "<td>$row['membershipID']</td>";
$display_string .= "<td>$row['name']</td>";
$display_string .= "<td>$row['family']</td>";
$display_string .= "<td>$row['father']</td>";
$display_string .= "<td>$row['shsh']</td>";
$display_string .= "<td>$row['workloc']</td>";
$display_string .= "<td>$row['date_']</td>";
$display_string .= "</tr>";
$x++;

}

$display_string .= "</table>";
echo $display_string;
?>

وقتی میخواد در حلقه while سطرهای جدول رو بسازه به

$display_string .= "<td>$row['membershipID']</td>";
و خط های بعدیش این خطا رو میگیره:


Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/qcngoir1/public_html/memberships/formedu_ajx.php on line 44

البته من از اجرای دقیق و بی نقص select مطمئن هستم چکش کردم

funpatogh
دوشنبه 08 آذر 1389, 20:52 عصر
عزیز توی کدهاتون Syntax Error دارید
به این شکل اصلاح کنید


<?php
$id = $_GET['value'];


$db=mysql_pconnect("localhost","---------------","-------------------");

if(!$db)
{
echo " خطا ";
exit;
}
mysql_select_db("-----------",$db);
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");

$query="select * FROM program WHERE id='$id'";
$result=mysql_query($query) or die("خطا !!");
$row=mysql_fetch_assoc($result);
$onvan=$row['onvan'];

$query="select educate.membershipID,educate.date_,person.name,per son.family,person.father,person.shsh,person.worklo c FROM educate,person WHERE educate.membershipID=person.id AND educate.codeedu='$onvan'";

$result=mysql_query($query) or die("خطا !!");

//Build Result String
$display_string = "<table border=1 align=center width=500>";
$display_string .= "<tr align='center' scope='col'>";
$display_string .= "<th>ردیف</th>";
$display_string .= "<th>کد عضویت</th>";
$display_string .= "<th>نام</th>";
$display_string .= "<th>نام خانوادگی</th>";
$display_string .= "<th>نام پدر</th>";
$display_string .= "<th>شماره شناسنامه</th>";
$display_string .= "<th>شاغل در</th>";
$display_string .= "<th>تاریخ ثبت نام</th>";
$display_string .= "</tr>";

$x=1;
// Insert a new row in the table for each person returned
while($row=mysql_fetch_assoc($result)){
$display_string .= " <tr align='center'> ";
$display_string .= "<td>$x</td>";
$display_string .= "<td>$row[membershipID]</td>";
$display_string .= "<td>$row[name]</td>";
$display_string .= "<td>$row[family]</td>";
$display_string .= "<td>$row[father]</td>";
$display_string .= "<td>$row[shsh]</td>";
$display_string .= "<td>$row[workloc]</td>";
$display_string .= "<td>$row[date_]</td>";
$display_string .= "</tr>";
$x++;

}

$display_string .= "</table>";
echo $display_string;
?>

@AM!R!
سه شنبه 09 آذر 1389, 16:18 عصر
واقعا ممنون
اما تعجب می کنم!!!!!!!! من خیلی جاها از کوتیشن تکی استفاده کردم بدون مشکل ولی اینجا نمی فهمم؟

ولی بهرحال دستت درد نکنه


جناب funpatogh عزیز

یک سوال دیگه داشتم

کدی با php برای چاپ صفحه بصورتی که مثالا همین جدول فقط تو چاپ باشه وجود داره؟

funpatogh
سه شنبه 09 آذر 1389, 22:12 عصر
با php فکر نمیکنم
اکثرا از window.print در جاوا اسکریپت استفاده میکنند