2011-01-25 3 views
0

私はPHPのプログラマーではないので、誰かが私を助けてくれることを願っています。 私がしようとしているのは、競合他社の列から異なる値を取得し、それらの配列を作成し、いくつかの変数に基づいてそれぞれの個別の値に対してshare1-share12の値を取得し、競合他社とそのshare1を出力することです-12値。以下はPHP/MySQL - 個別の値の配列を作成し、それらの値に関連付けられたデータのdbテーブルをクエリし、それぞれループします。

私は一緒にcobblingてきたコードの混乱と一緒に私のデータテーブルの形式である:

状態は| bigcat |ライバル|メトリック| SHARE1 | SHARE2 | share3 | share4 | share5 | share6 | share7 | share8 | share9 | share10 | share11 | share12

<?php 
    $product = $_GET['product']; 
    $cat = $_GET['cat']; 
    $state = $_GET['state']; 
    $metric = $_GET['metric']; 

    $table = $product ."_specs_states"; 

    $q = " SELECT distinct(competitor) as competitor from $table"; 
       $result = $dbc->query($q) or die("unable to execute the query<br />" . $dbc->errno . "<br />" . $dbc->error); 
       $r = $result->fetch_array(); 
       $competitors = array(); 

       do { 
        $competitors[] = $r[0]; 

      } while ($r = $result->fetch_array()); 
      echo $competitors; 


     foreach($competitors as $competitor){ 


       $q = "SELECT * FROM $table where state = '$state' && bigcat = '$cat' && product = '$product' && metric = '$metric' && competitor = '$competitor'"; 
       $result = $dbc->query($q) or die("unable to execute the query<br />" . $dbc->errno . "<br />" . $dbc->error); 

       $r = $result->fetch_array(); 

        $share1 = ($r[5]); 
        $share2 = ($r[6]); 
        $share3 = ($r[7]); 
        $share4 = ($r[8]); 
        $share5 = ($r[9]); 
        $share6 = ($r[10]); 
        $share7 = ($r[11]); 
        $share8 = ($r[12]); 
        $share9 = ($r[13]); 
        $share10 = ($r[14]); 
        $share11 = ($r[15]); 
        $share12 = ($r[16]); 

    }//end loop 

    ?> 

    <?php 
    $i=1; 
    while($i<=#) 
     { 
    ?> 

    <?= $competitor ?><br /> 
    <?= $share1 ?><br /> 
    <?= $share2 ?><br /> 
    <?= $share3 ?><br /> 
    <?= $share4 ?><br /> 
    <?= $share5 ?><br /> 
    <?= $share6 ?><br /> 
    <?= $share7 ?><br /> 
    <?= $share8 ?><br /> 
    <?= $share9 ?><br /> 
    <?= $share10 ?><br /> 
    <?= $share11 ?><br /> 
    <?= $share12 ?> 


    <?php 
     $i++; 
     } 
    ?> 
+1

あなたのmysqlクエリを正しくエスケープすることについての通常の警告...非効率化されたGET変数は非常に悪い考えです! – BrynJ

+0

@Kid:入力をエスケープするのではなく、[prepared statements](http://www.php.net/PDO.prepared-statements)を使用する必要がありますが、これはテーブル名のインジェクションの脆弱性には役立ちません。リレーショナル・モデルによれば、任意の数の列(share1-12)を使用するのではなく、別の表を使用してデータを1対多の関係(場所)に格納し、表を結合します。 2つの別々のステートメントではなく、結合を使用します。 ['SELECT *'](http://stackoverflow.com/questions/321299/what-is-the-reason-not-to-use-select)を使わないでください。必要な列だけを選択します。 – outis

+0

...共通の接頭辞と数字の接尾辞を持つ変数の名前を見つける場合は、代わりに配列を使用してください。 ['
'](http://brainstormsandraves.com/articles/semantics/structure/#br)は意味論的ではありません(http://webstyleguide.com/wsg3/5-site-structure/2-semantic- markup.html);段落や[list](http://www.w3.org/TR/html401/struct/lists.html)要素など、より適切なものを使用してください。 HTMLを出力するときに['or die'](http://www.phpfreaks.com/blog/or-die-must-die)を使わないでください。無効なHTMLが表示されます。 – outis

答えて

0

私はかなり完全に理解していないが、私はあなたが出力に競合他社とその株式の全てたい推測しているが、これが唯一の最後のライバルを出力していますか?もしそうなら、それを修正する方法は、別のwhileループを作成する代わりに、foreachループにエコーを置くことです。

<?php 
$product = $_GET['product']; 
$cat = $_GET['cat']; 
$state = $_GET['state']; 
$metric = $_GET['metric']; 

$table = $product ."_specs_states"; 

$q = " SELECT distinct(competitor) as competitor from $table"; 
      $result = $dbc->query($q) or die("unable to execute the query<br />" . $dbc->errno . "<br />" . $dbc->error); 
      $r = $result->fetch_array(); 
      $competitors = array(); 

      do { 
       $competitors[] = $r[0]; 

     } while ($r = $result->fetch_array()); 
     echo $competitors; 


    foreach($competitors as $competitor){ 


      $q = "SELECT * FROM $table where state = '$state' && bigcat = '$cat' && product = '$product' && metric = '$metric' && competitor = '$competitor'"; 
      $result = $dbc->query($q) or die("unable to execute the query<br />" . $dbc->errno . "<br />" . $dbc->error); 

      $r = $result->fetch_array(); 

       $share1 = ($r[5]); 
       $share2 = ($r[6]); 
       $share3 = ($r[7]); 
       $share4 = ($r[8]); 
       $share5 = ($r[9]); 
       $share6 = ($r[10]); 
       $share7 = ($r[11]); 
       $share8 = ($r[12]); 
       $share9 = ($r[13]); 
       $share10 = ($r[14]); 
       $share11 = ($r[15]); 
       $share12 = ($r[16]); 

       echo $competitor ."<br />"; 
echo $share1 ."<br />"; 
echo $share2 ."<br />"; 
echo $share3 ."<br />"; 
echo $share4 ."<br />"; 
echo $share5 ."<br />"; 
echo $share6 ."<br />"; 
echo $share7 ."<br />"; 
echo $share8 ."<br />"; 
echo $share9 ."<br />"; 
echo $share10 ."<br />"; 
echo $share11 ."<br />"; 
echo $share12; 

}//end loop 

?> 
+0

Thanks jbile!それは競合他社のすべてを出力しますが、share1-12の値は出力しません。これらの値を取得するには、このコードは正しいですか? $ r = $ result-> fetch_array(); $ share1 =($ r [5]); $ share2 =($ r [6]); $ share3 =($ r [7]); $ share4 =($ r [8]); $ share5 =($ r [9]); $ share6 =($ r [10]); –

+0

あなたのデータベースフィールドはわからないので、私は完全にはわかりません。 $ r = $ result-> fetch_array()の直後です。 print_r($ r)を実行します。 $ rが実際にあなたが望む値で満たされているかどうかを見てください。 – jb1785

関連する問題