日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP事はじめ » エラーの原因がわからない。

エラーの原因がわからない。

ページ: 1

投稿者 投稿
会員
登録者: 9 2009
返信数: 1
はじめまして。

今回、過去に学校の課題で制作したプログラムを改めて動かそうと
したのですが、動かなくなっており対処の方法がわからず投稿します。

そのプログラムはユーザーにアンケートを作成してもらうという内容のもので
流れとしては
アンケートのタイトル入力→アンケート項目入力→入力確認→個別のhtmlを生成
となっています。

エラーが出るのは入力確認の部分なのですが、コメントアウトした部分が
一部表示されてフォームの入力内容が受け取れないというものでどこを対処すればよいのか判らず困っております。
コードはほぼ初めて参考書などを参考にしながらで、いろいろと見苦しいかと思いますが
なにか対処の手がかりなどいただけたらうれしいです。

環境:XP
XAMPPver2.5?

タイトル入力
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link media="all" type="text/css" href="./css/default.css" rel="stylesheet"/>
</link>
<link media="all" type="text/css" href="./css/top_base.css" rel="stylesheet"/>
</link>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>アンケートにタイトルをつけてください</title>
</head>
<body>
<div id="wrapper">
<div id="content">
<h1>アンケートに名前を付けてください</h1>
<form method="post" action="simplemode.php">
<input type="text" name="name" >
<input type="submit" value="タイトルを決定">
</form>
<p>ヒント:~のアンケートなど</p>
</div>
</div>
</body>
</html>


アンケート項目入力

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link media="all" type="text/css" href="./css/default.css" rel="stylesheet"/>
</link>
<link media="all" type="text/css" href="./css/top_base.css" rel="stylesheet"/>
</link>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>無題ドキュメント</title>
</head>
<body>
<?php
$name = $_POST["name"];
?>
<div id="wrapper">
<div id="content">
<?php echo $name ?>
<h1>質問したい内容を決めてください</h1>
<form method="post" action="kakunin.php">
<input type="hidden" name="name" value="<?php echo $name ?>">
<input type="text" name="enq1" >
<input type="text" name="enq2" >
<input type="text" name="enq3" >
<input type="submit" value="送信">
</form>
</div>
</div>
</body>
</html>



入力確認



<link media="all" type="text/css" href="./css/top_base.css" rel="stylesheet"/>
</link>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>タイトルを決めてください</title>
</head>
<body>

<?PHP


if($_SERVER['REQUEST_METHOD'] == "POST")
{foreach($_POST as $k => $v){
//magic_quotes_gpcって?
if(get_magic_quotes_gpc()){
$v = stripslashes($v);
}
$v = htmlspecialchars($v);
$$k = $v;
}
}
//そうじゃなければFALSEなら終わり?
else{
exit();
}
//値をチェックします
/*
$ErrFlg = 0;
if($name == ""){
echo "<p>展覧会の名前かアンケートの名称を入力してください";
$ErrFlg = 1;
}

if($enq1 == ""){
echo "<p>最初の質問を入力してください";
$ErrFlg = 1;
}

if($enq2 == ""){
echo "<p>目の質問を入力してください";
$ErrFlg = 1;
}

if($enq3 == ""){
echo "<p>みっつ目の質問を入力してください";
$ErrFlg = 1;
}
if($ErrFlg){
exit();
}
*/
?>
<div id="wrapper">
<div id="content">
<p>入力内容に間違いはないですか?
<form method="POST" action="<?PHP echo "seisei.php" ?>">
<table border="0">
<tr>
<td>アンケート名</td>
<td><?php echo $name ?></td>
</tr>

<tr>
<td>アンケート内容1</td>
<td><?php echo $enq1 ?></td>
</tr>

<tr>
<td>アンケート内容2</td>
<td><?php echo $enq2 ?></td>
</tr>

<td>アンケート内容3</td>
<td><?php echo $enq3 ?></td>
</tr>

<tr>
<!--colspanを入れるわけ -->
<td colspan="2"><input type="submit" value="作成"></td>
</tr>

</table>
<!--上にある変数のデータ送信用inputしか送る方法がないため -->
<input type="hidden" name="name" value="<?php echo $name ?>">
<input type="hidden" name="enq1" value="<?php echo $enq1 ?>">
<input type="hidden" name="enq2" value="<?php echo $enq2 ?>">
<input type="hidden" name="enq3" value="<?php echo $enq3 ?>">
<!--<input type="hidden" name="dir" value="<?php echo $dir ?>">-->
</form>
</div>
</div>
</body>
</html>


表示されてしまうのは以下の部分です。
なぜコメントアウトしても表示されてしまうのかが一番不可解困っております。
$v){
//magic_quotes_gpcって?
if(get_magic_quotes_gpc()){
$v = stripslashes($v);
}
$v = htmlspecialchars($v);
$$k = $v;
}
}
//そうじゃなければFALSEなら終わり?
else{
exit();
}
//値をチェックします
/*
$ErrFlg = 0;
if($name == ""){
echo "<p>展覧会の名前かアンケートの名称を入力してください";
$ErrFlg = 1;
}

if($enq1 == ""){
echo "<p>最初の質問を入力してください";
$ErrFlg = 1;
}

if($enq2 == ""){
echo "<p>目の質問を入力してください";
$ErrFlg = 1;
}

if($enq3 == ""){
echo "<p>みっつ目の質問を入力してください";
$ErrFlg = 1;
}
« 最終編集者 KKG 日時 2009 年 9 月 28 日(月) 19:33. »
会員
登録者: 1 2010
返信数: 7
いくつかの構文ミスを発見しました
おそらく致命的なエラーはKKGさん本人がご指摘のように、
kakunin.phpの12行目だと思われます。
コメントアウトは26行目からですので、それ以前に問題があればその部分は表示されてしまいます。
foreach($_POST as $k => $v
kakunin.phpの、<?php以降を、下のように変えてみてください。

<?PHP
// リクエストメソッドがPOSTの場合、生成フォームへデータを渡す
if($_SERVER['REQUEST_METHOD'] == "POST"){
// アーギュメントから必要なデータの取り出し
/*
ここは必要とする引数が予め分かっているため、
$_POST['****']で取得する方がセキュアなのでは?
ここではあえてforeachのままで処理を行う。
*/
foreach($_POST as $k => $v){
$v = htmlspecialchars($v);
($k == "name")?$name = $v:$name=$name;
($k == "enq1")?$enq1 = $v:$enq1=$enq1;
($k == "name")?$enq2 = $v:$enq2=$enq2;
($k == "name")?$enq3 = $v:$enq3=$enq3;
}
}
else{
// リクエストメソッドがPOSTではない(GET)の場合、終了する
print '予期しないアクセス方法でページが表示されました。<A href="index.htm(l)">トップページへ戻る</A>';
exit();
}

// 値をチェックします
// エラーフラグの初期化
$ErrFlg = 0;

// nameがnullの場合エラーを出す
if($name == ""){
echo "<p>展覧会の名前かアンケートの名称を入力してください";
$ErrFlg = 1;
}

// enq1がnullの場合エラーを出す
if($enq1 == ""){
echo "<p>最初の質問を入力してください";
$ErrFlg = 1;
}

// enq2がnullの場合エラーを出す
if($enq2 == ""){
echo "<p>ふたつ目の質問を入力してください";
$ErrFlg = 1;
}

// enq3がnullの場合エラーを出す
if($enq3 == ""){
echo "<p>みっつ目の質問を入力してください";
$ErrFlg = 1;
}

// フラグが立っている場合、終了する
if($ErrFlg = 1){
exit();
}
//以下、生成フォーム
?>
<div id="wrapper">
<div id="content">
<p>入力内容に間違いはないですか?
<form method="POST" action="seisei.php">
<table border="0">
<tr>
<td>アンケート名</td>
<td><?php echo $name; ?></td>
</tr>
<tr>
<td>アンケート内容1</td>
<td><?php echo $enq1; ?></td>
</tr>
<tr>
<td>アンケート内容2</td>
<td><?php echo $enq2; ?></td>
</tr>
<td>アンケート内容3</td>
<td><?php echo $enq3; ?></td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" name="name" value="<?php echo $name ?>">
<input type="hidden" name="enq1" value="<?php echo $enq1 ?>">
<input type="hidden" name="enq2" value="<?php echo $enq2 ?>">
<input type="hidden" name="enq3" value="<?php echo $enq3 ?>">
<input type="submit" value="作成">
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
会員
登録者: 1 2010
返信数: 7
投稿失敗しました。以下のコードでお願いします。

<?PHP
// リクエストメソッドがPOSTの場合、生成フォームへデータを渡す
if($_SERVER['REQUEST_METHOD'] == "POST"){
// アーギュメントから必要なデータの取り出し
/*
ここは必要とする引数が予め分かっているため、
$_POST['****']で取得する方がセキュアなのでは?
ここではあえてforeachのままで処理を行う。
*/
foreach($_POST as $k => $v){
$v = htmlspecialchars($v);
($k == "name")?$name = $v:$name=$name;
($k == "enq1")?$enq1 = $v:$enq1=$enq1;
($k == "name")?$enq2 = $v:$enq2=$enq2;
($k == "name")?$enq3 = $v:$enq3=$enq3;
}
}
else{
// リクエストメソッドがPOSTではない(GET)の場合、終了する
print '予期しないアクセス方法でページが表示されました。<A href="index.htm(l)">トップページへ戻る</A>';
exit();
}

// 値をチェックします
// エラーフラグの初期化
$ErrFlg = 0;

// nameがnullの場合エラーを出す
if($name == ""){
echo "<p>展覧会の名前かアンケートの名称を入力してください";
$ErrFlg = 1;
}

// enq1がnullの場合エラーを出す
if($enq1 == ""){
echo "<p>最初の質問を入力してください";
$ErrFlg = 1;
}

// enq2がnullの場合エラーを出す
if($enq2 == ""){
echo "<p>ふたつ目の質問を入力してください";
$ErrFlg = 1;
}

// enq3がnullの場合エラーを出す
if($enq3 == ""){
echo "<p>みっつ目の質問を入力してください";
$ErrFlg = 1;
}

// フラグが立っている場合、終了する
if($ErrFlg = 1){
exit();
}
//以下、生成フォーム
?>
<div id="wrapper">
<div id="content">
<p>入力内容に間違いはないですか?
<form method="POST" action="seisei.php">
<table border="0">
<tr>
<td>アンケート名</td>
<td><?php echo $name; ?></td>
</tr>
<tr>
<td>アンケート内容1</td>
<td><?php echo $enq1; ?></td>
</tr>
<tr>
<td>アンケート内容2</td>
<td><?php echo $enq2; ?></td>
</tr>
<td>アンケート内容3</td>
<td><?php echo $enq3; ?></td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" name="name" value="<?php echo $name ?>">
<input type="hidden" name="enq1" value="<?php echo $enq1 ?>">
<input type="hidden" name="enq2" value="<?php echo $enq2 ?>">
<input type="hidden" name="enq3" value="<?php echo $enq3 ?>">
<input type="submit" value="作成">
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>

ページ: 1

日本PHPユーザ会 掲示板 » PHP事はじめ » エラーの原因がわからない。

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています