سلام
چطور می شه با تغییر مقدار یک combobox که مثلا نام استانها در آن هست.combobox بعدی که مربوط به شهر های استان ها هست، شهرهای استان خاص که کاربر در combobox اول انتخاب کرده لود بشه.
لطفا اگه با کد توضیح بدید ممنون می شم.
Printable View
سلام
چطور می شه با تغییر مقدار یک combobox که مثلا نام استانها در آن هست.combobox بعدی که مربوط به شهر های استان ها هست، شهرهای استان خاص که کاربر در combobox اول انتخاب کرده لود بشه.
لطفا اگه با کد توضیح بدید ممنون می شم.
یک مثال نوشتم ببین.
index.php
[PHP]<html>[/PHP]
[PHP]
<head>[/PHP]
<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=xmlhtt p.responseText;
}
}
xmlhttp.open("GET","result.php?id="+value,true);
xmlhttp.send(null);
}
</script>
</head>
<body >
<div align="center" >
<select name="number_query" onchange="result(this.value);">
<option value="1">yazd</option>
<option value="2">tehran</option>
<option value="3">esfahan</option>
</select>
</div>
<br>
<div align="center" id="result">
<select>
<option>mehriz</option>
<option>maybod</option>
<option>yazd</option>
</select>
</div>
</body>
</html>
result.php
[PHP]<?php[/PHP][PHP]
$id=$_GET["id"];[/PHP]
print '<select>';
if($id=='1')
{
print '<option>mehriz</option>';
print '<option>maybod</option>';
print '<option>yazd</option>';
}
else if($id=='2')
{
print '<option>1</option>';
print '<option>2</option>';
print '<option>3</option>';
}
else if($id=='3')
{
print '<option>a</option>';
print '<option>b</option>';
print '<option>c</option>';
}
print '</select> ';
?>
index.php
[PHP]<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=xmlhtt p.responseText;
}
}
xmlhttp.open("GET","result.php?id="+value,true);
xmlhttp.send(null);
}
</script>
</head>
<body >
<div align="center" >
<select name="number_query" onchange="result(this.value);">
<option value="1">yazd</option>
<option value="2">tehran</option>
<option value="3">esfahan</option>
</select>
</div>
<br>
<div align="center" id="result">
<select>
<option>mehriz</option>
<option>maybod</option>
<option>yazd</option>
</select>
</div>
</body>
</html>
[/PHP]
result.php
[PHP]<?php
$id=$_GET["id"];
print '<select>';
if($id=='1')
{
print '<option>mehriz</option>';
print '<option>maybod</option>';
print '<option>yazd</option>';
}
else if($id=='2')
{
print '<option>1</option>';
print '<option>2</option>';
print '<option>3</option>';
}
else if($id=='3')
{
print '<option>a</option>';
print '<option>b</option>';
print '<option>c</option>';
}
print '</select> ';
?> [/PHP]
index.phpنقل قول:
[PHP]<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=xmlhtt p.responseText;
}
}
xmlhttp.open("GET","result.php?id="+value,true);
xmlhttp.send(null);
}
</script>
</head>
<body >
<div align="center" >
<select name="number_query" onchange="result(this.value);">
<option value="1">yazd</option>
<option value="2">tehran</option>
<option value="3">esfahan</option>
</select>
</div>
<br>
<div align="center" id="result">
<select>
<option>mehriz</option>
<option>maybod</option>
<option>yazd</option>
</select>
</div>
</body>
</html>
[/PHP]
result.php
[PHP]<?php
$id=$_GET["id"];
print '<select>';
if($id=='1')
{
print '<option>mehriz</option>';
print '<option>maybod</option>';
print '<option>yazd</option>';
}
else if($id=='2')
{
print '<option>1</option>';
print '<option>2</option>';
print '<option>3</option>';
}
else if($id=='3')
{
print '<option>a</option>';
print '<option>b</option>';
print '<option>c</option>';
}
print '</select> ';
?> [/PHP]
index.php
[PHP]<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=xmlhtt p.responseText;
}
}
xmlhttp.open("GET","result.php?id="+value,true);
xmlhttp.send(null);
}
</script>
</head>
<body >
<div align="center" >
<select name="number_query" onchange="result(this.value);">
<option value="1">yazd</option>
<option value="2">tehran</option>
<option value="3">esfahan</option>
</select>
</div>
<br>
<div align="center" id="result">
<select>
<option>mehriz</option>
<option>maybod</option>
<option>yazd</option>
</select>
</div>
</body>
</html>
[/PHP]
result.php
[PHP]<?php
$id=$_GET["id"];
print '<select>';
if($id=='1')
{
print '<option>mehriz</option>';
print '<option>maybod</option>';
print '<option>yazd</option>';
}
else if($id=='2')
{
print '<option>1</option>';
print '<option>2</option>';
print '<option>3</option>';
}
else if($id=='3')
{
print '<option>a</option>';
print '<option>b</option>';
print '<option>c</option>';
}
print '</select> ';
?> [/PHP]
<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=xmlhtt p.responseText;
}
}
xmlhttp.open("GET","result.php?id="+value,true);
xmlhttp.send(null);
}
</script>
</head>
<body >
<div align="center" >
<select name="number_query" onchange="result(this.value);">
<option value="1">yazd</option>
<option value="2">tehran</option>
<option value="3">esfahan</option>
</select>
</div>
<br>
<div align="center" id="result">
<select>
<option>mehriz</option>
<option>maybod</option>
<option>yazd</option>
</select>
</div>
</body>
</html>
از مثال های خوبتون واقعا متشکرم.
من هر کاری کردم نشد:13:
نام فایل ها را همانند نام فایل ذکر شده در پست بگذارید.
و از مثال پست شماره 5 استفاده کنیدو
من در اکثر مرورگرها تست کردم و جواب داد
نقل قول:
نقل قول:
سلام
من مثال شما را به صورت زیر تغییر دادم. مثال شما درست کار می کرد ولی در هنگام اجرای کد زیر وقتی combobox اول را تغییر می دهم دو تا combobox به هم چسبیده در زیر آن ایجاد میشود که یکیش مقدار ندارد و دیگری مقدار درست را می دهد. اشکال کجاست.
index.php
[PHP]<html>
<head>
<?php
include("../site/connect.php");
?>
<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)
{//alert(xmlhttp.responseText);
document.getElementById("result").innerHTML=xmlhtt p.responseText;
}
}
xmlhttp.open("GET","result.php?id="+value,true);
xmlhttp.send(null);
}
</script>
</head>
<body >
<div align="center" >
<?php
$q="select * from typebook";
$res=mysql_query($q);
?>
<select name="number_query" onchange="result(this.value);">
<?php
for($i=0;$i<mysql_num_rows($res);$i++){
$f=mysql_fetch_array($res);?>
<option value="<?php echo $f['idtype'];?>"><?php echo $f['type'];?></option>
<?php }?>
</select>
</div>
<br>
<div align="center" id="result">
<select>
<option></option>
</select>
</div>
</body>
</html>
[/PHP]
result.php
[PHP]<?php
include("../site/connect.php");
$id=$_GET["id"];
print '<select>';
$q1="select * from subtype where idtype=$id";
$res1=mysql_query($q1);
for($j=0;$j<mysql_num_rows($res1);$j++){
$f1=mysql_fetch_array($res1);
print'<option>'.$f1['subtype'].'</option>';
}
print '<select>';
?> [/PHP]
فکر کنم مشکل از کد خط آخر result.php است
که باید به صورت زیر باشد.
[PHP]print '</select> ';
[/PHP]
بله مشکل از خط آخر بود. متشکرم.نقل قول:
سلام[PHP]<html>
من در مثال بالا می خواهم پس از اینکه کاربر combobox ها را onchange کرد در textbox متنی را براساس آنچه که در combobox انتخاب شده از بانک بخواند و در textbox نمایش دهد.
کد را به صورت زیر تغییر دادم ولی چون خیلی به جاوااسکریپت و اینا آشنایی ندارم نمیدونم درست نوشتم یا نه. کار نمیکنه.
یه تابع result2 را در رویداد onchange کمبو باکس دوم قرار دادم. لطفا اگر امکانش هست تابع result2 و فایل result2.php را ببینید.
index.php
<head>
<?php
include("../site/connect.php");
?>
<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)
{//alert(xmlhttp.responseText);
document.getElementById("result").innerHTML=xmlhtt p.responseText;
}
}
xmlhttp.open("GET","result.php?id="+value,true);
xmlhttp.send(null);
}
</script>
<script type="text/javascript">
function result2(){
var select1=document.getElementById('select1').selecte dIndex;
var select2=document.getElementById('select2').selecte dIndex;
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)
{ alert(xmlhttp.responseText);
document.getElementById("rade").value=xmlhttp.resp onseText;
}
}
xmlhttp.open("GET","result2.php?id1="+select1+"&&i d2="+select2,true);
xmlhttp.send(null);
}
</script>
</head>
<body >
<div align="center" >
<?php
$q="select * from typebook";
$res=mysql_query($q);
?>
<select name="number_query" onchange="result(this.value);" id="select1">
<?php
for($i=0;$i<mysql_num_rows($res);$i++){
$f=mysql_fetch_array($res);?>
<option value="<?php echo $f['idtype'];?>"><?php echo $f['type'];?></option>
<?php }?>
</select>
</div>
<br>
<div align="center" id="result">
<select id="select2" onChange="result2();">
<option></option>
</select>
</div>
<input name="rade" type="text" id="rade">
</body>
</html>
[/PHP]
result2.php
[PHP]<?php
include("../site/connect.php");
$id=$_GET["id1"];
$id2=$_GET["id2"];
$q="select * from typebook join subtype using(idtype) where idtype=$id and idsubtype=$id2";
$res=mysql_query($q);$f=mysql_fetch_array($res);
print $f['rade'].$f['zirrade'];
?>[/PHP]
من دیتابیس و اطلاعاتش رو ندارم تست کنم .
[HTML]function result2(){
var select1=document.getElementById('select1');
var select2=document.getElementById('select2');
var vselect1=select1.options[select1.selectedIndex].text;
var vselect2=select1.options[select1.selectedIndex].text;
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)
{ alert(xmlhttp.responseText);
document.getElementById("rade").value=xmlhttp.resp onseText;
}
}
xmlhttp.open("GET","result2.php?id1="+vselect1+"&i d2="+vselect2,true);
xmlhttp.send(null);
}
[/HTML]
چند تا نکته .
فکر کنم اگر به جای کد
[PHP] <?php
for($i=0;$i<mysql_num_rows($res);$i++){
$f=mysql_fetch_array($res);?>
<option value="<?php echo $f['idtype'];?>"><?php echo $f['type'];?></option>
<?php }?>[/PHP]
از کد
[PHP]<?php
while($f=mysql_fetch_array($res)){
?>
<option value="<?php echo $f['idtype'];?>"><?php echo $f['type'];?></option>
<?php }?>[/PHP]
استفاده کنید خیلی راحت تر هستید.
نکته دوم
صحیح بودن اطلاعات ورودی کاربر برای فراخوانی از دیتابیس چک نشده (sql injection)
1-می خوام value شی select رو بفرستم به صفحه result2.php
باید به این صورت باشد؟
[PHP]var select1=document.getElementById('select1');
var vselect1=select1.options[select1.selectedIndex].value;
[/PHP]
2- میشه یه مثال از sql injection بزنید.
var vselect1=select1.options[select1.selectedIndex].value; تعریف نشده.
خب برای گرفتن value از کد زیر استفاده کنید.
[PHP]var select1=document.getElementById('select1');
var vselect1=select1.options[select1.selectedIndex].text;
[/PHP]
مثالی از sql injection
[PHP]
<?php
include("../site/connect.php");
$id=$_GET["id"];
$q1="select * from subtype where idtype=$id";
echo $q1;
print '<select>';
$res1=mysql_query($q1);
for($j=0;$j<mysql_num_rows($res1);$j++){
$f1=mysql_fetch_array($res1);
print'<option>'.$f1['subtype'].'</option>';
}
print '</select>';
?>
[/PHP]
حالا اگر کاربر در url درخواست زیر را وارد کند جدول table1 از دیتابیس حذف میشود. به همین راحتی.
برای جلوگیری میتونید از کد زیر برای id استفاده کنید.کد:result.php?id=1;drop table table1;
[PHP]
$id= mysql_real_escape_string($_GET["id"]);
[/PHP]
اشکالم این بود که باید تابع result2() را در فایل result.php فراخوانی می کردم نه در index.php .
واقعا عالی بود، ممنون
سلام دوستان، منم مشکلی دارم شبیه مشکل دوستمون کویرتنها با این تفاوت که میخوام چند کمبوباکس تو یکه صفح داشته باشم که همه از بانک بخونن و با تغییر اولی محتویات دومی بر اساس انتخاب اولین کمبوباکس باشه و به همین ترتیب با تغییر دومی کمبوباکس سوم گزینه های مرتبط با گزینه انتخاب شده در باکس دوم رو نشون بده
با ارتباط ها مشکلی ندارم تا جایی که گزینه ای از باکس اول انتحاب می کنم دومی بر اساس اولی، دومی گزینه هاشو از بانک میخونه و نمایش داده میشه اما وقتی از باکس دوم گزینه ای رو انتخاب می کنم با اینکه باکس سوم هم درست کار میکنه، متاسفانه کمبو دوم برداشته میشه از تو صفحه
سوال:به نظر شما چطور این مشکل حل میشه؟
سوال2: چطور میشه تو تابع جاوا که در انتهاش فایل resul.php رو قراخوانی میکنه بجاش یه تابع php رو صدا بزنیم؟
ضمنا من تا الان هم از یک تابع جاوا استفاده کردم با دوتا پارامتر ورودی که یکیش پارامتر یا کدی عددی است که براساس اون کمبوباکس دوم گزینه هاشو از بانک میخونه و نمایش میده و دومی هم اسم فایلی است که در انتهای تابع جاوا فراخوانی میشه.
نمونه: در فایل index.php از این پارامترها استفاده کردم ( this.value,'resutl') برای onchange و در فایلهای بعدی بشکل (this.value,'result2) و تو فایلهای بعدی هم پارامتر دوم رو براساس نام فایلی که قراره تو تابع جاوا فراخوانی بشه تغییر دادم یعنی برابر result یک فایل result.php دارم و برابر پارامتر result2 یک فایل result2.php و برای پارامتر result3 هم یک فایل result3.php و بهم همین ترتیب برای کمبوهای بعدی. حال می خوام مثل همین تابع جاوا که یکی شده و هر جا لازمه صداش میکنم، جای این فایلهای php یک تابع php قرار بدم که هرجا لازم شد با پارامترهای مختلف صداش بزنم
در نهایت علاوه بر کم کردن کدها، هدف اصلیم اینه که تا هرچند کمبو باکسی که میخوام اضافه کنم با انتخاب در کمبوباکسهای سوم و چهارم و ... کمبوهای قبلی تو صفحه باشن و بشه ازشون استفاده کنم
پیشاپیش از اینکه وقتتونو میگیرم پوزش می طلبم و از اینکه راهنمایی می فرمایید سپاسگزارم
سوال دارم ؟؟؟؟؟؟؟؟؟؟؟ازکی بپرسم؟؟؟؟:n04:
برای سوالتون تاپیک جداگانه باز کنید و نیاز نیست از کسی بپرسید هرکس که پاسختون رو بدونه جواب میدهنقل قول:
هر وقت تونستید جواب بدین لطفا میخوام یه کد PHP واسه کمبو باکس بنویسم که با انتخاب یکی از گزینه هاش و زدن یه دکمه بره به صفحه مربوط به خودش مثلا یه استان انتخاب کنم بعد یه دکمه رو بزنم که بره به صفحه مربوط به اون استان
هیشکسم نیس که بدونه...............هعی خداااااااا...........ضروریه آخه استادم منو میکشه:n03:
توی یک صفحه POST رو چک میکنید اگر استان POST شده بود، حالا لیست شهرها رو نشون بدید، اگر نشده بود اول استان ها رو نشون بدید:
http://beyamooz.com/php/80-basic/55-%D9%85%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-post_$-%D8%AF%D8%B1-php
سلام اقا من یه مشکل بزرگ دارم نمیدونم چیکارش کنم دستم به دامنتون.
من توی کمبو باکس می خوام مثلا 20 تا لینک سایت قرار بدم ک با انتخاب هر ایتم به سایت مربوطه وارد بشه مثلا
item1>google
item2>yahoo
ولی هر کاریش میکنم بعد ار اینکه لینک ها رو میدم همه ایتم ها یک لینک رو باز میکنن ..چجوری باید تفکیکشون کرد ک ببا انتخاب هر کدوم جدا گانه برن توی سایت مربوطه؟توروخدا جواب بدین
:n34::n37::n30: