いつもお世話になっております。今回はa hrefのリンク先に
パラメータの受け渡し方を教えていただきたいと思っています。
どうか宜しくお願い致します。
次ページのリンクを踏むとlocalhost/省略/t_list2.php?p=1&address=名古屋&area_id=Array&chk=1
というurlに進みます。
addressの値は正常に受け渡していると思うのですが、area_idが=Arrayになっていて数値になっていないのが
原因かと思っています。
どうしたら受け渡しが出来るでしょうか?
検索ボタンを押したら下記のSQL文が実行されるのですが、
SELECT id,rental_name,price,city,ward,address,photofilename,area_id FROM rental WHERE 1 = 1 AND address LIKE ? AND area_id in (?,?,?,?,?) LIMIT 6 OFFSET 0
次へ→を押すと
SELECT id,rental_name,price,city,ward,address,photofilename,area_id FROM rental WHERE 1 = 1 LIMIT 6 OFFSET 5
このようにAND検索が消えてしまいます。
ということはパラメータが拾えてないということですよね?
お手数ですがお時間の余裕のある方ご教授頂けたらと思います。
何卒宜しくお願い致します。
以下コードです。
<html> <head> <meta charset="utf-8" /> <title>不動産サイト</title> <link rel="stylesheet" type="text/css" href="../common/style.css"/> <!--■■■■■フォーム完全クリア■■■■■--> <script> function resetValue(f){ for (var i=0;i<f.length;i++){ if(f[i].type=="text") f[i].value=""; if(f[i].type=="select-one") f[i].selectedIndex=0; if(f[i].type=="checkbox") f[i].checked=false; } } </script> <!--■■■■■フォーム完全クリアEND■■■■■--> </head> <body> <!--■■■■■ページリンク作成②■■■■■--> <?php //actionのページ指定 $self_page = "./t_list2.php"; //値確認 if(isset($_POST['area_id'])) { $area_id = $_POST['area_id']; print("$area_id<br>\n"); } if(isset($_POST['address'])) { $address = $_POST['address']; print("$address<br>\n"); } //POSTの処理 $address = isset($_REQUEST['address']) ? htmlspecialchars($_REQUEST['address']) : ""; $area_id = isset($_REQUEST['area_id']) ? $_REQUEST['area_id'] : ""; $submit = isset($_REQUEST['submit']) ? $_REQUEST['submit'] : ""; $search_task = isset($_REQUEST['search_task']) ? $_REQUEST['search_task'] : ""; ?> <!--■■■■■ENDページリンク作成②■■■■■--> <div id="main"> <form name="search" action="<?=$self_page;?>" method="post" > <table class="check_t"> <tr> <th>マンション名</th> <td><input type="text" name="rental_name" value="<?php print( htmlspecialchars( $_POST["rental_name"] ,ENT_QUOTES ) ) ?>" size="20"></td> </tr> <tr> <th>価格帯</th> <td> <input type="text" name="price_min" value="<?php print( htmlspecialchars( $_POST["price_min"] ,ENT_QUOTES ) ) ?>" size="8"> - <input type="text" name="price_max" value="<?php print( htmlspecialchars( $_POST["price_max"] ,ENT_QUOTES ) ) ?>" size="8"><br /> </td> </tr> <tr> <th>住所</th> <td><input type="text" name="address" value="<?php print( htmlspecialchars( $_POST["address"] ,ENT_QUOTES ) ) ?>" size="20"></td> </tr> <tr> <th>名古屋市</th> <td> <?php //チェックボックスのフォーム表示用SQL(名古屋市、物件1~16)///////////////////////////////// //var_dump($_SESSION['area_id']); /*$area_id = $_POST['area_id']; var_dump($area_id);*/ $dsn = 'mysql:dbname=xxxxx;host=localhost'; $user = 'xxxxx'; $password = 'xxxxx'; $db = new PDO($dsn, $user, $password); $db->query('SET NAMES utf-8'); $sql = "SELECT area.area_id,area.ward, Count(id) AS cnt FROM area LEFT JOIN rental ON rental.area_id = area.area_id GROUP BY area.area_id ORDER BY area_id ASC"; $condition = array(); $stmt = $db->prepare( $sql ); $stmt->execute( $condition ); $db = null; $rows = $stmt->fetchAll(); $i = 1; foreach($rows as $row ){ if( $i >= 0 && $i <= 16){ echo '<li class="num'.$i.'count_li"> <input type="checkbox" name="area_id[]" value="'.$i.'"' ?> <?php if (isset($_POST['area_id']) and in_array($i,$_POST['area_id'])) print ' checked'; ?>/> <?php echo ''.$row['ward'].''.'('.$row['cnt'].')'.'</li>' ?> <?php } $i++; } ?> </td> </tr> <tr> <th>愛知県 - その他の地域</th> <td> <?php //チェックボックスのフォーム表示用SQL(愛知県内名古屋市以外、物件17~19)//////////////////// require_once "checkbox/checkbox17-19.php"; ?> </td> </tr> <tr> <!--こだわり未完成--> <th>こだわり条件</th> <td> <input type="checkbox" name="pid[]" value="1" <?php if (isset($_REQUEST['pid']) and in_array('1',$_REQUEST['pid'])) print 'checked'; ?>/> 新築 <input type="checkbox" name="pid[]" value="2" <?php if (isset($_REQUEST['pid']) and in_array('2',$_REQUEST['pid'])) print 'checked'; ?>/> 南向き <span class="space4"><input type="checkbox" name="pid[]" value="3" <?php if (isset($_REQUEST['pid']) and in_array('3',$_REQUEST['pid'])) print 'checked'; ?>/> セキュリティ充実<br></span> <input type="checkbox" name="pid[]" value="6" <?php if (isset($_REQUEST['pid']) and in_array('4',$_REQUEST['pid'])) print 'checked'; ?>/> システムキッチン <input type="checkbox" name="pid[]" value="7" <?php if (isset($_REQUEST['pid']) and in_array('5',$_REQUEST['pid'])) print 'checked'; ?>/> ペット可 <input type="checkbox" name="pid[]" value="4" <?php if (isset($_REQUEST['pid']) and in_array('6',$_REQUEST['pid'])) print 'checked'; ?>/> 市街地が近い<br /> <input type="checkbox" name="pid[]" value="5" <?php if (isset($_REQUEST['pid']) and in_array('7',$_REQUEST['pid'])) print 'checked'; ?>/> 内装リフォーム </td> </tr> </table> <input type="submit" name="submit" value="検索" class="Btn-gray button"> <input type="button" value="リセット" class="Btn-reset button" onClick="resetValue(this.form)"> </form> <!--■■■■■ページリンク作成②■■■■■--> <?php if($submit == "検索"){ //仮に全ての値、例えばaddress,area_id,rentalnameなど全てがissetされていなかったら$search_taskはoff //それ以外はonにする $mess=""; $search_task = "off"; if($address=="" $mess="*キーワードを入力してください。"; $sql = "SELECT id,rental_name,price,city,ward,address,photofilename,area_id FROM rental WHERE address AND 0"; }else{ $search_task = "on"; $mess=" "; } echo "<p style='font-size:11pt; color:red;'>".$mess."</p>\n"; } //データの表示 $p = isset($_GET['p']) ? intval($_GET['p']) : 0; $chk = isset($_GET['chk']) ? $_GET['chk'] : 0; $limit = 5; $v_page = $limit + 1; $offset = $p * $limit; $sql = "SELECT id,rental_name,price,city,ward,address,photofilename,area_id FROM rental WHERE 1 = 1 "; if($search_task == "on" || $chk==1){ echo "<h1>検索結果</h1>"; //if issetで値$address,$area_id,$priceなどの存在確認//▼▼最終的にOFFSETは一番最後の$sql.=に記述 if(isset($_POST["address"])){ $sql = $sql. "AND address LIKE ? "; $condition[]="%".addcslashes($address, '\\_%')."%"; } if(isset($_POST["area_id"])){ $sql = $sql. " AND area_id in (".implode(",",array_fill(1,count($area_id),"?")).") "; $condition=array_merge($condition,$area_id); } $sql = $sql. " LIMIT $v_page OFFSET $offset "; //////////////DB接続/////////////////////////////// $db = new PDO("mysql:host=xxxxx; dbname=xxxx; charset=utf8", "xxxxx", "xxxxx", array( PDO::ATTR_EMULATE_PREPARES => false ) ); $stmt = $db->prepare($sql); $stmt->execute($condition); $rows = $stmt->fetchAll(); } print_r($sql); //var_dump($address); if(count($rows) > $limit){ array_pop($rows); $next_num = $p+1; //ここで$chk==1であるか判断 //ここで$pが何ページ目にあるか判断 $pager_next = "<a href='{$self_page}?p={$next_num} &address={$address}&area_id={$area_id}&chk=1'>次へ→</a>"; }else{ $pager_next = "次へ→"; } if($p > 0){ $prev_num = $p-1; //ここで$chk==1であるか判断 //ここで$pが何ページ目にあるか判断 $pager_prev = "<a href='{$self_page}?p={$prev_num} &address={$address}&area_id={$area_id}&chk=1'>←前へ</a>"; }else{ $pager_prev = "←前へ"; } $pager_str = "<p style='text-align:center;color:#bbbbbb'> {$pager_prev} {$pager_next}</p>"; echo $pager_str; $i=0; foreach($rows as $row){ $address = htmlspecialchars($row["address"]); $mean = str_replace(" / ", "\n", $row["mean"]); $mean = nl2br(htmlspecialchars($mean)); echo "<h4 style='margin:0; background:#eeeeee;'>$address</h4>\n"; echo "<div style='margin:2px 6px 18px 6px;'>$mean</div>"; $i++; } if($i<1){ echo "<p style='margin:0 0 0 20px; font-cloro:red'> 検索結果がありません。</p> "; } echo $pager_str; //DBから切断する $db = null; ?> 以下省略 コード
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/14 12:09
2016/04/26 22:50