Использование Foreach для веб-сайта. Я хочу счетчик посещений, используя PHP & amp; MSQL

Поэтому я создаю веб-сайт библиотеки для фортепиано для моей младшей кузины.

В настоящее время я использую функцию foreach для отображения всех данных из моей базы данных. Теперь, это прекрасно работает, и мне удалось заставить работать несколько функций, но у меня возникли проблемы с «Счетчик».

Супер простая концепция, за исключением того факта, что я бы хотел счетчик для каждой записи.

От «Счетчик» Я имею в виду, что после нажатия на ссылку, это добавило бы +1 к счету. Чтобы каждая ссылка имела «Посещено 100 раз» или «Посещено 34 раза» и т. Д..

Я пробовал следующее:

if($mysqli){

$result = mysqli_query($mysqli,"SELECT * FROM testtable ".$orderbyfilter);
$rows = $result->fetch_all(MYSQLI_ASSOC);

foreach($rows as $row) {
echo "<tr id='entry'><td>";
echo ucwords($row['name']);
echo "</td><td align='center'>";
echo '<a href="' . $row['url'] . '">url</a>';
echo "add hit:";
echo "<a href='?action=callfunction'>Click</a>";//current counter script

if(isset($_GET['action']) && $_GET['action'] == 'callfunction'){
$hitcount = $row['hitcount'] + 1;
$id = $row['id'];

// why doesn't this work?
$sql="UPDATE testtable SET hitcount='$hitcount' WHERE id='".$id."'";
$result=mysqli_query($con,$sql);
}

echo "</td><td align='center'>";
echo $row['level'];
echo "</td><td align='center'>";
echo $row['hitcount'];
echo "</td></tr>";

}

mysqli_close($mysqli);

} else {
echo "table did not correctly display!";
}

Очевидно, метод:

$sql="UPDATE testtable SET hitcount='$hitcount' WHERE id='".$id."'";

Не работает, так как когда я нажимаю на ссылку, он обновляет все записи с одинаковым количеством посещений. Однако, когда я изменяю это на:

$sql="UPDATE testtable SET hitcount='$hitcount' WHERE id='2'";

Он отлично работает, где он только изменяет количество посещений для строки с id=2,

Очевидно, что проблема связана с "foreach" и настройка $row[id] как переменная, но, честно говоря, я мог бы использовать некоторую помощь.

Это как-то связано с переменными переменных? Я понятия не имею. Любая помощь приветствуется.

0

Решение

Вот что сработало для меня. Вы можете изменить его в соответствии с требованиями.

Нужно было передать дополнительный параметр GET для соответствующего «id» в URL, а затем передать эту переменную в WHERE пункт.

Также был добавлен заголовок, чтобы автоматически перенаправлять после щелчка по связанному URL-адресу заданной строки и отображать результаты, а также предотвращать появление следующего предупреждения:

Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, логическое значение дано в …

Примечание: Прочитайте комментарии, оставленные в коде ниже для получения дополнительной информации.

<?php
ob_start(); // keep this, it's for the header

$DB_HOST = 'xxx'; // Replace
$DB_USER = 'xxx'; // with
$DB_PASS = 'xxx'; // your
$DB_NAME = 'xxx'; // own

$Link = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($Link->connect_errno > 0) {
die('Connection failed [' . $Link->connect_error . ']');
}

// Your original query. You can replace it if needed.
// $result = mysqli_query($Link,"SELECT * FROM testtable ".$orderbyfilter);

$result = mysqli_query($Link,"SELECT * FROM testtable");

while ($row = mysqli_fetch_array($result)) {

echo "<tr id='entry'><td>";
echo "ID: " . $row['id'];

$var = $row['id']; // used for the URL

echo "<br>";

echo $row['hitcount'];
echo ucwords($row['name']);
echo "</td><td align='center'>";
echo '<a href="' . $row['url'] . '">url</a>';
echo " Add hit: ";
echo "<a href='?action=callfunction&id=$var'>Click</a> ";

if(isset($_GET['action']) && $_GET['action'] == 'callfunction'){

// Used for the query and escape the URL
$var = mysqli_real_escape_string($Link, $_GET['id']);

$sql="UPDATE testtable SET hitcount = hitcount +1 WHERE id='".$var."'";

$result=mysqli_query($Link,$sql);

// Added a header, otherwise the old method will generate the following warning
// Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in...
header("Location: http://www.example.com/your_counter_file.php");
exit; // Keep this in order to stop further execution

// ^ Change the url in header above to reflect your Web site's address

} // Closing brace for isset

echo "</td><td align='center'>";
echo $row['level'];
echo "</td><td align='center'>";
echo $row['hitcount'];
echo "</td></tr>";

} // Closing brace for while loop

mysqli_close($Link);
0

Другие решения

Просто измените ваш запрос, чтобы обновить счетчик

$sql="UPDATE testtable SET `hitcount`=hitcount+1 WHERE id=".$id;

Не используйте одинарные кавычки вокруг значения счетчика, так как его integer

0

По вопросам рекламы [email protected]