
失礼します。
explode()で半角スペースを区切り文字として入力された文字列を配列に格納しようと思っています。
入力された文字列:「り す」
配列:([0]り[1]す)
上のような状態に持って行きたいです。
伝わっているでしょうか?
explode()を使用している部分のコードはこちらです。
lang
1//三項演算子で検索文字列の有無を判定し処理 2$data = isset($_POST['data']) ? trim($_POST['data']) : ''; 3//OR検索 4$query = 'SELECT * FROM goods WHERE '; //クエリ前半 5$sql =""; 6if($data){ 7 $count = 1; //カウントを1にしておく 8 $data = trim($data); //検索文字列の前後の空スペースだけを除去 9 //全角スペースはmb_convert_kana()関数で半角スペースに変換 10 $datalist = mb_convert_kana($data, 's'); 11 //print $datalist.'<br />'; 12 //複数キーワードでの検索 13 //if(stristr($datalist," ")){ 14 //検索ワードをスペースで分割して配列に格納 15 $keyword = explode(" ",$datalist);
コメントアウトの部分は確認用だったり必要か不要かが個人的に曖昧なものを残してあるだけなので無視してくださって構わないかと思います。
lang
1$keyword = explode(" ",$datalist);
ここの部分ですね。
現在の状態では、「り す」と入力すると配列の中身は([0]り す)となってしまいます。
どこが間違っているでしょうか?
よろしくお願いします。
念の為に全コードを載せておきます。
lang
1<?php 2// HTTPヘッダーで文字コードを指定 3header("Content-Type:text/html; charset=UTF-8"); 4?> 5<?php 6 7//session_start(); 8 9//h()関数の読み込み 10require_once 'lib/h.php'; 11//checkinput()関数の読み込み 12require_once 'lib/checkinput.php'; 13 14//POSTされたデータのチェック 15$_POST = checkinput($_POST); 16 17//三項演算子で検索文字列の有無を判定し処理 18$data = isset($_POST['data']) ? trim($_POST['data']) : ''; 19//OR検索 20$query = 'SELECT * FROM goods WHERE '; //クエリ前半 21$sql =""; 22if($data){ 23 $count = 1; //カウントを1にしておく 24 $data = trim($data); //検索文字列の前後の空スペースだけを除去 25 //全角スペースはmb_convert_kana()関数で半角スペースに変換 26 $datalist = mb_convert_kana($data, 's'); 27 //print $datalist.'<br />'; 28 //複数キーワードでの検索 29 //if(stristr($datalist," ")){ 30 //検索ワードをスペースで分割して配列に格納 31 $keyword = explode(" ",$datalist); 32 //print_r ($keyword); 33 //配列の数を数える 34 $count = count($keyword); 35 //空スペースで区切られた数によってSQL文を組み立てる 36 for($i=0; $i<$count; $i++){//配列の数だけ繰り返す 37 if($i!="0"){ 38 $sql = $sql." OR"; 39 } 40 $sql = $sql." name LIKE :keyword "; 41 } 42 //} 43}else{ 44 $count = 0; 45} 46//SQL文準備 47$query = $query.$sql; 48?> 49<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 50 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 51<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> 52<head> 53<meta http-equiv="content-type" content="text/html;charset=UTF-8" /> 54<meta http-equiv="content-script-type" content="text/javascript" /> 55<meta http-equiv="content-style-type" content="text/css" /> 56<!-- StyleSheet記述 57<link rel="stylesheet" href="./css/main.css" type="text/css" media="all" /> 58StyleSheet記述 --> 59<!-- PAGE TITLE --> 60<title>ページタイトル</title> 61</head> 62<body> 63<?php 64if(!empty($datalist)){ 65 66 try{ 67 $username = "root"; 68 $password = "root"; 69 $pdo = new PDO( 70 'mysql:host=localhost;dbname=shop', 71 $username, 72 $password, 73 array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 74 75 //プリペアドステートメントのエミュレーションを無効にする 76 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 77 //エラーが発生した場合、例外がスローされるようにする 78 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 79 80 //検索結果 81 if($datalist <> ""){//検索窓が空なら検索しない 82 //単ワードでの検索時 83 if($count == 1){ 84 $datalist2 = '%'.$datalist.'%'; //検索文字列を%検索文字%とする 85 $stmt = $pdo->prepare("SELECT * FROM goods WHERE name LIKE :datalist"); 86 $stmt->bindParam(':datalist',$datalist2,PDO::PARAM_STR); 87 $stmt->execute( 88 ); 89 $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 90 91 }//OR検索時 92 elseif($count > 1){ 93 $stmt = $pdo->prepare($query); 94 for($i=0; $i<$count; $i++){ //検索ワードの数だけ繰り返す 95 $keyword2[$i] = '%'.$keyword.'%'; //検索ワード1つ1つを%検索文字%にする 96 $holder = ':keyword'.$i; //ホルダー用 97 $stmt->bindParam(':holder',$keyword2[$i],PDO::PARAM_STR); 98 } 99 $stmt->execute( 100 ); 101 $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 102 } 103 } 104 105 106 if(count($result) == 0){ 107 print '<p>「'.h($data).'」はデータベースに登録がありません</p>'; 108 }else{ 109 print '<p>「'.h($data).'」はデータベースに登録がありました</p>'; 110?> 111 <p>検索結果</p> 112 <table> 113 <tr> 114 <th>商品名</th> 115 <th>価格</th> 116 </tr> 117 118<?php 119 120 foreach ($result as $row){ 121?> 122 <tr> 123 <td><?php print h($row['name']) ?></td> 124 <td><?php print h($row['price']) ?></td> 125 </tr> 126<?php 127 } 128 print '</table>'; 129 } 130 131//接続でいない場合、PDOException例外がスローされるのでキャッチする 132 }catch(PDOException $e){ 133 print 'エラーが発生しました。。 内容:' . h($e->getMessage()); 134 } 135} 136?> 137<p>検索したい文字列を入力</p> 138<form action="list_s.php" method="POST" > 139<input type="search" name ="data"> 140<input type="submit" value="検索"> 141</form> 142</body> 143</html> 144

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。