• ベストアンサー

ウィザード形式のアンケートを作りたい

HTML_QuickForm_Controllerみたいに,ウィザード形式で 進めるアンケートを作りたいです. まず,http://oshiete1.goo.ne.jp/qa2419133.htmlのNo3さんの 回答を元に1枚アンケートを作りました. アンケート回答を記入後,「送信」ボタンを押すと データベースをUpdateして,同じPHPファイルを読み込み(PHP_SELF) 記入にエラーがあればメッセージを, DB更新に成功したら更新成功,失敗したら失敗と表示するもの. ここで,更新がうまくいったら成功と表示するのではなく, 別のPHPファイルを読み込みたい(次のページに遷移したい)です. (無論.記入漏れやDB更新に失敗しら遷移せずにエラーが必要です) 骨組みだけ示すと,下記のような感じですが, 次のページに飛ばすには,どうしたらいいでしょうか. <?php $myID = getMyID(); $errFlg=false; if ( $_POST["reg"] == "" ) $errFlg = true; if ( !$errFlg ) $errmsg = "エラーあり"; if ( $errFlg ) { ?> <html> <body> <?php echo $errmsg; ?> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <input type="text" name="email" value="<?php if($_POST["reg"]=="") { echo $db_email; } else { echo $_POST["email"]; } ?>"><?= $errStr["email"] ?> <input type="submit" name="reg" value=" 送信 "> </form> </body> </html> <?php } else { $email = $_POST["email"]; $con = mysql_connect(localhost, root, pass); $selectdb = mysql_select_db(mydb, $con); $sql = "UPDATE mytable SET email = '$email', WHERE myID = '$myID'"; $rst = mysql_query($sql, $con); if ($rst) { $body = "更新成功"; } else { $body = "更新失敗"; } print "$body<br><a href='menu.php'>戻る</a>"; } ?>

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
noname#30334
noname#30334
回答No.2

このソースの場合は、JavaScriptでの遷移ではなく、 下記の方が良いと思います。 if ($rst) { //$body = "更新成功" header("Location: nextPage.php"); }

litton101
質問者

お礼

tdshさん,アドバイスありがとうございました. >header("Location: nextPage.php"); この「魔法の一文」で一発解決しました. 相当悩んでいたので,大助かりです. #1さんへの御礼にも書きましたが,サーバー側で処理したかったので その点でも良かったです. ありがとうございました.

その他の回答 (1)

  • hkd9001
  • ベストアンサー率48% (99/204)
回答No.1

litton101 さん、こんばんは。 さてご質問の件ですが、JavaScriptを組み合わせると可能であると思います。たしかJavaScriptの命令の中に「~~~.submit()」というのがありまして(~~~は、フォームの名前など)、これは実行すると別の画面に遷移するものだったと記憶しています。ご質問に書かれていた「記入漏れ」などもJavaScriptでチェックできるので便利です。…いまちょっと手元に参考書がない(職場に置きっぱなし)ので、あやふやな記憶ですみませんが、なんらかのヒントになれば幸いです。

litton101
質問者

お礼

hkd9001さん,アドバイスありがとうございました. また,御礼遅くなってすみませんでした 不特定多数に公開するものなので,できればjavascriptでなく サーバー側で対処できたらなーとは思いましたが, そういう解決もあるのだと大変参考になりました. ありがとうございました.

関連するQ&A

  • セッションを使わずに遷移先画面に変数の値を渡すには?

    <input type="hidden" value="myID">みたいな隠しフォームで 行く先々の画面に値をPOSTで渡してきました。 他方、 header("Location: mypage.php") のように画面を遷移させる場合、遷移先の画面に $_POST["myID"]のように値を渡すことはできませんか? この場合session_start();を使って、$_SESSION["myID"]のように値を 渡す(保持する)のが王道なのでしょうか? セッションと聞くと何かとトラブルになりやすそうなイメージがあり、 できれば使いたくないのです。 具体的に説明しますと、前にこの掲示板で教えていただいた、次の例を使っています。 入力文字チェックをかけたいのでPHP_SELFで同じ画面を呼び出して、 問題なければmypage.phpにリダイレクトさせる枠組みですが、 header("Location: mypage.php");という風に遷移した場合は、 遷移先のmypage.phpでは、$_POST["myID"]はPOSTされてきませんよね (値を受け取れませんよね)?? 妙案あればご教示下さい。 <?php if ($_POST["reg"] == "" ) $errFlg = true; if (!$errFlg) {     if (strlen($_POST["myName"]) > 30) {       $errFlg = true;       $errStr["myName"] = "30字以下";     }   $errMsg = "エラー!!"; } if ($errFlg) { ?> <html>   <body>     <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">       氏名 <input type="text" name="myName" value="<?= $_POST["myName"] ?>"><?= $errStr["myName"] ?>       <input type="hidden" name="myID" value="<?= $_POST["myID"] ?>">     </form>     <input type="submit" name="reg" value="登録">   </body> </html> <?php } else {     $sql = "update mytable set myID = 'xxxx'";     $rst = mysql_query($sql, $con);     header("Location: mypage.php"); } ?>

    • ベストアンサー
    • PHP
  • header(Location: next.php) だとPOSTした値が渡らない?

    文末は(だいぶ端折ってますが), (1) エラーがあればエラー表示, (2) エラーがなければnext.phpに飛ぶ という動作をするのですが, next.php 内に echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても valueの中身が渡ってきていません. header("Location: next.php"); で飛ばすとだめなのでしょうか. http://oshiete1.goo.ne.jp/qa2706500.html でも,#2さんのアドバイスのようにしようとしましたが, #1さんのご教示のように,セッションを利用するしかないですか? ちょっとセッションで値の渡し方がチンプンカンプンなのですが・・・ <?php session_cache_limiter('none'); session_start(); header("Cache-control:no-cache"); header("Pragma:no-cache"); $errFlg=false; if ( $_POST["reg"] == "" ) $errFlg = true; if ( !$errFlg ) { if ( $_POST["Name"] == "" ) { $errFlg = true; $errStr["Name"] = "未入力"; } } if ( $errFlg ) { ?> <html><body> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <?= $errStr["Name"] ?></td> <input type="text" name="Name" value="<?php echo $_POST["Name"]; ?>"> <input type="submit" name="reg" value="登録"></td> </form> </body></html> <?php } else { header("Location: next.php"); } ?>

    • ベストアンサー
    • PHP
  • 現在PHPの勉強をしています。初心者のためご教授いただければと思います

    現在PHPの勉強をしています。初心者のためご教授いただければと思います。 メールフォームを作成しており、エラーチェックで困っています。 簡単に流れを説明しますとフォーム画面で入力をしてもらったら確認画面へと移行します。 ここでエラーがあった場合、confirm.phpにてエラーチェックをし、form.phpに戻り、エラーがなければ確認画面にて入力した、項目が表示されるようにしたいと思っています。 ソースは下記のとおりになります。 form.php ---------------------- */ <html> <body> <form action="confirm.php" method="post"> 名前:<input type="text" name="name" value="" /<?php echo $errmsg['name'] ;?><br> 内容:<textarea name="comment" rows="5" cols="40"></textarea><?php echo $errmsg['comment'] ;?><br> <input type="hidden" name="contact" value="form" /> <input type="submit" name="submit" value="確認" /> </form> </body> </html> confirm.php ---------------------- */ <?php $name = $_POST['name']; $comment = $_POST['comment']; if(isset ($_POST['contact'])) { $errmsg = array(); if(empty($name)){ $errmsg['name'] = '未入力'; } if(empty($comment)){ $errmsg['comment'] = '未入力'; } if (count($errmsg) != 0) { header("Location: index.php"); exit; } } ?> <html> <body> 名前:<?php echo $name; ?><br /> 内容:<?php echo $comment; ?><br /> </body> </html> としております。 if (count($errmsg) != 0) { header("Location: form.php"); exit; 上記のようにするとエラーチェックの表示がされません。 require(form.php);にするとform.phpが表示されるのですがURLを見るとconfirm.phpの状態になっております。 header("Location: form.php");を使用してのエラーチェックをしたいのですが、どのように記述したらよろしいのでしょうか? 上記の内容でどなたかご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • ログイン認証で

    ログイン認証で <? session_start(); $con=mysql_connect(localhost,***,***); mysql_select_db("***"); $passwd=addslashes($_POST['passwd']); $email=addslashes($_POST['email']); $name=addslashes($_POST['name']); $sql="select * from users where email='{$_POST['email']}' and passwd='{$_POST['passwd']}'"; $_session['name']=$name; $rs=mysql_query($sql); if(mysql_num_rows($rs)>0){ $_session['login']=1; header('location:'. "top.php"); exit; } mysql_close($con); ?> <html> <head> <title> </title> </head> 認証失敗 <br> <a href="login.php"> 戻る</a> <body> と入力したのですが、 emailとpasswdに合ったnameを違うページに表示したいのに、それができないんです・・・ ようこそ<? $_SESSION['name']?> さん<br> どこかおかしなところありますか?

    • ベストアンサー
    • PHP
  • PHPでテスト形式のプログラムを作ってます

    ラジオボタンA,B,C,Dを使って選択し、NEXTボタンを押したら次の問題を表示し、回答をSESSIONの配列に書き込むプログラムを作っています。 クリックしたときにprint_r($_SESSION)で配列を表示するようにしたのですが、配列の番号と中身がそのときクリックしたときの一つしか表示されないので全部きちんと入っているのか分かりません。 きちんとSESSIONに保存されているのでしょうか? <html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <body> <p>&nbsp;</p> <p> <?php $qno=$_POST["next"]; if($qno==null){ $qno=1; }else{ $qno++; } ?> </p> <p>&nbsp; </p> <form method="post" action="session.php"> <input TYPE="radio" NAME="answer" VALUE="1" CHECKED>ア <input TYPE="radio" NAME="answer" VALUE="2">イ <input TYPE="radio" NAME="answer" VALUE="3" CHECKED>ウ <input TYPE="radio" NAME="answer" VALUE="4">エ <input type="submit" name="submit" value="Next"> <input type="button" value="最初から" onClick="location.href='session.php'"> <input type="button" value="Back" onClick="history.back()"> <input type="hidden" name="next" value="<?php print $qno?>"> </form> <TEXTAREA readonly cols="100" rows="20" name="e"> <? mb_language("uni"); mb_internal_encoding("utf-8"); //内部文字コードを変更 mb_http_input("auto"); mb_http_output("utf-8"); $db=mysql_connect("localhost","接続ID","パスワード"); mysql_query("SET NAMES utf8",$db); //クエリの文字コードを設定 mysql_select_db("データベース名"); //データベースに接続 if (!$con = mysql_connect("localhost", "接続ID", "パスワード")) { echo "接続失敗" ;   exit ; } //データベースを選択 if (!mysql_select_db("データベース名", $con)) { echo "データベース選択失敗" ;   exit ; } $sikenbango=111; if (!$res = mysql_query("SELECT * FROM `MONDAI` WHERE SIKENBANGO='$sikenbango' AND MONDAIBANGO='$qno'",$con)) { echo "SQL失敗<BR>" ;   exit ; } //検索した結果を全部表示 while ($row = mysql_fetch_array($res)) { echo $row["mondai"]; echo "<BR>" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </textarea> <?php session_start(); if (!isset($_SESSION[$mondaibango])) { $_SESSION[$mondaibango] = array(); } if (isset($_POST['submit'])) { $qno = intval($_POST['next']); if (($qno >= 1)and($qno <=80)) { $_SESSION['answer'][$qno] = $_POST['answer']; // セッションに追加 // データベースへも保存したければここに記述 print_r($_SESSION); } } else { $qno = 0; } if ($qno == 80) { // 全問題終了時の処理 } else { $qno=$_POST["next"]; if($qno==null){ $qno=1; }else{ $qno++; } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPでMySQLのDBに接続

    PHP,MySQLが使えるレンタルサーバーを借りているのですが, PHPでMySQLに接続し、php_dbを選択をするようにしたいのですが、 この時DBファイルはどこに置けばいいのでしょうか? 現在はMySQLの管理コマンド(?)とは別にpublic_htmlの中に PHPフォルダを作り、そこにDBファイルを入れています。 PHPのスクリプトは <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>練習</title> <meta http-equiv="content-language" content="ja"> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head><body> <?php $con = mysql_connect(); if (!$con) { echo ("Error:MySQLに接続できませんでした。<br />"); } else { echo ("接続ID=$con<br>\n"); } $selectdb = mysql_select_db("php_db" ,$con); if (!$selectdb) { echo ("Error:データベースを選択できませんでした"); } else { echo ("データベースphp_dbを選択しました。"); } ?> </body></html> としています。 MySQLには接続ができるのですが、php_dbには接続ができません。 php_dbのおき場所を変えるのか、ファイルの指定が間違っているのか その他、どの要に変更をしたらよいのでしょうか? お願いします。 環境はレンタルサーバーがLINUXでPHPのバージョンなどはわからないんです・・・!! 開発がOSがW2kでFTPで転送してます。

    • ベストアンサー
    • PHP
  • phpでのsql文で変数を使う

    POSTで受け取った文字列を,テーブル名として新規テーブルを作成したいのですが,sql文発行の際の変数の記述方法がわかりません。 ネットや本に書いてある方法は一通りためしたのですが,失敗しましたとなります。 ご教授下さい。 php 5.2.3 apache2.2.4 mysql 5.0.45 <?php require_once("../dbini.php"); $con = mysql_connect($DBSERVER, $DBUSER, $DBPASS); $selectdb = mysql_select_db($DBNAME, $con); $name = $_POST['name']; $sql = "create table $name ( qno int(3), qcontents text(500))"; $rst = mysql_query($sql,$con); if($rst){ echo $name . "を作成しました。"; }else{ echo "データベースの作成に失敗しました。"; } ?>

    • ベストアンサー
    • PHP
  • FORMからPHP処理  

    こんにちわ ある参考書をみながらスクリプトを打ち込んでいるのですがFORM(touroku.html)で登録ボタンを押すと(touroku.php)にpostで送信されデータベース処理をした結果(登録完了)と表示されるはずなのですが何も表示されません。参考書ではhttp://touroku.htmlからhttp://touroku.phpに移動しているのですけど自分のはC:\www\touroku.htmlからC:\www\touroku.phpに移動しています。このあたりが何か関係あるのでしょうか?サーバーはANHTTPDを使用しています。なにか設定が間違っているのでしょうか?スクリプトは以下の様です。 <html> <body> <?php if(!$con=mysql_connect("localhost,"mysql","****")){ echo"接続エラー"; exit; } if (!mysql_select_db("****",$con)){ echo"データベース選択エラー"; exit; } $sql = "insert into ****_tbl(name,age) values('$nm',$age)"; //sqlを実行 if(!$res=mysql_query($sql)){ echo "Sql実行時エラー"; exit; } mysql_close($con); echo "登録完了"; ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHP/MySQL SQLエラーについて。

    PHP/MySQLについての質問です。 当方PHP/MySQLについては初心者で、現在参考書を見ながらWebアプリケーションを作成しています。 いくらやっても成功しない例があるので、どこが間違っているのか、 なぜ成功しないのかご教示願いたいです。 エラー名:SQL実行エラー 要因:不明。SQL文を変えたりしたところ成功したこともあるので(elect id,name,age from input_table 等)SQL文に間違いがあるのか? -------------------input.html------------------------ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <form action="input.php" method="post"> 名前:<input type="text" name="nm"> 年齢:<input type="text" name="age"> <input type="submit" name="exec" value="登録"> </form> </body> </html> -----------------------input.php---------------------------- <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <?php //DB接続 if(!$con=mysql_connect("localhost","root","********")){ //passwardは正確 echo"接続エラー"; exit; } //DB選択 if(!mysql_select_db("input",$con)){ echo"DB選択エラー"; exit; } $sql = "insert into input_table(name,age) values('$nm',$age)"; if(!$res=mysql_query($sql)){ echo"SQL実行エラー"; //ここでこのエラーが表示されてしまう exit; } echo "登録完了"; mysql_close($con); ?> </body> </html> --------------------database----------------------- create table input_table( id int not null auto_increment, name varchar(20) not null, age int not null, primary key(id) )

    • ベストアンサー
    • PHP
  • php データ削除

    一覧画面に更新、削除というボタンをつくり番号を受け取って削除したいのですが、削除ボタンを押しても画面は変わるのですが削除されません 助けてください 番号 int プライマリーキー 氏名 varchar 住所 varchar 一覧画面のソース <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一覧画面</title> </head> <body> <BLOCKQUOTE> <BR>一覧画面<BR><BR> <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM tbl_test"); echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['番号'] . "</td>"; echo "<td>" . $row['氏名'] . "</td>"; echo "<td>" . $row['住所'] . "</td>"; echo "<form action=koushin_input.php method=post>"; echo "<td><input type=submit value=更新></td>"; echo "</form>"; echo "<form action=sakujo.php method=post>"; echo "<td><input type=submit value=削除></td>"; echo "</form>"; echo "</tr>"; } echo "</table>"; mysqli_close($con); ?> <BR><BR><BR> <A HREF="http://localhost/regist.php"> <INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A> </BLOCKQUOTE> </body> </html> 削除ソース  sakujo.php <html> <body> <? // データベースに接続 if(!$con=mysql_connect("localhost","root","admin")){ echo"接続エラー"; exit; } // データベースを選択 if(!mysql_select_db("db_test",$con)){ echo"データベース選択エラー"; exit; } // DELETE文を実行 $sql = "delete from tbl_test where '番号'= 番号; if(!$res=mysql_query($sql)){ echo "SQL実行時エラー"; exit; } // データベースから切断 mysql_close($con); // 登録完了メッセージの表示 echo "削除完了"; ?> </body> </html> どういう風にpostで渡せばいいですか?

    • ベストアンサー
    • MySQL

専門家に質問してみよう