最新の編集: formprocessing.php では、isset($_POST['submit1']) が FALSE であることが判明しました ('submit1' は送信ボタンの名前になりました。元々は名前がありませんでした)。以下のコードに見られるように、私はもともとこれをテストしていません。
それは多くを説明します。しかし、残りの問題は、なぜisset($_POST['submit1']) が FALSE なのかということです。
注: この質問は、最近の洞察を反映するように編集されています。
PHP の初心者として、フォームをサーバーに投稿しようとしていますが、うまくいきません。おそらく私は単純なものを見落としていますが、それがわかりません。
「form.php」と「formprocessing.php」の 2 つのファイルがあり、どちらも同じフォルダーにあります。以下に完全なコードを含めましたが、最初にいくつか説明します。ファイル「form.php」には、「post」メソッドを含むフォーム自体が含まれています。ファイル「formprocessing.php」は、いわば「post」メソッドの宛先です。つまり、「action = formprocessing.php」です。
考え方は、「formprocessing.php」のロードや「form.php」のリロードを行わずにフォーム処理を実行する必要があるということです (したがって、form.php の「event.preventDefault();」)。「form.php」自体にも投稿できることは承知していますが、今のところ、2 つの別々のファイルを使用したいと考えています。
jQueryサイトから「form.php」のコードをほぼそのまま引用しました(http://api.jquery.com/jQuery.post/ 、最後の例)。action 属性のファイル名を「formprocessing.php」に変更し、必要な JSON.stringify コマンドを追加しました (以下を参照)。
「formprocessing.php」の残りのコードは、ポストされた入力フィールド (フォームには 1 つのフィールドしかありません) の値を抽出し、それを JSON オブジェクトの形式で「form.php」に返します (これは、form.php で文字列化されます)。少なくともそれがアイデアです!
「formprocessing.php」で生成されたスクリプト。- 入力フィールドに「xxx」と入力した後、次のようになります。
<script> {"content":"xxx"} </script>
私の目には、このスクリプトは正しいように見えますが、そうでしょうか? それが私が今確実に知りたい最初のことです。
編集: formprocessing.php のすべての HTML タグを削除しました。これは、生成されたスクリプトが {"content":"xxx"} 、つまり JSON オブジェクトのみに縮小されることも意味します。それでも結果は変わりません。
後で何かがうまくいかないからです。つまり、「form.php」の最後に、「formprocessing.php」から返されたデータの内容を div 要素に付けます。しかし、実際には、div に添付された文字列は "{"length":0,"prevObject":{"0":{},"1":{},"2":{},"3" になります。 :{},"4":{},"5":{},"6":{},"7":{},"8":{},"長さ":9},"セレクター": "#content"}" -- つまり、長さ 0 のオブジェクトを示します。'formprocessing.php' から返されると思われる実際のデータではなく (前述のように、フォーム フィールドへの元の入力にも等しい)。
「form.php」のコードは次のとおりです。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.post demo</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<form action="formprocessing.php" id="searchForm">
<input type="text" name="s" placeholder="Search..." />
<input type="submit" value="Search" />
</form>
<!-- the result of the search will be rendered inside this div -->
<div id="result"></div>
<script>
/* attach a submit handler to the form */
$("#searchForm").submit(function(event) {
/* stop form from submitting normally */
event.preventDefault();
/* get some values from elements on the page: */
var $form = $( this ),
term = $form.find( 'input[name="s"]' ).val(),
url = $form.attr( 'action' );
/* Send the data using post */
var posting = $.post( url, { s: term } );
/* Put the results in a div */
posting.done(function( data ) {
var content = $( data ).find( '#content' );
contentstring = JSON.stringify(content);
$( "#result" ).empty().append( contentstring );
});
});
</script>
</body>
</html>
「formprocessing.php」のコードは次のとおりです。
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8" />
<title>Contact</title>
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script>
</head>
<body>
<script>
<?php
echo "alert('Hello!');";
$invoer = $_POST['s'];
echo ( json_encode(array("content" => $invoer)) );
?>
</script>
</body>
</html>
どんな助けでも大歓迎です。