私は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++;
}
?>
あなたのmysqlクエリを正しくエスケープすることについての通常の警告...非効率化されたGET変数は非常に悪い考えです! – BrynJ
@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
...共通の接頭辞と数字の接尾辞を持つ変数の名前を見つける場合は、代わりに配列を使用してください。 ['
'](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