Ух ты, с чего мне начать. Хорошо, я исправил твой код. Вот список изменений
- Форматированный код для удобочитаемости (здесь нужна серьезная дисциплина)
- Обеззараживать входные данные перед их использованием в запросах (предотвращает внедрение SQL)
- Добавлены разделители строк в поисках ключей ассоциативных массивов (предотвращает ошибки E_NOTICE)
- Экранированные потенциально опасные значения перед печатью в формате HTML (предотвращает XSS)
- Удалены неуклюжие операторы
echo
и изменен режим HTML для больших строк вывода вместо
- Обновлен JavaScript для использования
$.post()
вместо $.get()
, поскольку вы читаете из массива $_POST
в верхней части скрипта.
Вот код:
<?php
if ( isset( $_POST['score'] ) )
{
$result = mysql_query( "INSERT INTO score (score_count) VALUES (" . mysq_real_escape_string( $_POST['score'] ) . " )" );
echo $result ? 'Vote Succeeded' : 'Vote Failed: ' . mysql_error();
exit;
}
$user_id = mysql_real_escape_string( uid() );
$m = mysql_query( "SELECT * FROM friends WHERE friend_user_id1 = '$user_id' AND friend_status != '0' LIMIT 15" );
while ( $t = mysql_fetch_array( $m ) )
{
$fid = mysql_real_escape_string( $t['friend_user_id2'] );
$f = mysql_query( "SELECT * FROM users WHERE user_status != '' AND user_status_date != '0' AND user_id = '$fid' ORDER BY user_status_date ASC LIMIT 15" ) or die ( mysql_error() );
while ( $rows = mysql_fetch_array( $f ) )
{
$date = parse_date( $rows['user_status_date'] );
?>
<div style="margin: 5px;">
<table>
<tr>
<td valign="top" style="width:55px;">
<a href="page.php?id=<?php echo escapeForHtml( $rows['user_username'] ); ?>">
<?php _photo( $rows['user_id'] ); ?>
</a>
</td>
<td valign="top">
<a href="page.php?id=<?php echo escapeForHtml( $rows['user_username'] ); ?>" class="blue">
<b><?php echo escapeForHtml( $rows['user_username'] )?></b>
</a> - <span style="font-size:7pt;"><?php echo escapeForHtml( $date )?></span>
<span style="font-size:7pt;"> - <a href="javascript:;" onclick="updateScore(this)" class="blue">Vote</a></span>
<br /><?php echo escapeForHtml( $rows['user_status'] ); ?></td><td valign="top">
</td>
</tr>
</table>
</div>
<?php
}
}
function escapeForHtml( $value )
{
return htmlspecialchars( $value, ENT_COMPAT, 'UTF-8' );
}
?>
<script type="text/javascript">
function updateScore(answer, correct)
{
if (answer == correct)
{
$.post('index.php', {'score': '1'}, function(d)
{
alert('Vote Accepted: ' + d);
});
}
}
</script>
После того, как я все это сделал, я мог ясно видеть, что ваше условие успеха для фактического проведения POST мне неизвестно. Вы сравниваете answer
с correct
, но этот фрагмент кода не позволяет мне увидеть, откуда берется correct
. Оказавшись внутри функции updateScore()
, я вижу, что answer
является ссылкой на HTMLAnchorElement, по которому был выполнен щелчок, но каков источник значения, отправленного в correct
?
Если быть точным, я расскажу об этой жирной части здесь
onclick = "updateScore (это, , правильный )"
Редактировать!
Попробуйте это для версии вашей функции, которая обновляет ссылку после успешного голосования
<script type="text/javascript">
function updateScore( answer )
{
if ( confirm( "Are you sure?" ) )
{
$.post('index.php', {'score': '1'}, function(d)
{
alert('Vote Accepted: ' + d);
$(answer).after("<span>You Voted!</span>").remove();
});
}
}
</script>