0

現在、while ループを使用してデータベースからデータを取り込むドロップダウン リストを含むフォームを作成しようとしています。フォームは、ユーザーの入力をデータベースのテーブルに送信します。そのために、while ループを使用しています。ドロップダウンリストに入力されたオプションをマークする隠し入力。これを使用して、データベースに挿入します。

問題: 非表示の入力用のコードを記述しても while ループがループしませんが、入力用のコードをコメント アウトした後はループします。

私のコードの抜粋:

<html>
<head><link rel="stylesheet" type="text/css" href="style.css" /></head>
<body>
<?PHP //include("AdminNav.php");?>
<form action="<?PHP echo $_SERVER['PHP_SELF']?>" name="AddSub" method="POST">
<table border="1">
<tr>
<td>Category: </td>
<td>
<select name="category">
<?php
include("cxn.inc");
if($_SESSION['Auth']=="Yes" && $_SESSION['Type']=="Admin")
{
$userid=$_SESSION['UserId'];
$branch="0";
$getcat="SELECT id,Category FROM Categories WHERE Business=$userid && Branch=$branch";
$cat=mysqli_query($cxn,$getcat) or die (mysqli_error($cxn));
while($row=mysqli_fetch_assoc($cat))
{
    $catid=$row['id'];
    echo"<option value=$row[Category]>$row[Category]</option>";
    //echo"<input type='hidden' name='catid' value='$catid' />";<--This is the line
}

}
else if ($_SESSION['Auth']=="Yes" && $_SESSION['Type']=="Sub")
{
$userid=$_SESSION['UserId'];
$branchquery="SELECT id FROM Branch WHERE Bizid=$userid ";
$getbranch=mysqli_query($cxn,$branchquery) or die(mysqli_error($cxn));
$num=mysqli_num_rows($getbranch);
if($num>0)//Get Branch Details if Branches exist
{
    $resultbranch = mysqli_fetch_assoc($getbranch);
    $branch=$resultbranch['id'];
    $getcat="SELECT id,Category FROM Categories WHERE Business=$userid && Branch=$branch";
    $cat=mysqli_query($cxn,$getcat) or die (mysqli_error($cxn));

    while($row=mysqli_fetch_assoc($cat))
    {
        $catid=$row['id'];
        echo"<option value=$row[Category]>$row[Category]</option>";
        //echo"<input type='hidden' name='catid' value='$catid' />";
    }
}
else if($num==0)//Get just the User(Admin) Details if No branches exist
{
    $resultbranch = mysqli_fetch_assoc($getbranch);
    $branch=$resultbranch['id'];
    $getcat="SELECT id,Category FROM Categories WHERE Business=$userid";
    $cat=mysqli_query($cxn,$getcat) or die (mysqli_error($cxn));

    while($row=mysqli_fetch_assoc($cat))
    {
        $catid=$row['id'];
        echo"<option value=$row[Category]>$row[Category]</option>";
        //echo"<input type='hidden' name='catid' value='$catid' />";
    }
}

}

?>
</select>
</td>
</tr>
<tr>
<td>SubCategory:</td>
<td><input type="text" name="subcategory" maxlength="50" size="30" required="required" /></td>
</tr>
<tr>
<td>

<input type="submit" name="addsub" value="Submit" />
</td>
<td>
<?PHP 
if(isset($success))
{
echo"$success";
}
else if(isset($error))
{
echo"$error";
}   
?> 
</td>
</tr>
</table>
</form>
</body>
</html>

私のテーブルの抜粋:

 ---------------------------------------------
 |  Id  |  Business  |  Branch  |  Category  |
 ---------------------------------------------
 | 155  |     5      |    0     |    Test1   |
 ---------------------------------------------
 | 156  |     5      |    0     |    Test2   |
 ---------------------------------------------
 | 157  |     5      |    0     |    Test3   |
 ---------------------------------------------
 | 158  |     5      |    0     |    Test4   |
 ---------------------------------------------

問題の詳細

行がコメントアウトされると、ドロップダウンリストに Test,1,2,3,4 が入力されますが、追加すると Test1.Furthermore のみが表示されます。フォームをテストすると (送信して)、フォームに挿入されます。 table カテゴリ「Test1」を分岐しますが、ID 158 (カテゴリ「Test4」に属します) を挿入します。

私の間違いと、それを修正するために私ができる/すべきことを親切に指摘してもらえますか? 私のコーディングを改善するための提案も大歓迎です。

ありがとう!

EDIT(解決策) 他の誰かが同じ問題に遭遇するように、私がしたことは、このページの処理コードのコード行を編集することでした

$catid=$row['id']; 

 $catid=$_POST['category'];

ソリューションのクレジットはコービンに贈られます

4

4 に答える 4

5

<input>セレクトボックスの途中では無効です。

于 2013-07-15T09:38:52.137 に答える
3

<input>の中に を埋め込むことはできません<select>

$row['id']選択の値を作成するだけです。とにかく、そのフォームを処理するコードで ID を操作する必要があります。

于 2013-07-15T09:38:46.897 に答える
2

いくつかの詳細情報: ループがループしています。ただし、他の回答で説明されているように、コードが無効であるため、ブラウザーで結果を確認できません。

また、「PHP_SELF を使用するのが安全でない理由: http://phpsecurity.wordpress.com/2007/11/03/the-danger-of-php_self/ 」についても確認してください。

また、オプションの値を引用符で囲む必要があります。それらがなければ、それも無効です

カテゴリーのIDを提出してほしいと思います。これはそれを行う必要があります:

echo'<option value="'.$row['id'].'">'.$row['Category'].'</option>';
于 2013-07-15T09:41:38.073 に答える
1

エコーを変更してみてください:

echo '<option value='.$row['Category'].'>'.$row['Category'].'</option>';

他のループについても同じことを行います。はい、select タグ内に入力がないはずです。選択があるときはいつでも、外側に配置してdom操作を実行して、非表示の入力値を変更できます

于 2013-07-15T09:40:38.270 に答える