検索結果をPHPを使ってリストボックスに出すにはどうしたらよいでしょうか?


イメージ的には
http://jsajax.com/Articles/ListBox/339
のようなものの片方に、検索結果を入れたもの。
検索結果を選択し、対象になったものを隣のリストボックスに入れるというものを想定します。

リンク先にでもよいのでコード付きでよろしくお願いします。

回答の条件
  • 1人10回まで
  • 登録:2011/08/19 04:09:35
  • 終了:2011/08/19 18:54:45

ベストアンサー

id:Jupiter2100 No.2

じゅぴたー回答回数444ベストアンサー獲得回数742011/08/19 09:55:30

ポイント150pt

PHPでとのことですので、こんな感じでいかがでしょう。

あえてJavaScriptは使いませんでした。

矢印ボタンを押すたびにページ遷移が発生します。

<?php
$Encode = 'UTF-8';
$Myself = basename($_SERVER['SCRIPT_NAME']);

//選択対象
$sour = array('Item1', 'Item2', 'Item3', 'Item4', 'Item5');
$dest = array();

//選択リストを作成
function sprintOption($sour, $dest) {
    $html =<<< EOD
<table border="0">
<tr><td>
<select id="sour" name="sour" size="5">

EOD;
    foreach ($sour as $val) {
        $html .=<<< EOD
<option value="{$val}">{$val}</option>

EOD;
    }
    $html .=<<< EOD
</select>
</td><td>
<input type="submit" id="add" name="add" value="" /><br />
<input type="submit" id="del" name="del" value="" />
</td><td>

<select id="dest" name="dest" size="5">
EOD;
    foreach ($dest as $val) {
        $html .=<<< EOD
<option value="{$val}">{$val}</option>

EOD;
    }
    $html .=<<< EOD
</select>
</td></tr>
</table>

EOD;
    return $html;
}

//メインプログラム
$dest2 = isset($_POST['dest2']) ? $_POST['dest2'] : '';
//追加
if (isset($_POST['add']) && isset($_POST['sour'])) {
    $dest2 .= ($dest2 == '') ? $_POST['sour'] : ',' . $_POST['sour'];
//削除
} else if (isset($_POST['del']) && isset($_POST['dest'])) {
    $dest2 = preg_replace("/{$_POST['dest']}\,?/iu", '', $dest2);
}

$s = strtok($dest2, ',');
while ($s !== FALSE) {
    $dest[] = $s;
    $s = strtok(',');
}
$sour = array_diff($sour, $dest);

$outstr = sprintOption($sour, $dest);
$Html =<<< EOD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset={$Encode}" />
</head>
<body>
<form method="POST" action="{$Myself}">
{$outstr}
<input type="hidden" id="dest2" name="dest2" value="{$dest2}" />
</form>
</body>
</html>

EOD;

// 表示処理
echo $Html
?>
id:robopit

回答ありがとうございます。

すべてPHPで書いていただけるとは

勉強になります。

ベストアンサーで締め切らせていただきます。

ありがとうございました。

2011/08/19 18:53:53

その他の回答(1件)

id:Cherenkov No.1

Cherenkov回答回数1502ベストアンサー獲得回数4922011/08/19 06:40:36

ポイント50pt

JavaScript + Ajax 実践サンプル集 - リストボックス間でアイテムを移動

(上のメニューからコード参照できる)



質問文のリンク先のコードのoption部分だけ書き換えたもの。この場合$optionsに検索結果を配列で入れておく。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" >  
<head>  
<title>ListBox (DOM Level0)</title>  
<script type="text/javascript">  
window.onload = function() {  
  document.getElementById("btnMoveRight").onclick = moveItems;  
  document.getElementById("btnMoveLeft").onclick = moveItems;  
}  
function moveItems() {  
  var leftBox = document.getElementById("ListBox1");  
  var rightBox = document.getElementById("ListBox2");   
  var fromBox, toBox;  
    
  if (this.value == "→") {  
    fromBox = leftBox; toBox = rightBox;  
  }   
  else if (this.value == "←") {  
    fromBox = rightBox; toBox = leftBox;  
  }  
    
  if ((fromBox != null) && (toBox != null)) {   
    if(fromBox.length < 1) {  
      alert("リストボックスにアイテムがありません!");  
      return false;  
    }  
    if(fromBox.selectedIndex == -1) {  
      alert("移動するアイテムを選択してください!");  
      return false;  
    }  
    while ( fromBox.selectedIndex >= 0 ) {   
      var newOption = new Option();   
      newOption.text = fromBox.options[fromBox.selectedIndex].text;   
      newOption.value = fromBox.options[fromBox.selectedIndex].value;   
      toBox.options[toBox.length] = newOption;  
      fromBox.remove(fromBox.selectedIndex);   
    }   
  }  
  return false;   
}  
</script>  
</head>  
<body>  
<table>  
<tr>  
<td>  
<select id="ListBox1" size="5" multiple="multiple">
<?php

$options = array('aaa','bbb','ccc');
foreach ($options as $option) {
    echo "<option value=\"$option\">$option</option>";
}
?>
</select>
</td>  
<td>  
  <input id="btnMoveRight" type="button" value="→" />  
  <br />  
  <input id="btnMoveLeft" type="button" value="←" />  
</td>  
<td>  
  <select id="ListBox2" size="5" multiple="multiple">  
  </select>  
</td>  
</tr>  
</table>  
</body>  
</html>

参考:

id:robopit

回答ありがとうございます。

リンクまで張っていただいてありがとうございます。

2011/08/19 18:24:26
id:Jupiter2100 No.2

じゅぴたー回答回数444ベストアンサー獲得回数742011/08/19 09:55:30ここでベストアンサー

ポイント150pt

PHPでとのことですので、こんな感じでいかがでしょう。

あえてJavaScriptは使いませんでした。

矢印ボタンを押すたびにページ遷移が発生します。

<?php
$Encode = 'UTF-8';
$Myself = basename($_SERVER['SCRIPT_NAME']);

//選択対象
$sour = array('Item1', 'Item2', 'Item3', 'Item4', 'Item5');
$dest = array();

//選択リストを作成
function sprintOption($sour, $dest) {
    $html =<<< EOD
<table border="0">
<tr><td>
<select id="sour" name="sour" size="5">

EOD;
    foreach ($sour as $val) {
        $html .=<<< EOD
<option value="{$val}">{$val}</option>

EOD;
    }
    $html .=<<< EOD
</select>
</td><td>
<input type="submit" id="add" name="add" value="" /><br />
<input type="submit" id="del" name="del" value="" />
</td><td>

<select id="dest" name="dest" size="5">
EOD;
    foreach ($dest as $val) {
        $html .=<<< EOD
<option value="{$val}">{$val}</option>

EOD;
    }
    $html .=<<< EOD
</select>
</td></tr>
</table>

EOD;
    return $html;
}

//メインプログラム
$dest2 = isset($_POST['dest2']) ? $_POST['dest2'] : '';
//追加
if (isset($_POST['add']) && isset($_POST['sour'])) {
    $dest2 .= ($dest2 == '') ? $_POST['sour'] : ',' . $_POST['sour'];
//削除
} else if (isset($_POST['del']) && isset($_POST['dest'])) {
    $dest2 = preg_replace("/{$_POST['dest']}\,?/iu", '', $dest2);
}

$s = strtok($dest2, ',');
while ($s !== FALSE) {
    $dest[] = $s;
    $s = strtok(',');
}
$sour = array_diff($sour, $dest);

$outstr = sprintOption($sour, $dest);
$Html =<<< EOD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset={$Encode}" />
</head>
<body>
<form method="POST" action="{$Myself}">
{$outstr}
<input type="hidden" id="dest2" name="dest2" value="{$dest2}" />
</form>
</body>
</html>

EOD;

// 表示処理
echo $Html
?>
id:robopit

回答ありがとうございます。

すべてPHPで書いていただけるとは

勉強になります。

ベストアンサーで締め切らせていただきます。

ありがとうございました。

2011/08/19 18:53:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません