0

私は自分のプロジェクトで HTML と PHP に取り組んでいますが、問題があります。

国を含むドロップダウン リストがあり、ユーザーが国を選択したときに (この国の都市) を含む別のドロップダウン リストを表示したい

私は国データベースと都市データベース( sql )を持っています

それを行うためにJavaスクリプトメソッドを使用しようとしましたが、うまくいきませんでした

これは私のコードです

最初:これは国のドロップダウンリストです。うまくいきます:

<select name="SelectCountry"  id="SelectCountry" onchange="showCity()" >
            <?php 
            $Con= mysql_connect("localhost","root",""); 
if(!$Con) { die('Could not connect'.mysql_error());}
if(!mysql_selectdb("MyDB",$Con)){die(mysql_error());}
$sql = "SELECT *  FROM countries";
$result = mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_array($result)){
       echo ("<option value=\"".$row['CountryID']."\">".$row['Name']."</option>");

}
mysql_close($Con);

次に、これは Java スクリプト関数 showCity() です

<script>
             function showCity()
{

alert("in the function !!");  

Document.write(" <?php echo "<select 'SelectCity' ,'SelectCity'";
            echo "</select>";
            $theCountry=$_GET['SelectCountry'];  // get the country ID
            $Con= mysql_connect("localhost","root",""); 
if(!$Con) { die('Could not connect'.mysql_error());}
if(!mysql_selectdb("MyDB",$Con)){die(mysql_error());}
$sql = "SELECT * FROM cities WHERE  cities.Fips=(SELECT Fips FROM countries WHERE CountryID='$theCountry')"; // retrive the cities for the spicific country (work when I enter the ID manully in the sql query e.g CountryID='43')

$result = mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_array($result)){
       echo ("<option value=\"".$row['Fips']."\">".$row['Fullname']."</option>"); // print all the cities in a menu (work when I enter the ID manully in the sql query e.g CountryID='43') 
}
mysql_close($Con);
             ");"; ?> ");
}
</script>

このメソッドは、ユーザーがOnchangeイベントを使用して国を変更したときに、特定の国の都市の新しいドロップダウン リストを作成することです。

あなたが私を助けてくれることを願っています

質問や誤解があれば、答えるか説明する準備ができています

ありがとうございます :)

4

3 に答える 3

1

$ _GET ['SelectCountry']は常にnullになるため、これは機能しません。クライアント側とサーバー側のスクリプトの違いについて混乱しています。初めてページをロードすると、まだGET変数がないため、Javascriptは都市のないブラウザ上にあります。国を変更しても、getCity()はサーバーに戻りません。それはそれがすでに持っているものを見るだけで、それは何もありません。サーバーにGETリクエストを送信し、結果を返す役割を持つAJAX関数が必要です。都市のリストを取得すると、そのリストで何をしたいのかを知りたいと思うでしょう。あなたはそれにドロップダウンを作る機能を与えます。これはコールバックとして知られています。AJAX関数を作成する方法と、コールバックを配置する場所を説明するチュートリアルがたくさんあります。

于 2012-04-05T23:04:22.013 に答える
1

あなたの経験レベルでは、onchange でフォームを送信するだけで済むのがおそらく最善でしょう。

<select name="SelectCountry"  id="SelectCountry" onchange="this.form.submit();" >

これは、国を選択して送信ボタンを押すのと同じです。(ちなみに、あなたは抜粋に欠け</select>ていますが、ここにそれをコピーしなかっただけだと思います。)

次に、PHPで...のようなものがあります(エコーしたいときに変数がそこにあるように、このコードビットはドロップダウンボックスの前にある必要があることに注意してください)

if ( isset($_GET['SelectCountry']) )
{
    $country = $_GET['SelectCountry'];
    $citySelect = "<select name='SelectCity'>";
    //query DB for cities of that country
    ...
    //now add the options from the query just like you did for the countries, except now use the cities
    ...
    $citySelect .= "</select>";
}
else
{
    $citySelect = ""; //to make sure the variable isn't undefined
}

これで、CountrySelect の下に以下を追加できます。

<? echo $citySelect; ?>

以前に国を選択した場合は、都市のメニューが表示されます。

これには最低レベルのセキュリティやフールプルーフも含まれておらず、大きなフォームをこのように機能させるのは非常に複雑になる可能性があることに注意してください。

于 2012-04-05T22:52:07.753 に答える
1

$_GET['SelectCountry'] は、フォームタグに選択があり、送信ボタンをクリックしてページをリロードした場合にのみ機能します (これにより、$_GET 変数が作成されます。これを行う簡単な方法は、国をURL を指定すると、$_GET も返されます。

したがって、showCity() 関数内で、次のように記述します。

 var i = document.getElementById("SelectCountry").selectedIndex;
 var countryValue = document.getElementById("SelectCountry").options[i].text;
 window.location.href = '/?SelectCountry='+countryValue;

これにより、Web ページが mysite.com/?SelectCountry=USA などにリダイレクトされます。その後、コードが機能します。これは最善の方法ではありませんが、ある程度の結果が得られるはずです。

于 2012-04-05T23:00:05.180 に答える