0

2 を含むフォームがあり<select>、最初の選択はページの読み込み時に自動的に入力され、2 番目の選択は最初の選択で選択された選択に基づいて入力されます。

これを達成するために、選択の状態が変化するたびに、最初に選択された値が別のページに渡され、そこで2番目の値を入力するために使用されます<select>

問題

URL を介して渡される選択された値 (この場合は Food & Beverages) が途中で切れているため、不完全な文字列が 2 番目の処理ページに送信され、実行できなくなります。

問題を特定するために実行した手順 URL を介して渡された値をエコーし​​、「Food」のみを取得し、残りの文字列を切り捨てました。文字列の値をFood and Beverageに置き換えてみましたが、すべてが完全に機能し、コンピューターが文字列の一部を処理する原因となるアンパサンド(&)記号が原因で文字列が切断されていると結論付けましたURLを介して渡される別の値としてアンパサンドの後に.ただし、変数に割り当てていないため、渡されていません。

質問

切り落とさずに値を渡す方法はありますか?

コードの抜粋:

処理ページ

<?PHP
include("cxn.inc");

$query=$cxn->prepare("SELECT * FROM `BusinessSubCategory` WHERE `BusinessCategory`=:businesscategory");
$query->bindValue(":businesscategory",$_GET['category']);
$query->execute();
$count=$query->rowCount();
if($count>0)
{
    echo"<option id='subcategory' value=''>Please select a SubCategory</option>";
    while($result=$query->fetch(PDO::FETCH_ASSOC))
    {
        $subcategory=$result['BusinessSubCategory'];
        echo"<option id=$subcategory value=$subcategory >$subcategory</option>";
    }
}
else
{
    echo"<option id='subcategory' value=''>Error,fetch query not run. </option>";
}
?>

JQuery コード

$(document).ready(function(){

$('#BusinessCreateCategory').load('getbusinesscategory.php');

$('#BusinessCreateCategory').change(function(){

    var category=$('#BusinessCreateCategory').val();
    window.location.href='getbusinesssubcategory.php?category='+category;

});

EDIT:encodeURIComponentを試しましたが、処理apgeのURLからわかるように、データはエンコードされていません。アンパサンドで切り取られています.HOWEVER、URLを文字列として手動で入力し、 $('#BusinessCreateCategory').val(); をエンコードできない理由を誰でも明らかにすることができます。? ありがとう!

例:これは機能します

var category="Food & Beverages";
    var encoded =encodeURIComponent(category);
    window.location.href='getbusinesssubcategory.php?category='+encoded;

たとえば、これはしません

var category=$('#BusinessCreateCategory').val();
    var encoded= encodeURIComponent(category);
    window.location.href='getbusinesssubcategory.php?category='+encoded;

それが役立つ場合、URLを通過しようとしているデータはデータベースから取得されます。

4

3 に答える 3

2

encodeURIComponentURL で使用する前に、カテゴリの値を取得する必要があります。

$('#BusinessCreateCategory').change(function(){

    var category=$('#BusinessCreateCategory').val();
    var encoded = encodeURIComponent(category);
    window.location.href='getbusinesssubcategory.php?category='+encoded;

});

アンパサンドは、渡そうとする URL を文字化けする特殊文字です。値をエンコードすると、単一の値として扱うことができます。

于 2013-10-29T17:21:24.667 に答える
0

通過できる文字数にはブラウザの制限があります。渡そうとしている完全な文字列の例はありますか? これはエンコーディングの問題である可能性があると最初は疑っていました。

于 2013-10-29T17:16:46.103 に答える
0

encodeURIComponent を使用して、渡される文字列をエンコードします。

値はエンコードする必要がありますが、db にクエリを実行すると、正確な一致が検索される可能性があります。エンコードされた文字列を介して出力が表示されない場合は、decodeURIComponent を使用して文字列をデコードしてから db に渡します。コードを正式に配置する前に、phymyadmin の出力を確認してください。

于 2013-10-29T17:24:49.833 に答える