1

私は PHP/HTML 取引全体にかなり慣れていないため、修正方法がわからない問題に遭遇しました。データベースにデータを入力できる非常にシンプルなフォームです。PHPコードは次のとおりです。

<?

    include("../sqlcontext.php");
    $foo = mysql_query("SELECT*FROM users WHERE checksum='".$_COOKIE['userCookie']."'");
    if($_COOKIE['userCookie'] == '' || !mysql_num_rows($foo)){
        echo 'Du er ikke logget ind :( <a href="login.php">log ind her</a>';
    }
    else{ 

    if($_POST['genreKnap']){
        $nameGenre = $_POST['nameGenre'];
        $textGenre = $_POST['textGenre'];       
        $succes = mysql_query("INSERT INTO genre VALUES('null','$nameGenre','$textGenre')");

        if($succes){
            echo 'Yay!';
        }else {
            echo 'Oh no';
        }
    } 

?>

フォームは次のとおりです。

<form name="form1" method="post" enctype="text/plain" action="">
  <table>
    <tr>
        <td>Genre navn:</td>
        <td><input type="text" name="nameGenre" id="nameGenre" style="width:100%; padding-right: 1px" /></td>
    </tr>
    <tr>
        <td>Genre beskrivelse:</td>
        <td><textarea name="textGenre" id="textGenre" style="width:100%; padding-right: 1px"></textarea></td>
    </tr>
    <tr>
        <td></td>
        <td><input type="submit" name="genreKnap" id="genreKnap" value="Go!"/></td>
    </tr>
  </table>    
</form>

送信ボタンを押すたびに、それが投稿ではなく get メソッドであるかのように動作するように見えます。

4

5 に答える 5

1

あはは!!!

フォームを正しく投稿していません。をセットする

action=""

action="code.php"

PHP ページの名前が code.php であるとします。それをphpページの名前/パスに変更するだけで、フォームはデータをphpコードに送信して処理します。

action=""空白のままにすると、データはそれ自体 (同じページ) に投稿されます。GET として機能しておらず、POST として機能していますが、間違った場所に投稿しています。あなたは質問のタイトルを間違って表現したと思います。


post ではなく get のように振る舞っているとはどういう意味ですか? PHP で $_POST 変数を読み取れませんか?

'enctype="text/plain"'フォーム内のコードを削除してください。

于 2013-02-18T15:41:21.457 に答える
0

フォームでファイルなしで通常のデータを送信する場合。その後enctype は必ずしも必要ではありません。

しかし、それを含めたい場合でも、正しい方法は次のとおりです。

enctype="multipart/form-data"

また、フォームのアクション メソッドで URL を指定します。<form action='example.php'>

問題が解決することを願っています。

于 2013-02-19T09:42:23.177 に答える
0

有効なフォーム enctypes:

application/x-www-form-urlencoded: This is the default content type

multipart/form-data

コンテンツ タイプ「application/x-www-form-urlencoded」は、非 ASCII 文字を含む大量のバイナリ データまたはテキストを送信するのに非効率的です。ファイル、非 ASCII データ、およびバイナリ データを含むフォームを送信するには、コンテンツ タイプ「multipart/form-data」を使用する必要があります。

ソース: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3.4

于 2013-02-18T15:46:01.333 に答える
0

あなたは皆、主要な質問を無視し、無関係な項目に焦点を合わせています.

まず何よりも、彼が短い php オープナーを使用している<?わけ<?phpではありませんが、すべての Web サーバーが最初に短いオープナーを受け入れるわけではありません。

$_POST 変数をエコーアウトして、正しいアイテムが返されているかどうかを確認します

echo "POSTS BELOW<br />";
echo $_POST['nameGenre']."<br />";
echo $_POST['textGenre']."<br />"; 
echo "<br />GETS BELOW<br />";
echo $_GET['nameGenre']."<br />";
echo $_GET['textGenre']."<br />"; 

このコード ブロックを php オープナーのすぐ下に配置して、返されるデータを確認します。

また、ユーザー入力が最も安全な方法は隠しフィールドであり、if句を次のように変更するため、これif($_POST['genreKnap']){は一般的に悪い方法です。<input type="hidden" name="action" id="action" value="dopost" />if($_POST['action']=="dopost && isset($_POST['action'])){

また、フォーム action="" を空白ではない実際のページ名に設定します

すべて試してみて、それでもうまくいかない場合は、別のことを試します

于 2013-02-18T16:09:19.047 に答える