• 締切済み

ジャバスクリプトを入れるとCGIエラーが出てします。

下記のような感じでプログラムしてみたのですがどうしてもCGIエラーが出てしまいます。 何か打開策などございましたら教えて頂けないでしょうか?お願いします。 $Head=$Head.qq{ <script> function send(){ //どのラジオボタンがチェックされたか判定 var i; if (document.form_a.r_b.length) { for (i = 0; i < document.form_a.r_b.length; i++) { if (document.form_a.r_b[i].checked) { var ck_b = document.form_a.r_b[i].value; } } } else q{ if (document.form_a.r_b.checked) { var ck_b = document.form_a.r_b.value; } } //チェックされたボタンから遷移先を分ける if(ck_b=="A"){ document.form_a.action="http://www.***.co.jp/cgi-local/J_S001.cgi?ff_flg=2&free=" + document.form_a.KENSAKU.value; document.form_a.submit(); }else if(ck_b=="B"){ document.form_a.action="http://www.***.co.jp/cgi-local/H_S001.cgi?ff_flg=2&day_flg=1&free=" + document.form_a.KENSAKU.value; document.form_a.submit(); } else if(ck_b=="F"){ document.form_a.action="http://www.***.co.jp/cgi-local/SearchJobOffer1b.cgi?ff_flg=2&free=" + document.form_a.KENSAKU.value; document.form_a.submit(); } } </script> };

  • aeic
  • お礼率10% (60/582)
  • Perl
  • 回答数2
  • ありがとう数1

みんなの回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

質問のスクリプトはシフトJISで書かれていませんか? シフトJIS全角文字には、2バイト目に 0x40 ~ 0x7E のコードを含むものがあります。 質問のスクリプトでは、コメントにある「ボタン」の「ボ」の2バイト目が 0x7B ( { の文字コード)であるため、qq{ } のカッコが不整合であるというエラーが出るのです。 質問のような複数行に渡る文字列では、qq ではなく「ヒアドキュメント」を用いるのが普通です。 たとえば、次のようにしてみてください。 $Head .= <<__JAVA_SCRIPT__; スクリプト __JAVA_SCRIPT__ また、qq の区切り文字に、文字列中に含まれない別の文字を使う、という回避方法もありますが、やはりヒアドキュメントを使う方がよいでしょう。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

$Head=$Head.qq{   <script>   function send(){   //どのラジオボタンがチェックされたか判定     var i;     if (document.form_a.r_b.length) {       for (i = 0; i < document.form_a.r_b.length; i++) {         if (document.form_a.r_b[i].checked) {           var ck_b = document.form_a.r_b[i].value;         }       }     } else q{       if (document.form_a.r_b.checked) {         var ck_b = document.form_a.r_b.value;       }     }     //チェックされたボタンから遷移先を分ける     if(ck_b=="A"){       document.form_a.action="http://www.***.co.jp/cgi-local/J_S001.cgi?ff_flg=2&free=" + document.form_a.KENSAKU.value;       document.form_a.submit();     }else if(ck_b=="B"){       document.form_a.action="http://www.***.co.jp/cgi-local/H_S001.cgi?ff_flg=2&day_flg=1&free=" +  document.form_a.KENSAKU.value;       document.form_a.submit();     } else if(ck_b=="F"){        document.form_a.action="http://www.***.co.jp/cgi-local/SearchJobOffer1b.cgi?ff_flg=2&free=" + document.form_a.KENSAKU.value;       document.form_a.submit();     }   }   </script> }; 12行目の } else q{ がおかしいと思います。 } else { ですね。

関連するQ&A

  • 検索欄を設けキーワードを入力後Enterを押すと検索されずに同じ画面が表示される

    JavaScriptとperlとMySQLでデータベース内を検索するような仕組みを作りました。が動作が上手くいきません。 「うまくいかない点」 フリーワード検索欄を設けキーワードを入力後Enterを押すと検索されずに同じ画面が表示される 「仕掛け」 1.ラジオボタンで検索の種類を選んでもらいます。 <INPUTtype="radio"name="r_b"VALUE="F"checked> <INPUTtype="radio"name="r_b"VALUE="A"> 2.検索ボタンをクリックした際にヘッダーに書かれているJavaScriptで振り分けてCGIファイルに飛びます。 <SCRIPT> functionsend(){ vari; if(document.form_a.r_b.length){ for(i=0;i<document.form_a.r_b.length;i++){ if(document.form_a.r_b[i].checked){ varck_b=document.form_a.r_b[i].value; } } }else{ if(document.form_a.r_b.checked){ varck_b=document.form_a.r_b.value; } } if(ck_b=="A"){ document.form_a.action=""+document.form_a.KENSAKU.value; document.form_a.submit(); }elseif(ck_b=="F"){ document.form_a.action=""+document.form_a.KENSAKU.value; document.form_a.submit(); } } </SCRIPT> 上記のような感じです。 最初はこれでも良いかと思ったのですが、結局どこのサイトでもフリーワード欄にキーワードを入力した後にわざわざ検索ボタンをクリックするのではなくエンターキーを使用している事に気がつきました。 また、そのほうが使用頻度が多い方にとって良いと思いいろいろ考えたのですが、良い知恵が浮かびませんでした。 どうか良きアドバイスをいただけないでしょうか? お願いします。

  • セレクトボックスのリンクと値を渡す方法

    pealで以下の用に記述しているものを・・・ <script language=JavaScript> <!-- function page(v,s,f) { var val = v; var sid = s; var flg = f; document.go_page.method=\"post\"; document.go_page.action=val; document.go_page.sid.value=sid; document.go_page.flg.value=flg; document.go_page.submit(); } //--> </script> <a href=\"javascript:page('***.cgi','','','','$m')\">[$m]</a> 以下のような形にselectされた時点で値($m)を渡し、かつ同じページ(***.cgi)内で値に伴うリンクを飛ばし表示させるにはどのようにすればよいでしょうか? <form action=***.cgi> <select name=***> <option value="$m">$m</option> </form>

  • ジャバスクリプトで自動計算表を作ったのですが、IEでは動くのですが、フ

    ジャバスクリプトで自動計算表を作ったのですが、IEでは動くのですが、ファイヤーフォックスでは動きません。どこに不具合があるのでしょうか? 問題のフォームはこちらです http://tatamitai.com/form1-11.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML lang="ja"> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>メールフォーム</TITLE> <META http-equiv="Content-Style-Type" content="text/css"> <META name="description" content="メールフォーム"> <META name="keywords" content="メルマガ,ホームページ,サイト制作"> <script type="text/javascript"> <!-- function keisan(){ // 設定開始 // 商品1 var price1a = 3680; var price1b = document.form1.格安コース:数.selectedIndex * 1; // 単価を設定 var price1c = document.form1.格安コース:工期等課金.value * 1; // 単価を設定 var price1d = document.form1.格安コース:柄.value * 1; // 単価を設定 var price1e = document.form1.格安コース:シート.value * 1; // 単価を設定 var price1f = document.form1.格安コース:乾燥.value * 1; // 単価を設定 var total1 = document.form1.格安コースの小計.value = (price1a + price1c + price1d + price1e + price1f) * price1b; // 小計を表示 // 商品2 var price2a = 4900; var price2b = document.form1.標準コースA:数.selectedIndex * 1; // 単価を設定 var price2c = document.form1.標準コースA:工期等課金.value * 1; // 単価を設定 var price2d = document.form1.標準コースA:柄.value * 1; // 単価を設定 var price2e = document.form1.標準コースA:シート.value * 1; // 単価を設定 var price2f = document.form1.標準コースA:乾燥.value * 1; // 単価を設定 var total2 = document.form1.標準コースAの小計.value = (price2a + price2c + price2d + price2e + price2f) * price2b; // 小計を表示 // 合計を計算 var total = total1 + total2; // 設定終了 document.form1.合計.value = total; // 合計を表示 } // --> </script> <STYLE type=text/css> <!-- A:link { FONT-SIZE: 10pt; COLOR: #ff0000; TEXT-DECORATION: none ;} A:visited { FONT-SIZE: 10pt; COLOR: #ff0000; TEXT-DECORATION: none ;} A:active { FONT-SIZE: 10pt; COLOR: #ff0000; TEXT-DECORATION: none ;} A:hover { FONT-SIZE: 10pt

  • JAVAスクリプトでのFORM入力チェックの方法

    JAVAスクリプトでのFORM入力チェックの方法を教えてください。 ネットでいろいろ探してはめ込んだのですが、動作するプログラムが下記のしかありませんでした。 ラジオボタンの入力チェックとプルダウンの入力チェックを同時にしたいのですがよくわかりません。 今の状態ではラジオボタンをチェックしても未入力のアラートが出てしまいます。 あとこれにプルダウンの入力チェックをつけたいのですが… すいませんがどなたか教えてください。よろしくお願いします。 function Form_Validator(theForm) { var flag=false; var i; for(i=0; i<theForm.OPT-00-06.length; i++){ if (theForm.OPT-00-06[i].checked){ flag = true; break; } } if(!flag){ alert("\"OPT-00-06\" にチェックしてください。"); return (false); } if(confirm("入力もれはありません。")){ return (true); }else{ return (false); } <form name="form1" method="POST" action="~cgi?" onsubmit="return Form_Validator(this);"> ・ ・ <input type="radio" name="OPT-00-06" value="A"> <input type="radio" name="OPT-00-06" value="B"> ・ ・ <select name="OPT-00-07"> <option value="">選択してください</option> <option value="80">80</option> <option value="81">81</option> ・ ・ ・ <select name="OPT-00-08"> <option value="">選択してください</option> <option value="35">35cm</option> <option value="36">36cm</option> ・ ・ ・ <input type="submit" value="カートに入れる" name="submit">   <input type="reset" value="内容をクリア" name="reset"> </div> </form>

  • Java Scriptで・・・

    <form name="f"> <table border> <tr><td>番号</td><td>問題</td><td>解答</td><td>正誤</td></tr> <script type="text/javascript"> <!-- // 変数・関数の定義 var i, n1, n2; var s = new Array(11); // 正解を保存する配列 s[0] ~ s[10] function myrandom(n) { return Math.floor(Math.random() * n); } function check() { var i, ok=0, ng=0; for (i=1; i<=10; i++) { if (document.f.elements["s" + i].value == s[i]) { document.f.elements["c" + i].value = "○"; ok++; } else { document.f.elements["c" + i].value = "×"; ng++; } } document.f.ok.value = ok; document.f.ng.value = ng; } for(i=1; i<=10; i++){ n1 = myrandom(10) + 1; n2 = myrandom(10) + 1; s[i] = n1 + n2; document.writeln('<tr>'); document.writeln('<td>' + i + '</td>'); document.writeln('<td>' + n1 + ' + ' + n2 + ' =</td>'); document.writeln('<td><input type="text" name="s' + i + '" size="3"></td>'); document.writeln('<td><input type="text" name="c' + i + '" size="3"></td>'); document.writeln('</tr>'); } // --> </script> </table> <input type="button" value="答え合わせ" onclick="check();"> 正答数:<input type="text" name="ok" size="3"> 誤答数:<input type="text" name="ng" size="3"> </form> このようなプログラムを作ったのですが、この表示される10問が全部異なる問題となるようにするにはどうすればいいでしょうか?

  • 占いのスクリプトを書いたのですが

    先日よりJavaScriptの勉強をしていて、以下のスクリプトで、17時までは今日の運勢は?と表示して、17時以降は明日の運勢は?と表示したいのですが、うまく動きません。何処をどう直したら良いのでしょうか?  わかる方教えて下さい。よろしくお願いします。 <HTML> <HEAD> <TITLE>おみくじ</TITLE> </HEAD> <SCRIPT LANGUAGE="JavaScript"> <!--- function omikuji() { r=Math.round(Math.random()*4); if(r==1){ document.form_a.text1.value="ラッキー!大吉!";} else if(r==2){ document.form_a.text1.value="ほっ!中吉!";} else if(r==3){ document.form_a.text1.value="小吉!まぁまぁだね";} else if(r==4){ document.form_a.text1.value="末吉!こんなものかな";} else{ document.form_a.text1.value="凶・・気をつけないと";} } //---> <!-- acDate=new Date(); myHour=acDate.getHours(); // --> </SCRIPT> <BODY> <FORM NAME="form_a"> <INPUT TYPE="BUTTON" VALUE="おみくじ" onClick='omikuji()'> <INPUT TYPE="TEXT" if(myHour<=17){ VALUE="今日の運勢は?!"NAME="text1";} else if(myHour<=24){ VALUE="明日の運勢は?!"NAME="text1";} > </FORM> </BODY> </HTML>

  • javascriptのフォームデータをCGIで複数行取得

    javascript内の変数を複数行のフォームでCGIに渡したいのです。 その際のコードが document.write("<form name='form1' action='xxx.cgi' method='post' enctype='text/plain'>"+           "<input type='hidden' name='state' value=''>"+           "<input type='hidden' name='state2' value=''>"+           "</form>"+           "<input type='button value='送信' onClick='tocgi(a,b)'>");       tocgi(n1,n2){       document.form1.state.value=n1;       document.form1.state2.value=n2;       document.form1.submit();        } なのですが、a、bの値がそれぞれ10、20だった時、一行目のフォームデータは出力されるのですが、2行目が出力されないのです。実行結果でいうとstate=10ですね。引数を一つにしても同じでした。何がいけないのか、全然わかりません…。それとも、CGIのコードの書き方に問題があるのでしょうか。でも、CGIの方は変えずに単純にHTMLで記述すると上手くいくみたいなんですよね。どなたかわかる方がいたら助けて下さい!

    • 締切済み
    • CGI
  • クライアントマシンからルーターの自動制御を行う(Java Script操作)

    初心者です。 無線ルーター(Webcaster110)につながっているクライアントマシンから定期的にルーターへ命令を送り、ルーターを再起動させたいと思っています。 ブラウザで192.168.1.1でルーターにアクセスし、解析したところ、再起動ボタンをクリックする実態は以下になります。 <INPUT TYPE="button" NAME="reboot_only" VALUE="再起動" ONCLICK="reboot_kind(this,'0','1')"> なお、このreboot_kind(this,'0','1')の実態は /scripts/st_mainte.js に記述されており、該当箇所は function reboot_kind(field, dis_flg, lev) { var form = field.form; var ret = true; ret = Disabled_Action(dis_flg, field.name); if (ret != true) return; switch (lev) { case "st_pro": if (form.st_pro.disabled != false) { alert("「確認」ボタンをクリックしてから「送信」ボタンをクリックしてください。\n\n※設定した値が不正な値の場合、エラーメッセージが表示されます。"); form.BUTTON_FLAG.value = "0"; return false; } form.action = "/cgi-bin/st_reboot.cgi"; form.target = "_top"; form.CGI_OK_PATH.value="/reboot_update1.html"; form.REBOOT_LEVEL.value = "0"; form.BUTTON_FLAG.value = "1"; form.submit(); return true; case "0": ret = confirm ("設定したデータを本商品へ設定し、再起動を行います。\nよろしいですか?\n\n※再起動のあと、設定したデータが反映されます。"); break; case "1": ret = confirm ("本商品の再起動を行います。\nよろしいですか?\n\n※設定したデータは反映されません。"); break; case "2": ret = confirm ("本商品を初期設定へ戻し、再起動を行います。\nよろしいですか?\n\n※お客様が設定したデータはすべて失われます。"); break; case "3": ret = confirm ("本商品をシャットダウンして電源を切れる状態にします。\nよろしいですか?\n\n※電源投入時、設定したデータが反映されます。"); if (ret == true) { form.CGI_OK_PATH.value = "/reboot_shutdown.html"; } break; case "4": ret = confirm ("本商品をシャットダウンして電源を切れる状態にします。\nよろしいですか?\n\n※設定したデータは反映されません。"); if (ret == true) { form.CGI_OK_PATH.value = "/reboot_shutdown.html"; } break; } if (ret != true) { form.BUTTON_FLAG.value = "0"; if (dis_flg != "0") { field.disabled = false; } return false; } form.REBOOT_LEVEL.value = lev; form.submit(); return true; } function st_backupconf() { var ret; var form; var button; ret = false; button = '9'; document.st_backupconf_exec.BUTTON_EXEC.disabled = true; if(1 == document.st_backupconf_exec.BUTTON_FLAG.value){ alert("実行中です。"); document.st_backupconf_exec.BUTTON_EXEC.disabled = false; return false; } document.st_backupconf_exec.BUTTON_FLAG.value = "1"; button = Get_radio_checkedvalue(document.st_backupconf_form.ACTION_SEL); switch(button){ case '0': form = document.st_backupconf_save; form.ACTION_KIND.value = "0"; ret = confirm("設定データの保存を行います\n\n\n" + "※設定データを復元する際、現在設定中のWeb設定ログインパスワードを入力する必要があります\n" + "※現在の設定を本商品に反映したあとに保存することを推奨します"); break; case '1': form = document.st_backupconf_restore; ret = Null_NG(form.PASSWORD); if (ret != true) break; if(form.PASSWORD.value != ""){ ret = CheckID(form.PASSWORD); if (ret != true) break; } ret = Null_NG(form.UPLOAD_FILE); if (ret != true) break; ret = CheckFilePath(form.UPLOAD_FILE); if(false == ret) break; form.ACTION_KIND.value = "1"; ret = true; break; default: ret = false; break; } if (ret == true) { form.submit(); }else{ document.st_backupconf_exec.BUTTON_FLAG.value = "0"; document.st_backupconf_exec.BUTTON_EXEC.disabled = false; } return ret; } となっています。 Perlで書いたスクリプトをリモートマシンのCrontabで毎日走らせて実現できないかと考えています。どこからはじめればよいかご教授いただけると幸いです。

  • javascriptからCGIへの値渡し

    cookieは利用しない方向で考えています。 HTML上のdocument.form01.のsubmitが押下されたら一度手入力されたデータ(userinput)を加工し、 別のフォームform02.valueに格納してtest.cgiにPOSTで投げる動作を期待しています。 下記だとページ遷移無しで一時的な格納まで確認しましたが CGIへの送信が機能していないようです。 どの様にすべきでしょうか? [html] <script type="text/javascript"> <!-- function onSubmit() { document.form02.sendform.value = '\"' + document.form01.userinput.value + '\"'; document.form02.submit(); } --> </script> <body> <form name="form02" method="POST" action="test.cgi"> <input type="hidden" name="sendform" value=""> </form> <form method="POST" action="" name="form01"> <input type="text" name="userinput"> <input type="submit" value"送信" onclick="return onSubmit();"> </form> </body> </html>

  • javaの計算に関する質問です。

    以下のプログラムで、画像の矢印のように処理ができたのですが、(4)と(5)の計算値などを用いて更に計算をするにはどう記述すればよいのですか?できれば画像の赤○で囲ったような感じで四則演算したいのですが…よろしくお願いします。 <html> <body> <script type="text/javascript"> var rslt1 = 0; var rslt2 = 0; var rslt3 = 0; function hoge1(){ var a=document.getElementById('a').value; var b=document.getElementById('b').value; var rslt; if (a==1 && b==1) { rslt1=100; } else { if (a==1 && b==2) { rslt1=90; } else { if (a==2 && b==1) { rslt1=80; } else { rslt1=70; }}} document.getElementById('txt1').value=rslt1; sum1(); } function hoge2(){ var a=document.getElementById('a').value; var c=document.getElementById('c').value; var rslt; if (a==1 && c==1) { rslt2=95; } else { if (a==1 && c==2) { rslt2=85; } else { if (a==2 && c==1) { rslt2=75; } else { rslt2=65; }}} document.getElementById('txt2').value=rslt2; sum1(); sum2(); } function hoge3(){ var a=document.getElementById('a').value; var d=document.getElementById('d').value; var rslt; if (a==1 && d==1) { rslt3=60; } else { if (a==1 && d==2) { rslt3=50; } else { if (a==2 && d==1) { rslt3=40; } else { rslt3=30; }}} document.getElementById('txt3').value=rslt3; sum2(); } function sum1() { document.getElementById('txt4').value=rslt1 + rslt2; } function sum2() { document.getElementById('txt5').value=rslt2 + rslt3; } </script> <select id="a" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="b" onChange="hoge1()"> <option value="1">1<option value="2">2 </select>   <select id="c" onChange="hoge2()"> <option value="1">1<option value="2">2 </select> <select id="d" onChange="hoge3()"> <option value="1">1<option value="2">2 </select><p> <input type="text" id="txt1" value=""><p> <input type="text" id="txt2" value=""><p> <input type="text" id="txt3" value=""><p> <input type="text" id="txt4" value=""><p> <input type="text" id="txt5" value=""><p> </body> </html>

    • ベストアンサー
    • Java

専門家に質問してみよう