セレクトボックスについて

このQ&Aのポイント
  • ログイン画面のセレクトボックスでCさんを選択し、パスワードを間違えて入力した場合、セレクトボックスの値がAさんにリセットされる問題について。
  • ログイン画面でセレクトボックスの値を保持する方法を教えてください。
  • ログイン画面のセレクトボックスでCさんを選択した状態を維持する方法について。
回答を見る
  • ベストアンサー

セレクトボックスについて

ログイン画面を作っていまして、セレクトボックスでCさんを選択し、パスワードを間違えて入力(valueの値がパスだと思って頂いて結構です)したらログイン失敗メッセージを出して、リンクからログイン画面に戻れるように下記のコードになっているのですが、 セレクトボックスの値がAさんにリセットされてしまいます。この時、Aさんではなくて最初にセットしたCさんにセットする方法はどのようにするのでしょうか? #ログイン画面用サブルーチン print "Content-type: text/html\n\n"; print "<html>\n"; print "<head>\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"; print "<title></title>\n"; print "</head>\n"; print "<body>\n"; &analysis; &auth; sub analysis{ if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\r//g; $FORM{$name} = $value; } $pass2 = $FORM{'password'}; return; sub login{ print <<HEADER; <center> <caption> <h1>ログイン</h1> </cption> <table border="5" bgcolor="cfcfcf" width="300" height="150"> <tr> <td align="center" valign="center"> <form name="form" method="post" action="./rental.cgi"> ユーザー名: <select name="user_name"> <option value="1" $check1>A</option> <option value="2" $check2>B</option> <option value="3" $check3>C</option> </select> <br> <br> パスワード: <input type="password" name="password"> <br> <center> <input type="submit" name="submit" value="ログイン"> </center> </form> </td> </tr> </table> </center> HEADER } #ユーザー認証サブルーチン sub auth{ use DBI; $db_name = "bookmanagement"; $db_host = "localhost"; $db_user = ""; $db_password = ""; $db_table = "usertable"; $ID = $pass1; $password = $pass2; $conn = DBI->connect("DBI:Pg:dbname=$db_name;host=$db_host",$db_user,$db_password)||die "DBI connect failed: &DBI::errstr"; $sql = "select userID,pass from usertable where pass='$password'"; $result = $conn->prepare($sql); $ref = $result->execute; print <<HEADER; <script type="text/javascript"> function henkyaku(id){ document.form.user_name.value=id; document.form.submit(); } // --> </script> HEADER ($db_userID,$db_password) = $result -> fetchrow_array(); $result -> finish; if($pass2 eq ''){ &login; } elsif(($db_password eq $password) and ($db_userID eq $ID)){ &display; } else{ print "<center>"; print "ログインに失敗しました。<br>ユーザー名・パスワードを確認してもう一度ログインしてください。<br><br>"; print "<a href=\"./rental.cgi\" onClick=\"henkyaku('$pass1')\">" ."ログインページへ戻る"."</a>"; print "</center>"; } $conn -> disconnect; } print <<FOOTER; </body> </html> FOOTER 1;

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

質問者が選んだベストアンサー

  • ベストアンサー
  • nagare
  • ベストアンサー率33% (280/831)
回答No.1

selected属性を追記すればできます <option value="3" $check3 selected>C</option> print "<a href=\"./rental.cgi\" onClick=\"henkyaku('$pass1')\">" ."ログインページへ戻る"."</a>"; も修正ですね

nardobrea
質問者

補足

nagare様返事が遅くなりすみません。ありがとうございます。 色々と試してみたのですが、結局分らなくなってしまい、戻るリンクをやめて、 エラーメッセージとログインページを同じページに出す事で回避出来ましたのでご報告させて頂きます 回答まで頂いたのに申し訳ありませんでした。

関連するQ&A

  • コーディングについて

    http://www.aimix.jp/cgi/accformkioku.html 上のサイトを参考にログイン画面を作っていまして、 この例の場合のようにセレクトする値が3つ、4つならこの書き方でもよいと思うのですが、 セレクトする値が10個、15個…となればソースが長くなり、とても見づらいものとなってしまいます。もうちょっとスマートな 書き方はあるのでしょうか?(一部略してあります) print "Content-type: text/html\n\n"; print "<html>\n"; print "<head>\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"; print "<title></title>\n"; print "</head>\n"; print "<body>\n"; &analysis; &auth; sub analysis{ if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\r//g; $FORM{$name} = $value; } $pass1 = $FORM{'user_name'}; return; sub login{ if($pass1 eq '1'){ $check1 ="selected"; } elsif($pass1 eq '2'){ $check2 ="selected"; } else{ $check3 ="selected"; } print <<HEADER; <center> <caption><h1>ログイン</h1></cption> <table border="5" bgcolor="cfcfcf" width="300" height="150"> <tr> <td align="center" valign="center"> <form name="form" method="post" action="./xxx.cgi"> ユーザー名: <select name="user_name"> <option value="1" $check1>A</option> <option value="2" $check2>B</option> <option value="3" $check3>C</option> </select> <br><br> パスワード: <input type="password" name="password"> <br> <center> <input type="submit" name="submit" value="ログイン"> </center> </form> </td> </tr> </table> </center> HEADER } print "</body>"; print "</html>"; 1;

    • ベストアンサー
    • Perl
  • DBの更新について困っています

    以前 http://oshiete1.goo.ne.jp/qa5494372.html で質問させていただいたものですが、3の『「貸し出し中ではない」本は、「借りる」といるリンクがつく。「借りる」をクリックすると、JavaScriptによるアラートで「本XXXXを借りますか?」と出す。』まで何とかサブルーチンを使って出来たのですが、それ以降の『データベースを更新して云々』が良く分からないのですが、どのようなコードを書けばDBを更新出来て、図書リストを更新表示出来るのでしょうか?よろしくお願いします。 #!/usr/bin/perl #メイン処理 &start; &analysis; if($pass2 eq ''){ &login; }else{ &msg; } #HTMLヘッダー表示サブルーチン sub start{ } #引数解析サブルーチン sub analysis{  #出来ています } #ログインサブルーチン sub login{ print "<center>"; print "<caption><h2>ユーザーログイン</h2></cption>"; print "<form method=\"post\" action=\"./login2.cgi\">"; print "ユーザー名:"; print "<select name=\"user_name\">"; print "<option value=\"1104\">A</option>"; print "<option value=\"1111\">B</option>"; print "</select><br>"; print "パスワード:"; print "<input type=\"password\" name=\"password\"><br>"; print "<input type=\"submit\" name=\"submit\" value=\"ログイン\">"; print "</form>"; print "</center>"; } #図書管理画面を見せるサブルーチン sub display{ use DBI; use strict; my $dbname = "bookmanagement"; my $host = "localhost"; my $user = ""; my $password = ""; my $table = "booktable"; my $conn = DBI->connect("DBI:Pg:dbname=$dbname;host=$host", $user, $password )|| die "DBI connect failed: $DBI::errstr"; my $sql = "select * from $table order by date desc"; my $result = $conn->prepare($sql); my $ref = $result->execute; print <<HEADER; <body> <center> <table border=2> <caption><h2>図書管理システム</h2></caption> <tr bgcolor="#dcdcdc"> <th>ID</th> <th nowrap>本名称</th> <th nowrap>著者</th> <th>説明</th> <th nowrap>登録日</th> <th nowrap>貸出中?</th> <th nowrap>最終貸出日</th> <th nowrap>最終貸出人</th> </tr> HEADER while(my @ref = $result->fetchrow) { print <<ROW; <script type="text/javascript"> <!-- function dialog(msg){ if(confirm(msg)==true){ } } // --> </script> <tr> <td>$ref[0]</td> <td>$ref[1]</td> <td nowrap>$ref[2]</td> <td>$ref[3]</td> <td nowrap>$ref[4]</td> <td nowrap> <a href="#" onClick="dialog('本「$ref[1]」を借りますか?')">$ref[5]</a> </td> <td nowrap>$ref[6]</td> <td><br>$ref[7]</td> </tr> ROW } print <<FOOTER; </table> </center> FOOTER $result->finish; $conn->disconnect; } #パスワード認証ルーチン sub auth{ use DBI; $db_name = "bookmanagement"; $db_host = "localhost"; $db_user = ""; $db_password = ""; $db_table = "usertable"; $ID = $pass1; $password = $pass2; print <<HEADER; <html> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <title></title> </head> <body> HEADER $conn = DBI->connect("DBI:Pg:dbname=$db_name;host=$db_host",$db_user,$db_password)||die "DBI connect failed: &DBI::errstr"; $sql = "select userID,pass from usertable where pass='$password'"; $result = $conn->prepare($sql); $ref = $result->execute; ($db_userID,$db_password) = $result -> fetchrow_array(); $result -> finish; if(($db_password eq $password) and ($db_userID eq $ID)){ &display; #DBのパスと入力されたパスが同じなら図書管理画面の表示 } else{ print "ログインに失敗しました。ユーザー名・パスワードを確認してください。"; } $conn -> disconnect; } print <<FOOTER; </body> </html> FOOTER 1;

    • ベストアンサー
    • CGI
  • セレクトBOXをプルダウン形式にしたいのですが・・・

    CGI初心者です。セレクトボックスで表示しているものをプルダウン形式にしたいのですが、どこを直したらいいのか教えてください。 ちなみに、いまのスクリプトは $size1 = @part1 + 1; print "<td valign=top nowrap><font color=\"$t_color\">■</font> <B>ユーザ名</B><br>\n"; print "<select name=P1 size=\"$size1\">\n"; print "<option value=\"99\" selected>指定なし\n"; foreach (0 .. $#part1) { print "<option value=\"$_\">$part1[$_]\n"; } print "</select></td>\n"; です。

    • ベストアンサー
    • CGI
  • フォントサイズを変えるには?

    print "<table width=600 border=0 align=center> <tr> <td align=center>\n"; print "<br><br><font size='2' color=$t_color><small>*** 編集・削除用 ***</small></font><br>\n"; print "<select name=mode>\n"; print "<option value=usr_edt>編集\n"; print "<option value=usr_del>削除</select>\n"; print "パスワード <input type=password name=pwd size=4 maxlength=8>\n"; print "<input type=submit value=\"送信\"> </form> </td> </tr> </table>\n"; 上の、「編集」と「削除」という文字のサイズを変えたいのですが、 どうすればいいのですか? <font size='2'>とか入れたけど、変わりませんでした。 (入れた場所が悪かったのかな??) お願いします。

    • ベストアンサー
    • CGI
  • セレクトボックスとチェックボックスを使った絞込み検索

    Yomi-Searchについての質問なのですがタイトルの通りの質問でチェックボックスを使った絞り込み検索では 01_03 04_01 と検索結果に表示されるのですがセレクトボックスとチェックボックスを組み合わせて絞り込み検索をしてみると 01_0304_01 とこのようにカテゴリとカテゴリの間にスペースが入らず絞り込み検索が出来ません‥ タグはこのように書きました。 <FORM action="http://www..." method="get" target="" name="form1"> <INPUT type="hidden" name="mode" value="search"> <INPUT type="hidden" name="page" value="1"> <INPUT type="hidden" name="sort" value="mark"> <INPUT type="hidden" name="engine" value="pre"> <INPUT type="hidden" name="kn" value="30"> <SELECT size="1" name="word"> <OPTION type="selected" value="">--------</OPTION> <option value="01_01" name="word1">○○○</option> <option value="01_02" name="word2">○○○</option> <option value="01_03" name="word3">○○○</option> </SELECT><BR> <BR> <INPUT type="checkbox" name="word4" value="04_01">○○○<BR> <INPUT type="checkbox" name="word5" value="04_02">○○○<BR> <INPUT type="checkbox" name="word6" value="04_03">○○○<BR> <BR> <INPUT type="submit" value=" 検 索 "> <INPUT type="reset" value="リセット"> &nbsp; </FORM> 全くの初心者ですいませんが良きアドレスなどをお願いします。

  • チェックボックスの使用

    PostgreSQL+PHP初心者です。 DBから登録者一覧を抽出し、CheckBoxでチェックしたものだけ 修正をします。 DBから抽出し、テーブルを作成するところまでは出来ました。 その後CheckBoxのチェック済みだけを修正する場合はどうすればいいですか? ↓現在のソースです。 <html> <head> </head> <body> <FORM NAME="form1" action="insert.php" method="post"> <? $hostname="svibm01"; $con = pg_connect("host=$hostname dbname=testdb user=testuser password=testuser"); if(!$con) { print "データベースに接続できませんでした.\n"; exit; } $sql = "select * from name"; $rtn = pg_exec($con, $sql); if(!$rtn) { print "テーブルの検索に失敗しました.\n"; pg_close($con); exit; } $m = pg_numrows($rtn); $n = pg_numfields($rtn); print "<table border>\n"; print "<tr>\n"; print "<th> </th>"; $i = 0; while($i < $n) { print "<th>".pg_fieldname($rtn, $i)."</th>\n"; $i++; } print "</tr>\n"; $j = 0; while($j < $m) { $i = 0; print "<tr>\n"; print "<td align=center><input type=checkbox name=check".pg_result($rtn, $j, $i)." value=".pg_result($rtn, $j, $i)."></td>"; while($i < $n) { print "<td align=center>".pg_result($rtn, $j, $i)."</td>\n"; $i++; } print "</tr>\n"; $j++; } pg_close($con); print "</table>"; ?> <br> <br> <input type="submit" name="add" value="追加" /> <input type="submit" name="upd" value="変更" /> </FORM> </body> </html>

    • 締切済み
    • PHP
  • cgiでのユーザーIDとパスワードの認証

    パスワードの確認しかないcgiにユーザーIDの認証も追加したいのですが、どのように変更すれば良いのかわかりません。皆さんのアドバイスよろしくお願いします。 ※ユーザーID $text = 'test' # パスワードの確認 if ($formdata{'pass'} eq $password or $cookies{'pass'} eq $password) { $access = $upload = $delete = 1; $cookie = "Set-cookie: pass=$password\n"; } elsif ($formdata{'pass'} or $cookies{'pass'}) { $form_log .= "パスワードが正しくありません。<br>"; }

  • php ログインについて

    php ログインについて phpでログイン画面を作っているのですがログインできません。エラー等々もでず、「スタッフコードかパスワードが違います」になります。ちなみにDBにはスタッフのデータはしっかり存在します。 コードとパスワードを正しく入力しているにもかかわらずログインできません。 ソースはこちらです [staff_login.php] <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>ログイン</title> </head> <body> スタッフログイン<br/> <br/> <form method="post" action="staff_login_check.php"> スタッフコード<br/> <input type="text" name="code"><br/> パスワード<br/> <input type="password" name="pass"><br/> <br/> <input type="submit" value="ログイン"> </form> </body> </html> [staff_login_check.php] <?php try { $staff_code=$_POST['code']; $staff_pass=$_POST['pass']; $staff_code=htmlspecialchars($staff_code); $staff_pass=htmlspecialchars($staff_pass); $staff_pass=md5($staff_pass); $dsn='mysql:dbname=*****;host=********'; $user='*********'; $password='********'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT name FROM mst_staff WHERE code=? AND password=?'; $stmt=$dbh->prepare($sql); $data[]=$staff_code; $data[]=$staff_pass; $stmt->execute($data); $dbh = null; $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { print'スタッフコードかパスワードが違います<br/>'; print'<a href="staff_login.html">戻る</a>'; } else { header('Location: staff_top.php'); } } catch(Exception $e) { print'エラーが発生しました'; exit(); } ?> 解決方法、ご指摘ございましたら教えていただきたいです。

    • ベストアンサー
    • PHP
  • ハッシュの要素を別ファイルに渡すことができますか

    perlで次のようなプログラムがあります。 sub { 中略 $USERS{$xy}       #$xyは変数  中略 } <form name="user" action="$ENV{'SCRIPT_NAME" method="POST"> ユーザー名:<input type="text" name="username"><br> パスワード:<input type="password" name="pass" value=""><br> <input type="submit" value="ログイン"> ------------- このとき$USERS{$xy} の要素を別ファイルに渡すことができますか。可能ならばどのようにすればよいでしょうか

    • ベストアンサー
    • Perl
  • POST からの受け渡しができません・・・

    教えてくださいm(__)m <FORM action="<? echo $PHP_SELF; ?>" method="POST"> :(ここにはif文がはいっています。) : print "お名前:<BR>\n"; print "<input type=\"text\" name=\"handle\" size=\"16\" maxlength=\"30\" value=\"<? echo ($handle); ?>\"><br><br>\n"; print "性別:<BR>\n"; for (reset ($sex_tbl); $key = key ($sex_tbl); next ($sex_tbl)) { echo (" <OPTION value=\"" . $key . "\""); if ($key == $sex) echo (" SELECTED"); echo (">" . $sex_tbl[$key] . "\n"); } print "PRポイント:<BR>\n"; print "<input type=\"text\" name=\"pr\" size=\"16\" maxlength=\"30\" value=\"<? echo ($pr); ?>\"><br><br>\n"; print "<CENTER><input type=\"submit\" value=\"次の人!\"></CENTER><br>\n"; print "<input type=\"hidden\" name=\"page\" value=\"kekkapage\">\n"; print "<input type=\"hidden\" name=\"handle\" value=\"" . $_POST['handle'] . "\">\n"; print "<input type=\"hidden\" name=\"sex\" value=\"" . $_POST['sex'] . "\">\n"; print "<input type=\"hidden\" name=\"pr\" value=\"" . $_POST['pr'] . "\">\n";←80 </FORM> : : ↑なのですが、 「・・・on line 80」エラー表示になりうまくいきません。 の部分が原因と表示にはなっているのですが…。 助けてください。 宜しくお願いしますm(__)m

    • ベストアンサー
    • PHP

専門家に質問してみよう