参考書で、phpの勉強をしています。
よくある、郵便番号検索を検索する演習問題でつまずいています。
・テキストエリアに郵便番号を入れたら、該当の番号だけをテーブルで表示させる、
・セレクトメニューで県を選択して市町村区を入れたら該当する地名をテーブルに表示させる、
・郵便番号、市町村区、どちらも空だったらエラーメッセージを出す、
・郵便番号か市町村区、どちらか入力できていれば結果を表示させる
ということを実現させたいです。
どこが間違いなのか、どう直せばいいかを教えてください。
よろしくお願いします。
<?php $msg = array(); $postal_data = array(); $search_method = ''; $zipcode = ''; $pref = ''; $address = ''; $city = ''; $result = ''; $host = 'localhost'; // データベースのホスト名又はIPアドレス $username = 'username'; // MySQLのユーザ名 $passwd = 'passwd'; // MySQLのパスワード $dbname = 'dbname'; // データベース名 $link = mysqli_connect($host, $username, $passwd, $dbname); if ($link){ // 文字化け防止 mysqli_set_charset($link, 'utf8'); if(isset($_GET['search_method']) === TRUE){ $search_method = trim($_GET['search_method']); if($search_method === ($_GET['zipcode'])){ $zipcode = trim($_GET['zipcode']); } print $zipcode; if(mb_strlen($zipcode) === 0){ $msg[] = '郵便番号を入力してください'; } else if(preg_match('/^[0-9]{7}$/',$zipcode) !== 1){ $msg[] = '郵便番号の形式が正しくありません'; } if($search_method === ($_GET['address'])){ $address = trim($_GET['address']); $pref = trim($_GET['pref']); } if($pref === '都道府県を選択'){ $msg[] = '都道府県を選択してください。'; } if (mb_strlen($address) === 0){ $msg[] = '市区町村を入力してください。'; } if(isset($_GET['city']) === TRUE){ $address = trim($_GET['city']); } } mysqli_set_charset($link, 'utf8'); $query = 'SELECT zipcode,pref,city,town FROM zip_table'; $result = mysqli_query($link, $query); while ($row = mysqli_fetch_array($result)) { $postal_data[] = $row; } if($search_method === $zipcode){ $query = 'SELECT zipcode, pref, city, town FROM zip_table WHERE zipcode = \''.$zipcode.'\''; }else if($search_method === $address){ $query = 'SELECT zipcode,pref,city,town FROM zip_table WHERE address = "^$address.*"'; } var_dump($search_method); var_dump($query); mysqli_free_result($result); mysqli_close($link); }else{ print 'DB接続失敗'; } ?> <!DOCUTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>郵便番号検索</title> <style> .search_reslut { border-top: solid 1px; margin-top: 10px; } table { border-collapse: collapse; } table, tr, th, td { border: solid 1px; } caption { text-align: left; } </style> </head> <body> <h1>郵便番号検索</h1> <section> <h2>郵便番号から検索</h2> <form> <input type="text" name="zipcode" placeholder="例)1010001" value="<?php if (isset($zipcode) === TRUE){print $zipcode;}?>"> <input type="hidden" name="search_method" value="zipcode"> <input type="submit" value="検索"> </form> <h2>地名から検索</h2> <form> 都道府県を選択 <select name="pref"> <option value="" selected>都道府県を選択</option> <option value="北海道" >北海道</option> <option value="青森県" >青森県</option> <option value="岩手県" >岩手県</option> <option value="宮城県" >宮城県</option> <option value="秋田県" >秋田県</option> <option value="山形県" >山形県</option> <option value="福島県" >福島県</option> <option value="茨城県" >茨城県</option> <option value="栃木県" >栃木県</option> <option value="群馬県" >群馬県</option> <option value="埼玉県" >埼玉県</option> <option value="千葉県" >千葉県</option> <option value="東京都" >東京都</option> <option value="神奈川県" >神奈川県</option> <option value="新潟県" >新潟県</option> <option value="富山県" >富山県</option> <option value="石川県" >石川県</option> <option value="福井県" >福井県</option> <option value="山梨県" >山梨県</option> <option value="長野県" >長野県</option> <option value="岐阜県" >岐阜県</option> <option value="静岡県" >静岡県</option> <option value="愛知県" >愛知県</option> <option value="三重県" >三重県</option> <option value="滋賀県" >滋賀県</option> <option value="京都府" >京都府</option> <option value="大阪府" >大阪府</option> <option value="兵庫県" >兵庫県</option> <option value="奈良県" >奈良県</option> <option value="和歌山県" >和歌山県</option> <option value="鳥取県" >鳥取県</option> <option value="島根県" >島根県</option> <option value="岡山県" >岡山県</option> <option value="広島県" >広島県</option> <option value="山口県" >山口県</option> <option value="徳島県" >徳島県</option> <option value="香川県" >香川県</option> <option value="愛媛県" >愛媛県</option> <option value="高知県" >高知県</option> <option value="福岡県" >福岡県</option> <option value="佐賀県" >佐賀県</option> <option value="長崎県" >長崎県</option> <option value="熊本県" >熊本県</option> <option value="大分県" >大分県</option> <option value="宮崎県" >宮崎県</option> <option value="鹿児島県" >鹿児島県</option> <option value="沖縄県" >沖縄県</option> </select> 市区町村 <input type="text" name="address" value= "<?php if (isset($address)=== TRUE){print $address;}?>"> <input type="hidden" name="search_method" value="address"> <input type="submit" value="検索"> </form> </section> <section class="search_reslut"> <p>ここに検索結果が表示されます</p> <p>郵便番号を入力してください。</p> </section> <?php foreach($msg as $value){ ?> <p><?php print $value; ?></p> <?php } ?> <?php print $address; ?> <table> <?php foreach ($postal_data as $row) { ?> <tr> <td><?php print htmlspecialchars($row['zipcode'], ENT_QUOTES, 'UTF-8'); ?></td> <td><?php print htmlspecialchars($row['pref'], ENT_QUOTES, 'UTF-8'); ?></td> <td><?php print htmlspecialchars($row['city'], ENT_QUOTES, 'UTF-8'); ?></td> <td><?php print htmlspecialchars($row['town'], ENT_QUOTES, 'UTF-8'); ?></td> </tr> <?php } ?> 検索結果:<?php print count($postal_data, COUNT_RECURSIVE); ?> </table> </body> </html>