2016-04-21 3 views
0

Я работаю над системой выборов, и мне трудно решить проблему. Ниже показано, как выглядит мое приложение. enter image description hereLoop через поля базы данных 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 Injection атак.] (Http: // StackOverflow .com/вопросы/60174/как-кан-я-предотвращать-SQL-инъекции-в-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. Узнайте о [подготовленном] (http://en.wikipedia.org/ wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) и подумайте над использованием PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

+0

Спасибо за рекомендации, я изменю свой код на PDO. – CyberFla

ответ

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

Спасибо, Дэвид. Я попробую этот запрос и посмотрю результаты. Это имеет смысл. – CyberFla

Смежные вопросы