2016-04-21 2 views
0

私は選挙システムに取り組んでおり、問題の解決が困難です。以下は私のアプリケーションの様子です。 enter image description hereデータベースフィールドをループするPHP MySQL

現時点では、私のPHPファイルに複数回クエリを追加することでこれらの結果が得られます。 (例えば、RaceID = 9、RaceID = 10 .........)を実行します。 RaceIDを配列や他の方法で読み込んで結果を得る方法があるはずです。これらはJOINテーブルなので、私はRaceName(大統領名、最高裁判事など)とMainRaceName(赤、青、灰色のタイトル)も検索する方法を探しています。私はあなたが、私はこの問題を解決することができますどのようにいくつかのサンプル(ループ)を提供することができれば、私は本当に感謝し、私がこれまでにいくつかの意味を作っています...続き は

<!-- MAIN ELECTION TICKET MainID loop should control this --> 
<div class="panel panel-red margin-bottom-40"> 
<div class="panel-heading"> 
    <h2 class="panel-title"> <strong>REPUBLICAN NATIONAL</strong> </h2> 
</div> 

<!-- End then SUB ELECTION TICKET RaceID loop should control this section--> 
<h3 style="background-color:#f5f5f5; margin:30px; padding:5px; font-weight:Bold ">Presidential Race </h3> 


<!-- Finally Results section ELECTION RESULTS --> 
<table class="table table-hover"> 
    <thead> 
    <tr> 
     <th></th> 
     <th>Candidate</th> 
     <th>Votes</th> 
     <th>%</th> 
    </tr> 
    <!-- This area gets the sum of the votes for a specific RaceID --> 
    <?php 
    $result = mysql_query('SELECT SUM(CandidateVotes) AS value_sum FROM candidates WHERE RaceID =9'); 
    $row = mysql_fetch_assoc($result); 
    $sum = $row['value_sum']; 
    ?> 
    </thead> 
    <tbody> 
    <?php 
    $query = "SELECT candidates.CandidateName, candidates.CandidateVotes, candidates.Party, mainrace.MainRaceName, race.RaceName, candidates.win 
             FROM candidates 
             JOIN race ON race.RaceID = candidates.RaceID 
             JOIN mainrace ON mainrace.MainID = candidates.MainID 
             WHERE candidates.RaceID = 9"; 

    $result = mysql_query($query) or die(mysql_error()); 
    for($i=0; $row = mysql_fetch_array($result); $i++){ 
     ?> 

     <tr> 
      <!--Show winner Icon if the win field is selected as 1 from database --> 
      <td width="5px"> 
       <?php if ($row['win']==1) 
       { 

        echo "<span class=\"glyphicon glyphicon-check\"></span>"; 
       } 

       else 
       { 
        echo "<span class=\"glyphicon glyphicon-unchecked\" style=\"color:#cccccc\"></span>"; 
       } 
       ?> 


      </td> 

      <td><?php if ($row['win']==1){ 
        echo "<strong>"; 
        echo $row['CandidateName']; 
        echo "</strong>"; 
       } 
       else { 
        echo $row['CandidateName']; 
       } 

       ?> 
      </td> 

      <td width="20%"><?php echo $row['CandidateVotes']; ?></td> 
      <td width="30%"><?php 
       if ($row['CandidateVotes']>0){ 
        echo number_format((float)(($row['CandidateVotes']/$sum)*100), 2, '.', ''). ' %'; 
       } 

       else{ 
        echo "N/A"; 
       } 
       ?> 
      </td> 

     </tr> 
     <?php 
    } 
    ?> 

    <tr> 
     <td></td> 
     <td><strong>Total Votes:</strong></td> 
     <td><strong><?php echo $sum ?></strong></td> 
     <td></td> 
    </tr> 

    </tbody> 

</table> 

ための私のコードであると思います。あなたの助けが大変ありがとうございます。よろしくお願いいたします。

+0

[リトルボビーは](http://bobby-tables.com/)は、[スクリプトがSQLインジェクション攻撃のリスクがある。]と言う(のhttp:// stackoverflowの

このような何かを試してみてください.com/questions/60174/how-can-i-prevent-sql-injection-in-php)を参照してください。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –

+1

[mysql_ *関数の使用をやめてください](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 [これらの拡張機能](http://php.net/manual/en/migration70.removed-exts-sapis.php)はPHP 7で削除されました。[prepared](http://en.wikipedia.org/ [PDO](http://php.net/manual/en/pdo.prepared-statements.php)および[MySQLi](http://php.net/manual/en/mysqli.quickstart)のwiki/Prepared_statement)ステートメント.prepared-statements.php)、PDOの使用を検討してください。[これは本当に簡単です](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

推奨事項のおかげで、コードをPDOに変更します。 – CyberFla

答えて

1

1つのクエリで必要なものすべてをプルダウンする必要があります。

票を集計するには、候補者名がGROUP BYであることを確認する必要があります。

SELECT 
    SUM(candidates.CandidateVotes) AS value_sum, 
    candidates.CandidateName, 
    candidates.Party, 
    mainrace.MainRaceName, 
    race.RaceName, 
    candidates.win 
FROM candidates 
JOIN race 
    ON race.RaceID = candidates.RaceID 
JOIN mainrace 
    ON mainrace.MainID = candidates.MainID 
WHERE candidates.RaceID = :raceId 
GROUP BY candidates.CandidateName 
+0

Davidに感謝します。このクエリを試して結果を確認します。それは理にかなっている。 – CyberFla

関連する問題