

現在郵便番号検索サイトを作成しております。  
そのなかでGETで取得したデータをもとに次のページ、前のページで遷移できるようにする必要があり、10件ずつデータを表示する必要があります。  
次のページ、前のページは完成したのですが、  
GETの値をSQLに渡すやり方がいまいちわかりません。  
どうすれば渡すことが出来るでしょうか。  
参考程度までにソースコード添付いたします。  
ご教授お願い致します。  
**ソースコード**

[code]

    $post_num = '';
    $area ='';
    $city ='';
    $town ='';
    $error1 = [];
    $error2 = [];
    $user_data = [];
    $abc_data = [];
    $query = '';
    $host = 'localhost';
    $username = 'codecamp46846';
    $passwd   = 'codecamp46846';
    $dbname   = 'codecamp46846';
    $link= mysqli_connect($host, $username, $passwd, $dbname);
    $count = 0;
    $page = 1;
    /*変数が存在する確認*/ 
    if(isset($_POST['submit1']) === true || isset($_POST['submit2']) === true)  {
        if(isset($_POST['post_num']) === true) {
            $post_num = htmlspecialchars($_POST['post_num'], ENT_QUOTES, 'UTF-8');
        }
            if(isset($_POST['area']) === true) {
            $area = htmlspecialchars($_POST['area'], ENT_QUOTES, 'UTF-8');
        }
            if(isset($_POST['city']) === true) {
            $city = htmlspecialchars($_POST['city'], ENT_QUOTES, 'UTF-8');
        }
            if(isset($_POST['town']) === true) {
            $town = htmlspecialchars($_POST['town'], ENT_QUOTES, 'UTF-8');
        }
            if(isset($_GET['page']) === true) {
            $page = htmlspecialchars($_POST['page'], ENT_QUOTES, 'UTF-8');
        }
    /*空白削除*/
        $post_num = str_replace(array(" ","　"),"", $post_num);
        $area = str_replace(array(" ","　"),"", $area);
        $town = str_replace(array(" ","　"),"", $town);
    /*エラーメッセージ*/
        if(empty($post_num) === true && 
        ($area === '都道府県を選択' || empty($city) === true)) {
            $error1[] = '郵便番号を入力してください';
        }else if ((preg_match('/^[0-9]{7}$/', $post_num) !== 1) && 
        ($area === '都道府県を選択' || empty($city) === true)) {
            $error1[] = '７桁の数字で入力してください';
        }else {
            print "";
        }
        if ($area === '都道府県を選択' && 
        (empty($post_num) === true ||(preg_match('/^[0-9]{7}$/', $post_num) !== 1))) {
            $error2[] = '都道府県を選択してください';
        }
        if(empty($city) === true && 
        (empty($post_num) === true ||(preg_match('/^[0-9]{7}$/', $post_num) !== 1))){
            $error2[] = '市区町村名をを入力してください';
        }
    /*データベースに接続*/ 
            if(count($error1) === 0 || count($error2) === 0) {
            if($link) {
                $query = "SELECT COUNT(*) FROM test_table" . (empty($post_num) ? "" : " WHERE post_num = '$post_num'");
                mysqli_set_charset($link, 'utf8');
                if(isset($_POST['submit1']) === true) {
                    $query = "SELECT post_num, area , city, town FROM test_table 
                    WHERE post_num = '$post_num'";
                } else {
                    $limit = 10*$page-10;
                    $query = "SELECT post_num, area , city, town FROM test_table LIMIT ".$limit.",10";
                    $abc = "SELECT post_num, area , city, town FROM test_table";
                    $result = mysqli_query($link, $abc);
                    while($row = mysqli_fetch_array($result)) {
                        $abc_data[] = $row;
                    }
                } 
                // var_dump($query);
                    $result = mysqli_query($link, $query);
                    while($row = mysqli_fetch_array($result)) {
                        $user_data[] = $row;
                    }
                mysqli_free_result($result);
                mysqli_close($link);
            }else {
                echo 'DB接続失敗';
            }
        }
    }
    $count = count($abc_data);
    
    if (
      isset($_GET["page"]) &&
      $_GET["page"] > 0 &&
      $_GET["page"] <= 10
    ) {
      $page = (int)$_GET["page"];
    } else {
      $page = 1;
    }
    
    $limit = 10*$page-10;
    $paging = "SELECT post_num, area , city, town FROM test_table LIMIT ".$limit.",10";
    echo $paging;
    
    
    ?>
    <!DOCTYPE html>
    <html lang="ja">
    <head>
       <meta charset="UTF-8">
       <title>郵便</title>
    </head>
    <body>
        <form action="practice_post_code_advanced.php" method="post">
            <h1>郵便番号検索</h1>
            <h2>郵便番号から検索</h2>
            <?php print "総件数" . htmlspecialchars($count,ENT_QUOTES,'UTF-8') . "件";?>
            <input id="post_numer" name="post_num" value="">
            <input type="submit"  name="submit1" value="検索">
            <form action="practice_post_code_advanced.php" method="post">
            <h2>地名から検索</h2>
            <label>都道府県を選択
                <select name="area" value="">
                    <option>都道府県を選択</option>
                    <option value="北海道">北海道</option>
                    <option value="兵庫県">兵庫県</option>
                    <option value="新潟県">新潟県</option>
                </select>
            </label>
            <label>市区町村
                <input type="seach" name="city" value="">
                <input type="submit" name="submit2"  value="検索">
            </label>
        </form>
        <p><?php foreach($error1 as $key1 => $string1) {
                    print htmlspecialchars($string1,ENT_QUOTES,'UTF-8');
                }
        ?></p>
            <p><?php foreach($error2 as $key2 => $string2) {
                    print htmlspecialchars($string2,ENT_QUOTES,'UTF-8');;
                }
        ?></p>
            <?php 
        foreach($user_data as $read) {?>
            <table>
               <style type="text/css">
           table, td, th {
               border: solid black 1px;
           }
           table {
               width: 600px;
           }
           tr td {
               width: 150px;
           }
       </style>
                <tr>
                    <th>郵便番号</th>
                    <th>都道府県</th>
                    <th>市町村</th>
                    <th>町域</th>
                </tr>
                <tr>
                    <td><?php print htmlspecialchars($read['post_num'],ENT_QUOTES,'UTF-8'); ?></td>
                    <td><?php print htmlspecialchars($read['area'],ENT_QUOTES,'UTF-8'); ?></td>                
                    <td><?php print htmlspecialchars($read['city'],ENT_QUOTES,'UTF-8'); ?></td>            
                    <td><?php print htmlspecialchars($read['town'],ENT_QUOTES,'UTF-8'); ?></td>          
                </tr>
            </table>
        <?php } ?>  
    <!-- hyperlink to previous and next page -->
    <form name="pagination" action="practice_post_code_advanced.php" method="get">
      <input type="hidden" name="post_num" value="<?php echo $post_num; ?>">
      <input type="hidden" name="area" value="<?php echo $area; ?>">
      <input type="hidden" name="city" value="<?php echo $city; ?>">
      <input type="hidden" name="town" value="<?php echo $town; ?>">
      <input type="hidden" name="page">
    </form>
    
    <p>
        <?php if ($page > 1) : ?>
          <a href="?page=<?php echo ($paging - 1); ?>">前のページへ</a>
        <?php endif; ?>
        <?php if ($page < 10) : ?>
        　　<a href="?page=<?php echo ($paging + 1); ?>">次のページへ</a>
        <?php endif; ?>
      </p>
    </body>
    </html>
    
[/code]


CC BY-SA 4.0
2021-06-28T04:42:58.737
77828
2021-06-28T06:54:27.883
2021-06-28T06:34:00.470
46886
46886
question
php mysql
PHPでGETの値をSQLに渡すやり方


GET か POST かはあまり重要じゃなく、フォームデータを受け取れているのであれば予め定義された変数と変わりなく扱えばよいだけで、受け取ったパラメータ
(の変数) を適切な形でクエリに組み込むだけではないでしょうか？

* * *

質問のコードに当てはめると…

  * `$_GET['page']` でパラメータは受け取れており、扱いやすいよう適当な変数に入れ直す等して

  * クエリを組み立てている部分に変数を埋め込む (以下のコードは原文ママ)

[code]

    /*データベースに接続*/ 
    if(count($error1) === 0 || count($error2) === 0) {
        if($link) {
            $query = "SELECT COUNT(*) FROM test_table" . (empty($post_num) ? "" : " WHERE post_num = '$post_num'");
    
[/code]


CC BY-SA 4.0
2021-06-28T06:54:27.883
77834
2021-06-28T06:54:27.883
3060
77828
answer