Jump to content
  • 0

Делать голосование с SQL или без?


veromi
 Share

Question

С ПХП недавно.. знания функций ограничены..

Нужно было сделать голосование на одном из сайтов.

Написал вот такую байду с использованием SQL..

Скрипт работает.

<?php
if (isset($_POST['submit'])){
$answer=$_POST['answer'];
//Если нажата Сабмит делаем запрос
$query="SELECT * FROM kakoy_auto WHERE id=1";
$result=mysqli_query($db, $query);
$myrow=mysqli_fetch_array($result);
//Выводим данные из базы
$gaz=$myrow["gaz"];
$uaz=$myrow["uaz"];
$vaz=$myrow["vaz"];
$inomarka=$myrow["inomarka"];
$net_auto=$myrow["net_auto"];
$vsego=$myrow["vsego"];

//Узнаем за кого голосуют
if($answer=='gaz'){
$new_vote=$gaz=$myrow["gaz"]+1;}
if($answer=='uaz'){
$new_vote=$gaz=$myrow["uaz"]+1;}
if($answer=='vaz'){
$new_vote=$gaz=$myrow["vaz"]+1;}
if($answer=='inomarka'){
$new_vote=$gaz=$myrow["inomarka"]+1;}
if($answer=='net_auto'){
$new_vote=$gaz=$myrow["net_auto"]+1;}

$vsego=$vsego+1;
//Обновляем базу
$query2="UPDATE kakoy_auto SET $answer=$new_vote, vsego=$vsego WHERE id=1";
$result2=mysqli_query($db, $query2);

?>
<div class='content_left'>
<div id="content_left_img"><h7>Результаты голосования</h7>
</div>
<?php
$query3="SELECT * FROM kakoy_auto WHERE id=1";
$result3=mysqli_query($db, $query3);
$myrow3=mysqli_fetch_array($result3);
printf ("<table><tr><td>
ГАЗ: %s<img src=images/golosovanie/1.gif height=10 width=%s><br>
УАЗ: %s<img src=images/golosovanie/2.gif height=10 width=%s><br>
ВАЗ: %s<img src=images/golosovanie/3.gif height=10 width=%s><br>
Иномарка: %s<img src=images/golosovanie/4.gif height=10 width=%s><br>
У меня нет автомобиля: %s<img src=images/golosovanie/5.gif height=10 width=%s>
</font></td></tr></table>
<br>Всего проголосовало:%s",
$myrow3['gaz'],$myrow3['gaz'],$myrow3['uaz'],$myrow3['uaz'],$myrow3['vaz'],$myrow3['vaz'],$myrow3['inomarka'],$myrow3['inomarka'],$myrow3['net_auto'],$myrow3['net_auto'], $myrow3['vsego']
);





}
else {
echo '<H7>Вы не нажали кнопку Голосовать!<br>Пожайлуста вернитесь и проголосуйте снова!</h7>';
}

Нехватает конечно же куки для защиты от повторного голосования.... Привязку к айпишнику думаю не стоит делать, т.к. иногда разные люди сидят на одном Айпи.

Вообще подскажите пжалста явные ляпы..

Вообще стоит ли задействовать для таких задач SQL или лучше без него, через файл на диске..

Спасибо!

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

1) Зачем вам переменные типа $gaz? У вас уже есть целый массив $myrow!

2) Очень важно проверять данные которые вы получаете из GET POST и после используете в SQL запросах, почитайте про sql-инъекции...

3) Представьте если поле submit будет заполнено, а answer будет пустой или еще хуже будет содержать sql-инъекцию.

4) Для чего делать записи типа $new_vote=$gaz=$myrow["inomarka"]+1; да бывает нужно чтобы было несколько переменных имели одинаковое значение но в вашем примере этого не требуется...

5) Записи типа $vsego=$vsego+1 пишут как $vsego++.

6) Для чего вы делаете третий запрос в базу данных? Ведь все данные у вас уже есть...

7) Почитайте про mysql_free_result;

8) Раз уж вы только начали изучать то, лучше изучайте объекто ориентированный вариант подключения...

Если нужно было бы править ваш код, я бы поправил его так:

<?php
if (isset($_POST['submit'])){
$answer = trim(htmlspecialchars($_POST['answer']));

$query = "SELECT * FROM kakoy_auto WHERE id=1";
$result = mysqli_query($db, $query);
$myrow = mysqli_fetch_array($result);

$real_answer = array('gaz', 'uaz', 'vaz', 'inomarka', 'net_auto', 'vsego');

if(in_array($answer, $real_answer)) {

$myrow[$answer]++;
$myrow['vsego']++;

$query2=sprintf("UPDATE `kakoy_auto` SET `%s`=%d, `vsego`=%d WHERE `id`=1", $answer, $myrow[$answer], $myrow['vsego']);
$result2=mysqli_query($db, $query2);


?>
<div class='content_left'>
<div id="content_left_img"><h6>Результаты голосования</h6></div>
<?php
echo '<table><tr><td>
ГАЗ: '.$myrow['gaz'].'<img src=images/golosovanie/1.gif height="10" width="'.$myrow['gaz'].'"><br>
УАЗ: '.$myrow['uaz'].'<img src=images/golosovanie/1.gif height="10" width="'.$myrow['uaz'].'"><br>
ВАЗ: '.$myrow['vaz'].'<img src=images/golosovanie/1.gif height="10" width="'.$myrow['vaz'].'"><br>
Иномарка: '.$myrow['inomarka'].'<img src=images/golosovanie/1.gif height="10" width="'.$myrow['inomarka'].'"><br>
У меня нет автомобиля: '.$myrow['net_auto'].'<img src=images/golosovanie/1.gif height="10" width="'.$myrow['net_auto'].'"></td></tr></table><br>
Всего проголосовало: '.$myrow['vsego'];
}

mysql_free_result($result);

} else { echo '<h6>Вы не нажали кнопку Голосовать!<br>Пожайлуста вернитесь и проголосуйте снова!</h6>'; }
?>

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy