• 締切済み

HTML側データの摘出方法

フォームメールを作っているのですがHTML側のデータが希望通りに摘出出来ません。 【C G I 側 一部】 push(@DATA_N,$name); push(@DATA_V,$value); foreach (0..$count-1) { if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; } else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; } } 【HTML側】 <BODY> <h1>WEBFORM用サンプルフォーム</h1> <FORM method="POST" action="webform.cgi"> <INPUT type="hidden" name="location" value="http://abc.com/123.htm"> <INPUT type="hidden" name="subject" value="フォームメール"> 質問:<INPUT size="50" type="text" name="質問"><BR> 名前:<INPUT size="50" type="text" name="Yourname"><BR> メール:<INPUT size="50" type="text" name="Email"><BR> <BR> <INPUT TYPE="submit" VALUE="確認"> <INPUT TYPE="reset" VALUE="リセット"> <p> <input type="checkbox" name="c_copy" value="on" checked> 送信内容のコピーを表示<br> <input type="checkbox" name="no_check" value="on"> 内容確認画面を出さないで送信する </FORM> </BODY> 上記の設定で【質問】【名前】【メール】の項目と値が全て送られて来るのですが、送られてくる順番を【名前】が先頭であとはHTML側の順番通りにしたいと思います。 以下のように行が何番目かを指定すれば結果は得られるのですが複数のHTMLに対応させる為【名前】項目が何番目に来るかが指定出来ません。 foreach (1) { if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; } else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; } } そこでHTML側 名前:<INPUT size="50" type="text" name="Yourname"> のname="Yourname"部分を使って指定出来ないかとあれこれ試してみますがうまくいきません。 有識者の方々のご指導いただければ幸いです。何卒宜しくお願いします。

  • CGI
  • 回答数1
  • ありがとう数3

みんなの回答

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.1

前回の質問に回答した者です。 前回の回答ではご理解いただけなかったようなのでもう一度。 名前項目の $name、$value それぞれリストの先頭に置くようにしたい、ということですよね。 ならば、スクリプトの、フォームから受信したデータをパースしている部分、つまり、データを分解して push(@DATA_N,$name); push(@DATA_V,$value); の処理をしているところです。 ここを次のようにすればいいと思います。 $queryは、STDIN または $ENV{'QUERY_STRING'} を代入した変数です。変数名とコードの書き方は違うかもしれません。 for(split(/&/,$query)){ ($name,$value)=split(/=/); #decode if($name eq 'Yourname'){$val=$value} else{push(@DATA_N,$name);push(@DATA_V,$value);} } unshift(@DATA_N,'Yourname'); unshift(@DATA_V,$val);

kohkun2008
質問者

お礼

ご指導ありがとうございます。 いったん値を変数に置き換えてやるといいんですね! お蔭様で何とか名前が最上部に表示するようになりました。 この度は本当にありがとうございました。

関連するQ&A

  • 同じname属性をまとめ未記入の項目を削除する方法

    現在メールフォームを作成しており、アドバイスを受けながら一歩ずつ前進している者ですが今回も行き詰ってしまいました。度々の質問で心苦しいですが何卒宜しくお願いします。 言葉での説明が難しいので以下のアドレスに【ブラウザ入力画面】と【確認画面】のイメージを掲載しました。 http://homepage2.nifty.com/nippon/qe/qes.html htmlソースは以下の通りで同じ「msg」などname属性の物が存在します。 <h1>フォーム</h1> <FORM action="abc.cgi" method="POST"><INPUT type="hidden" name="location" value = "http://abc.com"> <INPUT type="hidden" name="subject" value="【フォームメール】"> <TABLE border="0" cellpadding="3"> <TBODY> <TR> <TD bgcolor="#ffeadf">メッセージ1:</TD> <TD><INPUT size="50" type="text" name="msg"></TD> </TR> <TR> <TD bgcolor="#ffeadf">メッセージ2:</TD> <TD><INPUT size="50" type="text" name="msg"></TD> </TR> <TR> <TD bgcolor="#ffeadf">質問:</TD> <TD><INPUT size="50" type="text" name="qes"></TD> </TR> <TR> <TD bgcolor="#ffeadf">名前:</TD> <TD><INPUT size="50" type="text" name="Name"></TD> </TR> <TR> <TD bgcolor="#ffeadf">メールアドレス:</TD> <TD><INPUT size="50" type="text" name="Email"></TD> </TR> </TBODY> </TABLE> <BR> <INPUT TYPE="submit" VALUE="確認"> <INPUT TYPE="reset" VALUE="リセット"><BR> </BODY> </HTML> name属性が同じ場合は改行ぜずに1つにまとめvalue属性の値をカンマで区切って1行で表示させたいと思っております。 また、ブラウザ側で入力が無かった項目は表示させないようにしたいと思っております。 いろいろとIF関数を試してみましたがうまく表示しません(;;) 現在以下のプログラムで全ての項目と値が1行づつ表示されています、どのように変更すれば良いでしょうか? $count = @DATA_N; foreach (0..$count-1) { if ($DATA_V[$_] =~ /\n/) { &jis("$DATA_N[$_] =\n$DATA_V[$_]\n"); print OUT "$msg\n"; } else { &jis("$DATA_N[$_] =$DATA_V[$_]"); print OUT "$msg\n"; } } push(@DATA_N,$name); push(@DATA_V,$value); なにとぞ宜しくお願いいたしますm(_ _)m

    • 締切済み
    • CGI
  • フォームデータのcsv保存について

    お世話になります。フォームに入力されたデータを csvファイルに保存するというcgiの作成をしています。 初めてcgiを作成するので、書籍の真似をして作成した のですが、おかしいデータが保存されてしまいます。 質問の項目数は5個で以下のとおりです <FORM ACTION="./ans1.cgi" METHOD="POST"> 名前:<br> <input type="text" name="name" size=30> <br> 1:<br> <input type="text" name="a1" size=30> <br> 2:<br> <input type="text" name="a2" size=30> <br> 3:<br> <input type="text" name="a3" size=30> <br> 4:<br> <input type="text" name="a4" size=30> <br> <INPUT type="submit" value="送 信"> <INPUT type="reset" value="リセット"> <BR> </FORM> cgiの中身です。 #! /usr/bin/perl require './cgi-lib.pl'; $answer = 5; $ansfile = "kotae.csv"; &ReadParse(*in); $name = $in{'name'}; for($n = 1; $n <= $answer; $n++ ) { $a[$n] = $in{"a$n"}; } open (FILE,">>$ansfile"); flock (FILE,2); print (FILE "\"", $name); for($i = 1; $i <= $answer; $i++ ) { $a[$i] = ~ s/\"/""/g; print FILE "\"\,\""; print FILE $a[$i]; } print FILE "\"\n"; flock(FILE,8); close(FILE); print "Content-type: text/plain\n\n"; print "<HTML><BODY>\n"; print "tesuto"; print "</body></HTML>"; exit; csvファイルの中身を見ると、最初の列には、項目1で 記入したデータが入ってますが、項目2以降 は4294967295と数字が入ってます。どうも1個目の回答 欄のデータはちゃんと取得されてるのですがそれ以降の が取得されていないみたいです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • HTMLをおしえてください。

    こちらはPC初心者です。 HTMLここまでつくりました。 名前 <INPUT TYPE="text" NAME="name"><br> ハンドルネーム <INPUT TYPE="text" NAME="name"><br> 好きな色は? <SELECT NAME="color"> <OPTION SELECTED>選んでください。</OPTION> <OPTION VALUE="red">赤</OPTION> <OPTION VALUE="blue">青</OPTION> <OPTION VALUE="yellow">黄</OPTION> </SELECT><br> 行きたい国は?<br> <INPUT TYPE="checkbox" NAME="usa" VALUE="on">アメリカ<br> <INPUT TYPE="checkbox" NAME="china" VALUE="on">中国<br> <INPUT TYPE="checkbox" NAME="france" VALUE="on">フランス<br> <INPUT TYPE="checkbox" NAME="germany" VALUE="on">ドイツ<br> 感想<br><TEXTAREA NAME="comment" ROWS="4" COLS="30"></TEXTAREA><br> <INPUT TYPE="submit" VALUE="送信"><INPUT TYPE="reset" VALUE="書き直し"> </FORM> </BODY> 送信ボタンをおすとアウトルックが起動するようにしたいです。 書き直しボタンを押すと全部リセットできるようにしたいです。 どうかご指導の方をよろしくおねがいします。

  • POSTデータのNAME属性をVALUEによって取得する方法

    HTML→PHPのPOSTデータのやりとりについて、 【HTML】 <form name="form1" method="post" action="xxx.php"> <input name="01" type="text" value="1"> <input name="02" type="text" value="0"> <input name="03" type="text" value="0"> <input name="04" type="text" value="1"> <input type="submit" name="Submit" value="送信"> </form> 【xxx.php】 フォームから送信されたデータを使って、「value」が"1"の「name」を拾うのにはどのように書けばいいでしょう? ↓このように取得したいです。 $data[0]="01"; $data[1]="04"; よろしくお願いします。

    • ベストアンサー
    • PHP
  • POSTで配列のデータを渡す方法は?

    初歩的な質問で申し訳ございません。配列でデータを入力し、POSTで配列のデータを渡す方法を知らなくて困っています。いろいろ調べましたが、見つかりません。 だれか、教えてください。 ..... &ReadParse(*in); for ($i = 0 ; $i <=10 ; $i++){    $data[$i] = $in{'data[$i]'}; } sub main { 。。。以下修正部分・。。。 print "<form method=\"POST\" action=\"$userpro\">"; print " <input type=\"hidden\" name=\"mode\" value=\"miss1\"><p>"; print " <input type=\"text\" name=\"data[1]\" size=\"20\" value=\"$data[1] \">"; print " <input type=\"text\" name=\"data[2]\" size=\"20\" value=\"$data[2] \">"; print " <input type=\"text\" name=\"data[3]\" size=\"20\" value=\"$data[3] \">"; ...... print " <p><input type=\"submit\" value=\"修正\" name=\"B1\"></p>\n" ; print "</form>\n" ; ・・・・ } #Submit後実行される関数 sub miss1 { print "Content-type: text/html\n\n"; for ($i = 0 ; $i <=10 ; $i++){ print "$i-$data[$i]<br>"; } exit; } 結果は 0-空(空白) 1-空(空白) 2-空(空白) 。。。 にです。 何が間違っているでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl
  • java。html。jsp起動はどうすればいいの? 

    java。html。jsp起動はどうすればいいの?  下記の例のとき。 1)登録ボタン、照会ボタンが押されたら任意のjspを起動したいです。 2)jsp起動による処理以外にも もっと良い方法があれば教えてください。 受注N0 <input type=text name=order_no style="ime-mode: disabled;"><br> 受注日 <input type=text name=order_date style="ime-mode: disabled;"><br> 発注者名<input type="text" name="order_date" size="40" maxlength="20" style="ime-mode: active;"><br> 製品名 <input type=text name=order_date style="ime-mode: active;"><br> 受注量 <input type=text name=order_date style="ime-mode: disabled;"><br> </font> <input type=submit value="登録" name=btn1> <input type=reset value="クリア" name=btn2> <input type="button" value="終了" onClick="javascript:window.close();"> <input type=submit value="照会" name=btn4> 以上宜しくお願いします。

    • ベストアンサー
    • Java
  • input textでペーストした瞬間フォーカス移動

    input type="textが縦にたくさんあり、 text1[n番目]に文字をペーストするのですが ペーストした瞬間フォーカスをtext1[n]からtext1[n+1]に移動したいのですがonChangeだとうまくペーストした瞬間に移動できません。 良い方法はあるでしょうか。 <input type="text" size="21" value="" name="text1"><br> <input type="text" size="21" value="" name="text1"><br> ・ ・ ・

  • フォームからのデータの引渡し

    <FORM method="post" action="./formmail.php"> <INPUT type="text" name="namae" size="20"> <INPUT type="text" name="tel" size="20"> : : : </FORM> というようなhtmlファイルからformmail.phpでデータを受け取る方法教えていただきたいのです。 上記HTMLファイルのINPUTタグ(入力項目)の数も自由に変更可能でnameも自由に変更した場合でも、formmail.phpは一切変更なしに対応したいのです。 例えばPerlならCGI側に if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); @a = split(/&/, $query_string); foreach $x (@a) { ($name, $value)=split(/=/, $x); $msg .= "$name:$value<BR>\n"; } } とすることにより、受け取れると思います。 PHPではどう書けばよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • どなたかおしえてください

    初心者なので説明が下手ですみません。 どなたかおたすけください。 ランダムでサーバへ文字を送りたいのですが HTMLを<INPUT type=text name="s" >にして document.form1.s.value = msg[Math.floor(Math.random()*msg.length)];だとうまくいきます。 でも<INPUT type=text name="v[body]" >にして document.form1.v[body].value = msg[Math.floor(Math.random()*msg.length)];だと動きません。 nameに[]が入っているとダメなのでしょうか? name=v[body]は変えられないみたいなので困っています。 どうやったら動くかがんばって考えたけど私では全然わかりません。 どうかご教授お願いします。

  • 現在のカーソル行を知りたい。

    'KeyDown'の下記サンプルコードでfunction msgにきたときに 何番目のテキストボックスでKYyDownされたか知りたいのですが、 関数があればお教え下さい。 <html> <head> <script type="text/Javascript"> <!-- function msg(str) { alert("check"); } //--> </script> </head> <body onKeyDown="msg('KeyDown')"> key<br> <form name="myForm" method="POST" target="_self"> <input type="text" name="text1><BR> <input type="text" name="text1"><BR> <input type="text" name="text1"><br> <input type="submit" name="button1" value="button"> </form> </body> </html>

専門家に質問してみよう