2012-04-13 6 views
0

これは多分コードではなく技術的な質問です。私は多くのフィールド(選択する項目)を持つPHPフォームを使用しています。当然のことながら、いくつかのアイテムが選択され、いくつかは選択されない可能性があります。 1ページから2ページにデータを投稿するときに、どのデータが選択されているかをどのように知るのですか?私は空の場合とそうでない場合のそれぞれをテストすることを考えましたが、あまりにも多くのフィールドがあり、使用やコード作成が効率的ではありません。 おかげで、長いPOSTを避けるPHP

UPDATE編集: 私は次のことを試してみたと私はrepliersソリューションをテストするに運ぶ前に、多分それはどこかに私を取得します...

<html> 
<body> 
    <form name="test" id="name" action="testprocess.php" method="POST"> 
     <input type="text" name="choices[shirt]"> 
     <input type="text" name="choices[pants]"> 
     <input type="text" name="choices[tie]"> 
     <input type="text" name="choices[socks]"> 

     <input type="submit" value="submit data" /> 

    </form> 
</body> 
</html> 

した後、第2のページ:

<?php 
$names = $_POST['choices']; 
echo "Names are: <br>"; 
print_r($names); 

?> 

これは、次のことを実行できます:

名前がある:配列([市RT] => sdjalskdjlk [パンツ] => lkjlkjlk [タイ] => JLK [靴下] => lkjlkjl)

は、今私が何をしようとするつもりです何配列の反復処理、および値からさ私の場合は数字ですが、私はフィールドが0より大きいかどうかをチェックします。デフォルトは0です。これがうまくいけばいいと思います...)

+0

あなたは多くの 'ISSET($ _ POST [ 'などを'])回避を意味しますか)'? – Michelle

+0

アレイをループします。配列を使ってフォームを構築すると、投稿されたものを確認しやすくなります。 –

+0

はい@JackSpairow投稿されたアイテムごとにそれを避けたい。私が配列を使用している場合は、その中の各項目を読んで比較文字列をして、そこの項目を決めて価格をfroomデータベースと呼ぶ必要があります。もう一度strcmpのために効率的に見えません。ただ、ここに私の考えを表現する... –

答えて

0

私は、あなたが探していることはこれだと思い

<form action="submit.php" method="POST"> 
    <input type="checkbox" name="checkboxes[]" value="this" /> This 
    <input type="checkbox" name="checkboxes[]" value="might" /> might 
    <input type="checkbox" name="checkboxes[]" value="work" /> work 
    <input type="submit" /> 
</form> 

そしてsubmit.phpに、あなたは、単に書く:

<?php 
foreach($_POST['checkboxes'] as $value) { 
    echo "{$value} was checked!"; 
} 
?> 

チェックボックス要素の名前に角括弧この例では$_POST['checkboxes']という同じ配列に、この名前を持つすべての要素を入れるようにPHPに指示しますが、チェックボックスを好きなものに呼び出すことはもちろん可能です。

+0

hmmm私は1つのことを取得しません...この配列が提出されます....私はそれ内の値をチェックします。フォーム内のすべてのフィールドは、私が考えている配列になります...それは解決しません。または、入力フィールドだけが含まれます... –

+0

あなたが何を意味するのか分かりませんが、これがあなたが望む出力でない場合は、考慮する必要があります: 'foreach($ _ POST ['checkboxes'] as $ key => $ value){ "{$ key}は{$ value}に設定されました"; } ' – Daan

+1

ほとんど変更はありませんが、これは実際に私のために働いた。私はhtml形式から配列をポストしていましたが、foreachループでコンテンツを再生して、キーと値を確実に取得しました。おかげで仲間:) –

0

私たちはあなたがしたいことをよりよく理解するでしょう。

しかし、私が理解したところでは、チェックボックスでフォームを作っています。チェックボックスが選択されているかどうかを確認するには、次のようにします。

if(!$_POST['checkbox1'] && !$_POST['checkbox2'] && !$_POST['checkbox3']) 

3つのチェックボックスがすべて空であるかどうかを調べます。

+0

これは私が100個のフィールドを持つ...避けるためにしようとしています正確に何であるあなたは多分、さらにことに手の込んだことができ、それが問題 –

0

ジャストアイデア

+0

なるほどなり?今checkValueとSET_VALUESは何である –

+1

実は、私はいくつかは、私はこれをチェック...私は私のポストを編集した最初の – Codeeater

+0

を参照してくださいmistake..letがあるかもしれないと思う...面白そうですね?と私は設定された値を取得するので、私はどのように$ _POST ['フィールド']すべての値を知っているこれを使用することができますか? – Codeeater

0

..あなたが配列に設定されているすべての値を取得することができます。このように

<?php 
function checkvalue($val) { 
    if($val != "") return true; 
    else return false; 
} 
if(isset($_POST['submit'])) { 
    $values = array_filter(($_POST), "checkvalue"); 
    $set_values = array_keys($values);   
} 
?> 

.....これを試してみてください:

の作成あなたのフォーム内の値のない非表示の入力フィールド。いずれかのフォームフィールドが塗りつぶされるか選択されるときはいつも、このフィールドのname属性をこの隠しフィールドに追加します(フィールド名はコンマ区切りで保存されます)。

POSTを実行すると、この変数を読み取ることができ、この中に存在するフィールドのみがフォームで選択/入力されます。

これが役に立ちます。

+0

ここには何が書かれているのか?もう一度これは非常に良いテクニックと思われます...しかし、それがどのように役立つだろうかのヒント。あまりにも助けるだろう.. –

+1

私にいくつかの時間を与える、デモを行い、あなたに戻って取得します。 –

+1

Javascriptに依存している - 一部のユーザーが無効にしている可能性があります。 –

0

あなたの意図を正確には理解できません。私はあなたが複数のフォームフィールドを持っていると仮定しています。

この場合、「最終送信ボタン」(最後のページなど)が押されるまで、フォームのさまざまなデータを保存するためにセッションを使用します。

0

ページ1からページ2にデータを投稿するときに、どのページが選択されているかはどのようにわかりますか?

は、PHPへの大きなPOSTを避ける方法とは異なる質問です。それらが変更されているように、個々の行を更新するには、これはデータのテーブルであると仮定すると、

(あなたが正しく設定され、プライマリ/一意キーを持っている場合)...

ちょうどかかわらず、すべてを更新

使用アヤックスその行のデータが

変更されたときに、フロントエンド

JavaScriptを使用時に各列内のフラグを設定したり、送信時に、行の隠しフィールドとして各行の既存のデータの表現を記憶します例えば

print "<form....><table>\n"; 
foreach ($row as $id=>$r) { 
    print "<tr><td><input type='hidden' name='prev[$id]' value='" 
    . md5(serialize($r)) . "'>... 
} 

...受信側で...

foreach ($_POST['prev'] as $id=>$prev) { 
    $sent_back=array(/* the field values in the row */); 
    if (md5(serialize($sent_back)) != $prev) { 
      // data has changed 
      update_record($id, $sent_back); 
    } 
} 
+0

これは、それが仲間を行うのは非常に複雑な方法だと思う...私は私が意味するソリューションを理解していない:( –

関連する問題