2011-01-27 28 views
0

私はStackOverflowやFacebookの使い方などのコメントを私が作成しているサイトに追加しようとしています。基本的には、各親の投稿に独自の子コメントがあります。私はjQuery Ajaxでフロントエンドを実装するつもりですが、PHPのバックエンドにどのように最善を尽くすかについては苦労しています。

各フォームフィールドに同じ名前とIDを付けると、検証エラーが発生する可能性があるため(おそらくいくつか)、親フォームのIDを各フォームフィールドに追加しました。渡されるフィールドはcommentID、commentBody、commentAuthorある - などのIDは、彼らがcommentTitle-12になります追加して、

$_POST array_key新しい投稿が処理されるたびに異なるものになりますので、私は(-12をトリミングする必要がありますまたはIDが何であってもかまいません)、のキーからは、commentTitle、commentBodyなどとそれに関連する値だけが残ります。

$_POST['commentTitle-12']; //how it would be received after submission 
$_POST['commentTitle']; //this is what I am aiming for 

感謝

SOLUTION CFreak-

おかげ
//Basic example, not actual script 
<?php 
if (array_key_exists("send", $_POST)) { 
    $title = $_POST['title'][0]; 
    $body = $_POST['body'][0]; 
    echo $title . ', ' . $body; 
} 
?> 
<html> 
<body> 
<form name="test" id="test" method="post" action=""> 
<input type="text" name="title[]"/> 
<input type="text" name="body[]"/> 
<input type="submit" name="send" id="send"/> 
</form> 
</body> 
</html> 

アップデート2 おっとは、一種のそれの全体のポイントを忘れてしまった - ユニーク名前(確立されていますがその1)これは、このアプリケーションのために、

//Basic example, not actual script 
    <?php 
    if (array_key_exists("send", $_POST)) { 
     $id = $_POST['id']; 
     $title = $_POST['title'][$id]; 
     $body = $_POST['body'][$id]; 
     echo $title . ', ' . $body; 
    } 
    ?> 
    <html> 
    <body> 
    <form name="test" id="test" method="post" action=""> 
    <input type="text" name="title[<?php echo $row['id'];?>]"/> 
    <input type="text" name="body[<?php echo $row['id'];?>]"/> 
    <input type="hidden" name="id" value="<?php echo $row['id']; //the ID?>"/> 
    <input type="submit" name="send" id="send"/> 
    </form> 
    </body> 
    </html> 
+2

かかわら

function extract_vars_from_post($arr) { $result = array(); foreach ($arr as $key => $val) { // $key looks like asdasd-12 if (preg_match('/([a-z]+)-\d+/', $key, $match)) { $result[$match[1]] = $val; } else { $result[$key] = $val; } } return $result; } 

は、コードをテストしていないので、私が思います間違った方法で問題に近づいている可能性があります。名前はポスト配列のキーとして使用され、同じ名前の要素があれば問題ありません。誰かがコメントを投稿したときに、親IDを取得して、それをajax投稿の余分なパラメータとして渡すだけです。 – Endophage

+0

あなたは絶対に正しいです。この特定のケースでは、このページの唯一のユーザーがJavascriptを有効にすることを知っているので、これを達成するためにjQueryのみを使用します。しかし、これが当てはまらない将来のケースでは、PHPでこれをどうやって処理するのかを理解したいと思っています。しかし、もう一度、あなたは正しいのです。 :) – NightMICU

答えて

5

PHPは外の配列、あるいは多次元配列を得るためにちょっとしたトリックを持っている)の代わりにjQueryを使ってこれを行うには、2)は、おそらくより良い本当に必要ではなく、 HTMLフォーム。 HTMLでは、このようなあなたのフィールドに名前を付ける:

<input type="text" name="commentTitle[12]" value="(whatever default value)" /> 

(あなたは、変数を使用することができますまたは任意のはそれが何をやっているのですが「12」に置くために、キーは[]括弧で

。次に、PHPであなたが得られます:。

$_POST['commentTitle'][12] 

あなたは可能性があり、その後ちょうどコメントをループし、インデックスIDによって各グラブ

をまた、単にHTML内の空の角括弧としてそれを残すことができます:

<input type="text" name="commentTitle[]" value="(whatever default value)" /> 

これは、実際のID値が何であるか気にしない場合、0から始まるインデックス付き配列になります。

希望に役立ちます。

+0

さて、私たちはここで何かをしています。しかし、フォームの 'value'属性からどのように値を引き出すのですか?ありがとう:) – NightMICU

+0

$ commentTitle = $ _POST ['commentTitle'] [12];それは理にかなっていますか?そうでない場合、より完全な例を提供するために私の答えを編集することができます。 – Cfreak

+0

いいえ、それを持っています!秒での編集を参照してください..ありがとう! – NightMICU

0

あなただけ$_POSTを反復処理し、キーを一致させるために検索する必要があります:あなたがしか一度に戻って1件のコメントを投稿する必要があります