0

tbl1

id | detail
1  | this, that
2  | these, those

tbl2

id | visit  | cost
1  | this   | 20
2  | that   | 30
3  | these  | 40
4  | those  | 50

PHP:

<?php 

$id=$_GET['id'];    
$detail=$_GET['detail'];
$pieces = explode(",", $rows['detail']);

    // $pieces[0]; piece1
    // $pieces[1]; piece2        
    // $pieces[2]; piece2        
    // $pieces[3]; piece3    
    // $pieces[4]; piece4

    foreach($pieces[1] as $test){            

$query="SELECT * FROM tbl1, tbl2 WHERE
  $test = tbl2.cost AND
  tbl1.id='$id'";
    }   

$result=mysql_query($query) or die("error: " . mysql_error());

while($rows=mysql_fetch_array($result)){    
?>
<table>
    <tr>
    <td><input value="<? echo $rows['code'];?>" readonly="readonly"/></td>
    <td><input value="<? echo $rows['cost']; ?>" readonly="readonly"/></td>
    </tr>
  </table>

<?php
}
?>

for id=1, array 0=>this, 1=>that だから、foreach($pieces[1] as $test)、それは「それ」を意味します

上記は機能しますが、 に変更$pieces[1]して$pieces[0]も、 に対応する結果が得られ$pieces[1]ます。そして、$pieces[4]存在しないものに変更すると、 に対応する結果が再び得られ$pieces[1]ます。

私はどこで間違っていますか?この配列を機能させるにはどうすればよいですか?

tbl1.id=1 piece[0]=>this、piece[1]=>that によると、テーブルで機能させたいと考えています。助けてください。

4

3 に答える 3

1

$ piece [1]、foreachループで使用している変数は文字列であり、配列ではありません。$ piece配列をループする必要があるので、次のようにします。

foreach($pieces as $test){ 

... いいえ

foreach($pieces[1] as $test){ 
于 2012-08-20T03:38:33.390 に答える
1

$pieces[1] は配列ではなく、配列($pieces)の要素なので、ループ文を使わずに使ったほうがいいです。

$query="SELECT * FROM tbl1, tbl2 WHERE
  $pieces[1] = tbl2.cost AND
  tbl1.id='$id'";

ありがとう

于 2012-08-20T03:41:12.943 に答える
0

走るとき

$result=mysql_query($query) or die("error: " . mysql_error());

from クエリの結果を返します。しかし、あなたの質問は何ですか?これは、$query を最後に設定した文字列であり、for ループの最後の反復です。それは非効率的であり、意図した動作ではないようです。

すべての結果が必要である (クエリの最適化は気にしない) と仮定すると、次のようにすることができます。

foreach($pieces as $test){            
    $query="SELECT * FROM tbl1, tbl2 WHERE
    $test = tbl2.cost AND tbl1.id='$id'";

    $result[]=mysql_query($query) or die("error: " . mysql_error());
}

foreach ($results as $result){
    $rows=array_push(mysql_fetch_array($result));
}

特定の部分の詳細だけが必要な場合は、for ループは必要ありません。

// replace 3 with the desired element
$query="SELECT * FROM tbl1, tbl2 WHERE
$pieces[3] = tbl2.cost AND tbl1.id='$id'";

$result=mysql_query($query) or die("error: " . mysql_error());

mysql_fetch_array($result);
于 2012-08-20T03:40:01.017 に答える