質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • PHP

    25496questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPフォーム  urlで直接入力したページのエラーを消したい。

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 1,782

Kuriaki

score 63

phpでフォームを作りました。
form.php→sent.php→complete.phpの順番ですが、
特に問題なくメール飛んで、リロードもしないようにしましたが、
urlで直接sent.phpを入力してたら、エラーがいっぱい出ています。
調べたところissetで解決できそうなんですが、具体的にどうすればいいですか?よろしくお願いいたします。

発生している問題・エラーメッセージ

Notice: Undefined index: name in C:\xampp\htdocs\form\sent.php on line 4

Notice: Undefined index: gender in C:\xampp\htdocs\form\sent.php on line 5

Notice: Undefined index: age in C:\xampp\htdocs\form\sent.php on line 6

Notice: Undefined index: body in C:\xampp\htdocs\form\sent.php on line 7

Notice: Undefined index: sports in C:\xampp\htdocs\form\sent.php on line 8
アンケート
名前 
Notice: Undefined index: name in C:\xampp\htdocs\form\sent.php on line 33
名前が未入力です
性別

Notice: Undefined index: gender in C:\xampp\htdocs\form\sent.php on line 49
年齢 
Notice: Undefined index: age in C:\xampp\htdocs\form\sent.php on line 55
好きなスポーツを選択して下さい

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\form\sent.php on line 64
内容

Notice: Undefined index: body in C:\xampp\htdocs\form\sent.php on line 77
内容が未入力です
Notice: Undefined index: body in C:\xampp\htdocs\form\sent.php on line 80


Notice: Undefined index: name in C:\xampp\htdocs\form\sent.php on line 

該当のソースコード

<?php
session_start();
$_SESSION["ticket"] = SHA1(uniqid().mt_rand());
$name= $_POST['name'];
$gender=$_POST['gender'];
$age=$_POST['age'];
$body=$_POST['body'];
$sports=$_POST['sports']; 

?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php</title>
<link rel="stylesheet" href="common/css/reset.css">
<link rel="stylesheet" href="common/css/sent.css">
</head>
<body>

<div id="anketo">
<h4>アンケート</h4>

<div class="title"><p>名前</p></div>
<?php
if ($_POST['name']=="") {
echo  '<FONT COLOR="RED">名前が未入力です</FONT>';
}else{
echo htmlspecialchars($_POST['name']);}

?>

<div id="sex">
<div class="seibetu"><p>性別</p></div>
<?php echo htmlspecialchars($_POST['gender']); ?>
</div>

<div class="title"><p>年齢</p></div>
<?php echo htmlspecialchars($_POST['age']); ?>

<div class="sports">
<p class="suki">好きなスポーツを選択して下さい</p>
</div>
<div id="sp">
<?php

foreach ($sports as $value) {
print("$value"."<br>");
}

?>
</div>

<div id="btn">
<p id="text">内容</p>
<div class="naiyou">
<?php if($_POST['body']=="") {
echo  '<FONT COLOR="RED">内容が未入力です</FONT>';
}
$text = $_POST['body'];
echo nl2br($text);
?>

</div>

</div>

<form action="complete.php" method="post">

<div id="botan">
<div class="soushin">

<!--送信ボタン-->
<?php  

if($_POST['name']==""||$_POST['body']==""){   
' <input type="submit" name="submit" value="送信"/></div>';}
else{
echo ' <input type="submit" name="submit" nvalue="送信"/></div>';}

?>

<input type="hidden" name="ticket" value="<?php echo htmlspecialchars($_SESSION["ticket"], ENT_QUOTES);?>">
<input type="hidden" name="name" value="<?php echo $name; ?>">
<input type="hidden" name="gender" value="<?php echo $gender; ?>">
<input type="hidden" name="age" value="<?php echo $age; ?>">
<input type="hidden" name="sports" value="<?php foreach ($sports as $value) {
print ("$value"."\r\n");
}?>">
<input type="hidden" name="body" value="<?php echo $body; ?>">

<div class="modoru">

<input type="button" class="submit" id="return" value="戻る" onClick="history.back()">   
<input type="hidden" name="name" value="<?php echo $name; ?>"></div>
</div>

<!--戻るボタン--></div>

</form>

</div><!-- anketo -->

</body>
</html>

試したこと

補足情報(言語/FW/ツール等のバージョンなど)

初心者なので、優しくお願いいたします!

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/11/24 11:21

    コード&エラーはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。

    キャンセル

回答 4

checkベストアンサー

+2

そこまでわかっているならあとすこしですね。
POSTされていないのに
$name= $_POST['name'];
があるからエラーは当然出ます。
form.phpからPOSTした場合のみ変数に格納するわけですから、

if(isset($_POST['name'])){
// $name= $_POST['name']; 等
}


とかにしてあげれば大丈夫です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/24 11:13

    参考ページありがとうございます。
    <?php

    if (isset($_POST['sports'])){

    foreach ($sports as $value)
    print("$value"."<br>");
    }

    ?>
    自分はただこうしてissetしたら 普通にエラーが消えました。
    もともとforeachにprintがあるので、そのままいれてたら、消えましたw
    ちなみになんですが

    <?php

    if($_POST['name']==""||$_POST['body']==""){
    ' <input type="submit" name="submit" value="送信"/></div>';}
    else{
    echo ' <input type="submit" name="submit" nvalue="送信"/></div>';}

    ?>
    ここもエラがでてまして、ここはもともと入力画面から何も入力されてないときに確認画面で警告が出てくるよう書いたのですが、今確認画面sent.phpのurlを直接入力すると、やはりnoticeエラーがでています。
    ここはどうすべきでしょうか

    キャンセル

  • 2016/11/24 11:51

    if($_POST['name']==""||$_POST['body']==""){
    echo ' <input type="submit" name="submit" value="送信"/></div>';
    }
    else{
    echo ' <input type="submit" name="submit" value="送信"/></div>';
    }
    echoが抜けてますよ。あとnvalueになっています。(これはエラーとは関係ないと思いますが)
    昔issetという関数を知らない頃、
    if($_POST['name']==""){
    みたいな書き方してました。懐かしい・・

    キャンセル

  • 2016/11/24 13:08

    ありがとうございます!

    キャンセル

+1

form.phpからsent.phpへがフォームを使ったPOSTリクエストが本来求める流れだとすると
sent.phpへGETでそれもPOSTパラメータ無しでアクセスがあった場合は弾かないといけない(意図しない動作になるため)

エラーはPOSTパラメータがないにもかかわらず、POSTパラメータを取得しようとしているからです。

いろいろやり方はあると思いますが

if($_SERVER["REQUEST_METHOD"] != "POST"){
// エラーもしくはリダイレクトする
}


の値を見てがPOSTでない場合はエラーにするとかform.phpへリダイレクトしてやれば良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/24 10:31

    ありがとうございます!

    キャンセル

+1

ヒント

session_start();
$_SESSION["ticket"] = SHA1(uniqid().mt_rand());

if(isset($_POST['name']) && isset($_POST['gender']) && isset($_POST['age']) && isset($_POST['body']) && isset($_POST['sports']) ){

$name= $_POST['name'];
$gender=$_POST['gender'];
$age=$_POST['age'];
$body=$_POST['body'];
$sports=$_POST['sports'];

}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/24 10:28

    ありがとうございます!
    POST変数が解決できました!!

    キャンセル

0

sent.phpやcomplete.phpに直接アクセスされた場合はどのような動作をさせたいのでしょうか?
form.phpへリダイレクトさせるならこれを参考にしてください。
【PHP】結果画面のURLを打ち込んで結果画面に直接行こうとするとリダイレクト処理をしたい
https://teratail.com/questions/54150

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/24 10:30

    回答ありがとうございます。
    結果画面じゃなくて、確認画面のurlを直接打ち込んだ場合、エラーが出ないように、普通に入力画面で入力しないまま確認画面に飛んだ感じと一緒ですかね、説明が下手でごめんなさい。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    25496questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。