プロが教えるわが家の防犯対策術!

こんにちは。
HTMLの入力フォームからPHPでデータを取得したいのですが、項目(50項目位)が多い為に配列を使ってデータを取得したいと考えています。
どうやっていいのか迷っているのですが、おそらく連想配列を使えばいいのだとは思うのですが、取得の仕方がわかりません・・・すみませんが、ご教授頂けないでしょうか?
後、必須項目が何点かあるのですが、その必須項目で記入漏れがあるものを全てエラーで出したいと思います。

例えばA,B,C,Dの必須項目があり、Aにだけ記入されていたら【BCDは必須項目です】とBCだけ記入されていたら【ADは必須項目です】と画面に表示される。

これも配列を使えばどうにかなると思うのですが、ぜんぜんプログラムがわかりません・・・。
質問が2つになり申し訳ございませんが、ご教授をよろしくお願いします。

A 回答 (6件)

$_POSTは元々連想配列では。


$_POST自身は、HTMLフォームの要素名をキーとしてますから、
例えば、

<input type="text" name="item1" value="atai">
<input type="text" name="item2" value="watashi">
<input type="text" name="item3" value="boku">

のように要素名を規則的にする事で、

$idx = 3;
echo $_POST[ "item".$idx ], "<br>";

でアクセスできます。
――という話ではない?
    • good
    • 0
この回答へのお礼

ありがとうございます。
この方法ですとHTMLの要素名を連番にしないといけないんですよね???製作の都合上、ある文字と連番とかにはできないんです・・・。すみません・・・

お礼日時:2004/09/27 16:56

確認はしてませんがこんなんでいけるかな?


////a.php///////
///フォーム書き出し//

<form action="b.php" method="post">
<?php

for($i=1;$i<=50;$i++){
echo "<input type=\"text\" name=\"item".$i."\"><br>\n";
}

?>
<input type="submit" name="Submit" value="送信">

///b.php////
//空白チェック

<?php
if($_POST[Submit]){
for($i=0;$i<=50;$i++){
if($_POST["item".$i]==""){
$err .= "$i"."に空白があります。<br>";
}
}
}

echo "$err";

?>
    • good
    • 0
この回答へのお礼

ありがとうございます。
この方法ですとHTMLの要素名を連番にしないといけないんですよね???製作の都合上、ある文字と連番とかにはできないんです・・・。というのもitem4に空白がありますなんて表示されても分かり難いと思いますので・・・

お礼日時:2004/09/27 16:59

////HTML


<input type="text" name="A" value="">
<input type="text" name="B" value="">
<input type="text" name="C" value="">
<input type="text" name="D" value="">

<input type="text" name="n" value="">


//////

foreach($_POST as $key => $val){
 if(!$val) $error_message .= $key;
}

if($error_message)echo $error_message."は必須項目です";

こんな感じだと、HTML内の部分を直せば何百個項目あっても全てに対して未記入チェックできると思われます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
まさしく期待していた答えでした・・・。
基本的なことですみませんが、
この配列から例えば$key=Dだけを正規表現等で
チェックを掛けたい場合はどうしたらいいのでしょうか?
ご教授をよろしくお願いします。

お礼日時:2004/09/27 17:36

>この配列から例えば$key=Dだけを正規表現等で



////HTML内
<input type="text" name="A" value="">
<input type="text" name="B" value="">
<input type="text" name="C" value="">
<input type="text" name="D" value="123-4567">

<input type="text" name="n" value="">
//////


foreach($_POST as $key => $val){
 if(!$val) $error_message .= $key;
 if($key == "D" and !preg_match("/^[0-9]{3}([-]{1}[0-9]{4})?$/",$val) )$error_message .= $key;
}

エラーメッセージの出方に難有りですがこんな感じでしょう
(例として D は郵便番号としました
    • good
    • 0
この回答へのお礼

何度もご回答ありがとうございます。特定の要素だけを取り出すのは分かったのですが、他の処理がどうも上手いことできません・・・。今回はこの方法は諦めたいと思います。どうもありがとうございました。

お礼日時:2004/09/28 15:37

テストしていないのですが


以下のように要素名に「[]」をつければ
配列で入ってくるはずです。
(ラジオボタンなどで普通に使われる手法です)

<input type="text" name="item[]" value="">
<input type="text" name="item[]" value="">
<input type="text" name="item[]" value="">
<input type="text" name="item[]" value="">

もし上のようにname属性を変更できないのでしたら
post(もしくはget)を自力で分解するスクリプトを書けば
同じ名前の項目が複数あっても取得できますよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
データをpostで取る事はできました。
このデータをメールで送信するのに
メッセージの部分を$messegeと変数を設定し
この変数に
$message="
?>
大阪舶来マートJCB申込<br /><br />
<?php
foreach($_POST as $key => $val){
$key .":" .$val. "<br>"
.};
";
?>
とスクリプトを記述しました。
これを
print_r($message);
とすると
Parse error: parse error, unexpected T_STRING in /usr/local/asuka/virtual/B4Z001480/※※※※/soshin.php4 on line 8
というエラーを返します。
どうしてもこのエラーが出てしまうんです。
何故でしょうか?

お礼日時:2004/10/02 14:40

ソースを良く見てくださいね。



foreach($_POST as $key => $val){
$key .":" .$val. "<br>"
.};

真中の行「$key .":" .$val. "<br>"」では
どこに代入するのかが示されていませんし、
最後に「;」が無いので当然エラーが出ます。
この場合
「$message .= $key .":" .$val. "<br>";」
とすべきです。
また次の行の「.」も意味不明です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!