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

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

ただいまの
回答率

88.19%

formで値を指定して、ページ遷移先で表示させたい

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 435

ppap115

score 11

前提・実現したいこと

shop_form.htmlからformで値を指定して、shop_form_check.phpで表示させたいです。
formの性別(name="danjo")、生まれ年(name="birth")の項目でエラーが起こっているのですが、原因が分かりません。

エラーメッセージ

Notice: Array to string conversion in C:\xampp\htdocs\shoping\shop\shop_form_check.php on line 118

Notice: Array to string conversion in C:\xampp\htdocs\shoping\shop\shop_form_check.php on line 119

該当のソースコード

shop_form.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ろくまる農園</title>
</head>
<body>

    <p>お客様情報を入力してください。</p>
    <form method="post" action="shop_form_check.php">
        <p>お名前</p>
        <input type="text" name="onamae" style="width:200px"><br />
        <p></p>メールアドレス</p>
        <input type="text" name="email" style="width:200px"><br />
        <p></p>郵便番号</p>
        <input type="text" name="postal1" style="width:50px">-
        <input type="text" name="postal2" style="width:80px"><br />
        <p>住所</p>
        <input type="text" name="address" style="width:500px"><br />
        <p>電話番号</p>
        <input type="text" name="tel" style="width:150px"><br />

        <input type="radio" name="chumon" value="chumonkonkai" checked>今回だけの注文<br>
        <input type="radio" name="chumon" value="touroku">会員登録しての注文<br>
        <p>会員登録する方は以下の項目も入力してください</p>
        <p>パスワードを入力してください</p>
        <input type="password" name="pass">
        <p>もう一度パスワードを入力してください</p>
        <input type="password" name="pass2">
        <p>性別</p>
        <input type="radio" name="danjo" value="dan" checked>男性<br>
        <input type="radio" name="danjo" value="jo">女性<br>

        <p>生まれ年</p>
        <select name="birth">
            <option value="1910">1910年代</option>
            <option value="1920">1920年代</option>
            <option value="1930">1930年代</option>
            <option value="1940">1940年代</option>
            <option value="1950">1950年代</option>
            <option value="1960">1960年代</option>
            <option value="1970">1970年代</option>
            <option value="1980">1980年代</option>
            <option value="1919">1990年代</option>
            <option value="2000" selected>2000年代</option>
            <option value="2010">2010年代</option>
        </select>

        <input type="button" onclick="history.back()" value="戻る">
        <input type="submit" value="OK"><br />
    </form>

</body>
</html>


shop_form_check.php

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ろくまる農園</title>
</head>
<body>

<?php

require_once('../common/common.php');

$post=sanitize($_POST);

$onamae=$post['onamae'];
$email=$post['email'];
$postal1=$post['postal1'];
$postal2=$post['postal2'];
$address=$post['address'];
$tel=$post['tel'];
$chumon = $post['chumon'];
$pass = $post['pass'];
$pass2 = ['pass2'];
$danjo = ['danjo'];
$birth = ['birth'];


$okflg=true;

if($onamae=='') {
    echo 'お名前が入力されていません。<br /><br />';
    $okflg=false;
} else {
    echo 'お名前<br />';
    echo $onamae;
    echo '<br /><br />';
}

if(preg_match('/^[\w\-\.]+\@[\w\-\.]+\.([a-z]+)$/',$email)==0) {
    echo 'メールアドレスを正確に入力してください。<br /><br />';
    $okflg=false;
} else {
    echo 'メールアドレス<br />';
    echo $email;
    echo '<br /><br />';
}

if(preg_match('/^[0-9]+$/',$postal1)==0) {
    echo '郵便番号は半角数字で入力してください。<br /><br />';
    $okflg=false;
} else {
    echo '郵便番号<br />';
    echo $postal1;
    echo '-';
    echo $postal2;
    echo '<br /><br />';
}

if(preg_match('/^[0-9]+$/',$postal2)==0) {
    echo '郵便番号は半角数字で入力してください。<br /><br />';
    $okflg=false;
}

if($address=='') {
    echo '住所が入力されていません。<br /><br />';
    $okflg=false;
} else {
    echo '住所<br />';
    echo $address;
    echo '<br /><br />';
}

if(preg_match('/^\d{2,5}-?\d{2,5}-?\d{4,5}$/',$tel)==0) {
    echo '電話番号を正確に入力してください。<br /><br />';
    $okflg=false;
} else {
    echo '電話番号<br />';
    echo $tel;
    echo '<br /><br />';
}

if($chumon == 'chumontouroku') {
    if ($pass == '') {
        echo 'パスワードが入力されていません';
        $okflg = false;
    }

    if ($pass != $pass2) {
        echo 'パスワードが一致しません';
        $okflg = false;
    }

    echo '性別'.'<br>';
    if($danjo == 'dan') {
        echo '男性';
    } else {
        echo '女性';
    }
    echo '<br /><br />';


    echo '<p>生まれ年</p>';
    echo $birth.'年代';
    echo '<br>';
}

if($okflg==true)
{
    echo '<form method="post" action="shop_form_done.php">';
    echo '<input type="hidden" name="onamae" value="'.$onamae.'">';
    echo '<input type="hidden" name="email" value="'.$email.'">';
    echo '<input type="hidden" name="postal1" value="'.$postal1.'">';
    echo '<input type="hidden" name="postal2" value="'.$postal2.'">';
    echo '<input type="hidden" name="address" value="'.$address.'">';
    echo '<input type="hidden" name="tel" value="'.$tel.'">';
    echo '<input type="hidden" name="chumon" value="'.$chumon.'">';
    echo '<input type="hidden" name="pass" value="'.$pass.'">';
    echo '<input type="hidden" name="danjo" value="'.$danjo.'">';
    echo '<input type="hidden" name="birth" value="'.$birth.'">';
    echo '<input type="button" onclick="history.back()" value="戻る">';
    echo '<input type="submit" value="OK"><br />';
    echo '</form>';
} else {
    echo '<form>';
    echo '<input type="button" onclick="history.back()" value="戻る">';
    echo '</form>';
}

?>

</body>
</html>


common.php

<?php

function gengo($seireki){
    if(1868<=$seireki && $seireki<=1911) {
        $gengo='明治';
    }

    if(1912<=$seireki && $seireki<=1925) {
        $gengo='大正';
    }

    if(1926<=$seireki && $seireki<=1988) {
        $gengo='昭和';
    }

    if(1989<=$seireki) {
        $gengo='平成';
    }

    return($gengo);
}

function sanitize($before) {
    foreach($before as $key=>$value) {
        $after[$key]=htmlspecialchars($value);
    }
    return $after;
}

function pulldown_year() {
    echo '<select name="year">';
    echo '<option value="2013">2013</option>';
    echo '<option value="2014">2014</option>';
    echo '<option value="2015">2015</option>';
    echo '<option value="2016">2016</option>';
    echo '</select>';
}

function pulldown_month() {
    echo '<select name="month">';
    echo '<option value="01">01</option>';
    echo '<option value="02">02</option>';
    echo '<option value="03">03</option>';
    echo '<option value="04">04</option>';
    echo '<option value="05">05</option>';
    echo '<option value="06">06</option>';
    echo '<option value="07">07</option>';
    echo '<option value="08">08</option>';
    echo '<option value="09">09</option>';
    echo '<option value="10">10</option>';
    echo '<option value="11">11</option>';
    echo '<option value="12">12</option>';
    echo '</select>';
}

function pulldown_day() {
    echo '<select name="day">';
    echo '<option value="01">01</option>';
    echo '<option value="02">02</option>';
    echo '<option value="03">03</option>';
    echo '<option value="04">04</option>';
    echo '<option value="05">05</option>';
    echo '<option value="06">06</option>';
    echo '<option value="07">07</option>';
    echo '<option value="08">08</option>';
    echo '<option value="09">09</option>';
    echo '<option value="10">10</option>';
    echo '<option value="11">11</option>';
    echo '<option value="12">12</option>';
    echo '<option value="13">13</option>';
    echo '<option value="14">14</option>';
    echo '<option value="15">15</option>';
    echo '<option value="16">16</option>';
    echo '<option value="17">17</option>';
    echo '<option value="18">18</option>';
    echo '<option value="19">19</option>';
    echo '<option value="20">20</option>';
    echo '<option value="21">21</option>';
    echo '<option value="22">22</option>';
    echo '<option value="23">23</option>';
    echo '<option value="24">24</option>';
    echo '<option value="25">25</option>';
    echo '<option value="26">26</option>';
    echo '<option value="27">27</option>';
    echo '<option value="28">28</option>';
    echo '<option value="29">29</option>';
    echo '<option value="30">30</option>';
    echo '<option value="31">31</option>';
    echo '</select>';
}

?>


①echoで表示させる
echo $birth;
→「Array」とechoされ、Notice: Array to string conversion のメッセージが表示される。

②var_dump($birth);で確認する
→array (size=1)
0 => string 'birth' (length=5)

③echo $birth[0];で表示させる
→「birthお名前」とechoされる

④性別(name="danjo")、生まれ年(name="birth")の項目だけのファイルを作って実行する
select .html


check.php

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ろくまる農園</title>
</head>
<body>

<?php

require_once('common.php');

$post=sanitize($_POST);

$danjo = ['danjo'];
$birth = ['birth'];


    echo '性別'.'<br>';
    if($danjo == 'dan') {
        echo '男性';
    } else {
        echo '女性';
    }
    echo '<br /><br />';


echo '<p>生まれ年</p>';
echo $birth.'年代';
echo '<br>';

    echo '<input type="hidden" name="danjo" value="'.$danjo.'">';
    echo '<input type="hidden" name="birth" value="'.$birth.'">';
    echo '<input type="button" onclick="history.back()" value="戻る">';
    echo '<input type="submit" value="OK"><br />';
    echo '</form>';


?>

</body>
</html>


common.phpは上記と同じファイルを使用

→性別女性と表示される、下記メッセージが表示される(ラジオボタンで男性を選択しても女性が表示される)
Notice: Array to string conversion in C:\xampp\htdocs\shop\shop_form_check.php on line 120
Notice: Array to string conversion in C:\xampp\htdocs\shop\shop_form_check.php on line 121

どの箇所がエラーの原因なのでしょうか?
よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

0

下記部分で配列として定義しているので、そのまま文字列連結できません。

$pass2 = ['pass2'];
$danjo = ['danjo'];
$birth = ['birth'];


また「ろくまる農園」というタイトルから、問題の多い参考書だったような気がします。少なくとも$_POSTの扱いがおかしいです。別の参考書を探されることをお勧めします。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/04/10 20:07

    ありがとうございます。
    別の参考書を探してみます。

    キャンセル

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

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

関連した質問

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