1

ここで困惑したプログラミング初心者。

数か月前に PHP の学習を開始しました (少し HTML を使用)。

Mysql から入力されたドロップダウン選択フォームを作成しようとしています。以下の私のコードからわかるように、私はそれを達成したと思います (コードに「間違い」がある場合はお知らせください)。

私の問題は、選択したオプション/値を表示/エコーすることです。ドロップダウン リストから何を選択して送信しても、最初の項目のみが表示されます (この場合は、Alabama -- stateid 1)。

私はオンラインで見たあらゆる種類のものを試しましたが、何もうまくいかないようです.

JavaScript を呼び出す提案はたくさんありますが、私が言ったように、私はプログラミングにまったく慣れていないので、一度に 1 つの言語を使用します。他の言語にジャンプする前に、php をよく理解したいと思います。

確かにこれはphpだけで解決できますよね?

ちなみに、最終的な目標は、複数 (約 3 つまたは 4 つ) のプログレッシブ ドロップダウン フォーム (州、郡、市) を作成することです。ですから、もしよろしければ、選択した値 (State など) を次のクエリ/ドロップダウンに渡す方法も学びたいと思います。

今のところ、送信ボタン付きのドロップダウンがたくさんあっても問題ありません。私は最終的にjavascriptを学びます。

しかし、選択した状態を表示する方法を理解しようとすると、気が狂います。

あなたの助け/情報は大歓迎です。

「状態」テーブル

CREATE TABLE States (
stateid int NOT NULL AUTO_INCREMENT PRIMARY KEY,
state_name varchar(25) NOT NULL
)
ENGINE=INNODB,
DEFAULT CHARACTER SET utf8;

SELECT/OPTION POPULATED FROM DATABSE -- "pick_state.php":

$con = mysql_connect("localhost", "testx", "testx") or die('Could not connect to server');
mysql_select_db("US", $con) or die('Could not connect to database');

$stateid = $_GET['stateid'];
$state_name = $GET['state_name'];

$query = "SELECT stateid,state_name FROM States";

$result = mysql_query($query) or die(mysql_error());


$row = mysql_fetch_array($result, MYSQL_ASSOC) or die(mysql_error());


$stateid = $row['stateid'];
$state_name = $row['state_name'];

echo "Chosen state is: $state_name"; 

処理中のファイル -- "show_state.php" :

<?php

$con = mysql_connect("localhost", "test", "test") or die('Could not connect to server');
mysql_select_db("US", $con) or die('Could not connect to database');

echo "<form action=\"show_state.php\" method=\"get\">\n";

echo "<select name=\"state_name\">\n";

$query="SELECT stateid,state_name FROM States";

// ALSO : $query = "SELECT * FROM States "; --Does not work either//

$result=mysql_query($query);

      while($row=mysql_fetch_array($result,MYSQL_ASSOC))

      {
          $stateid = $row['stateid'];
          $state_name= $row['state_name'];
          echo "<option value=\"$stateid\">$state_name</option>";
      }

      echo "</select>\n";
      echo "<input name=\"submit\" type=\"submit\" id=\"stateid\" value=\"submit\" />\n";
      echo "</form> \n";

 ?>

何を選択して送信しても、次のページには常にテーブルの最初の項目のみが表示されます: アラバマ

ページショー: 「選択された州: アラバマ」

ARKANSAS を選択して送信する場合の URL:

/show_state.php?state_name=4&submit=submit

これは、正しい、選択/送信された州 ID (この場合: 4 -- アーカンソー州が述べた) を取得しているが、州名を「エコー」していないことを意味しますか?

show_state.php で次のことを試しました

$query = "SELECT stateid,state_name FROM States WHERE state_name = $state_name";

ページショー: ブランク

$query = "SELECT stateid,state_name FROM States WHERE stateid= $stateid";

ページ ショー: 「SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の近くで使用する正しい構文を確認してください」

if(isset($makeid))

ページショー:"Query was empty"

if(isset ($_GET['makeid']))

ページショー:"Your Car is a "

4

2 に答える 2

0

コードのこの行は、データベースから返された最初の状態を常に出力します。

$state_name = $row['state_name'];

必要なのは、クエリを次のように変更することです。

$query = "SELECT stateid,state_name FROM States where stateid=$state_name";

あなたがこれを書いたので、これはあなたのために空白のページを表示しています:

$state_name = $GET['state_name'];

これは$_GET違い$GETます。したがって、この行を次のように変更します。

$state_name = $_GET['state_name'];

これで問題なく動作するはずです:)

ノート:

  1. mysqli_real_escape_stringを使用して常にユーザー入力をサニタイズする
  2. php docで提案されているように * mysql *family 関数を使用しないでください。
于 2012-10-04T19:59:48.590 に答える
0

$_GET['state_name']その名前のフォーム フィールドがないため、機能しません。使用する:

if (isset($_GET['stateid'])) {
  query = "SELECT state_name FROM States WHERE stateid= " . sprintf("%d", $_GET['stateid']);
  $result=mysql_query($query) or die "Query error:".mysql_error();
  if (mysql_num_rows($result)) {
    $row=mysql_fetch_array($result,MYSQL_ASSOC);
    $state_name = $row['state_name'];
} else {
  $state_name = 'unselected';
}

選択した状態をデフォルトでメニューに表示するには、次のように変更します。

echo "<option value=\"$stateid\">$state_name</option>";

に:

echo "<option value=\"$stateid\" . ($stateid == $_GET['stateid']) ? "SELECTED" : "") . ">$state_name</option>";
于 2012-10-04T20:04:55.950 に答える