Jump to content
  • 0

Счетчик просмотров


Floran
 Share

Question

Помогите разобратся почему не работает счетчик просмотров

Сlothes.php

<?php
$db = mysql_connect ("mysql-23.ukraine.com.ua","","")OR DIE("Не можу підключитися.. ");;
mysql_set_charset ('utf8',$db);
mysql_select_db("",$db)or die(mysql_error());

$result = mysql_query ("SELECT id,title, meta_d, meta_k, description, text, date, adres, view FROM clothes");

$row = mysql_fetch_array ($result);

do {

printf ("<table class='clothes'>

<tr>
<td class='clothes_title'>
<br><p><h1><a href='view_clothes.php?id=%s'>%s</a></h1></p>
<p class='clothes_adds'><h6>Номер: %s</h6></p>
<p class='clothes_adds'><h6>Дата добавления: %s</p>
<p>Адрес: %s</td>
</tr>

<tr>
<td><br><p class='clothes_adds'><h5>%s</h5></p>
<br><p class='clothes_adds'><h6>Просмотров: %s</h6></p></td>
</tr>

</table><br><br>", $row["id"], $row["title"], $row["id"], $row["date"], $row["adres"], $row["description"], $row["view"]);

}

while ($row = mysql_fetch_array ($result));
$new_view = $row["view"] + 1;
$update = mysql_query ("UPDATE view_clothes SET view='$new_view' WHERE id='$id'",$bd);


?>

view_clothes

<?php
$db = mysql_connect ("mysql-23.ukraine.com.ua","","")OR DIE("Не можу підключитися.. ");;
mysql_set_charset ('utf8',$db);
mysql_select_db("",$db)or die(mysql_error());

if (isset($_GET['id'])) {$id = $_GET['id'];}

$result = mysql_query ("SELECT * FROM clothes WHERE id='$id'");

$row = mysql_fetch_array ($result);

?>

<p><h1> <div id="clothes3"><?php echo $row['title'];?> </div></h1></p>
<p> <h6> <div id="clothes2"><?php echo'Дата добавления: ', $row['date'];?> </div></h6></p>
<p> <h6><div id="clothes2"><?php echo 'Адрес: ', $row['adres'];?> </div></h6></p>
<p> <h6> <div id="clothes2"><?php echo 'Просмотров: ', $row['view'];?> </div></h6></p>
<p> <div id="clothes5"><?php echo $row['text'];?> </div></p>

Link to comment
Share on other sites

  • Answers 54
  • Created
  • Last Reply

Top Posters For This Question

Recommended Posts

  • 0

$row = mysql_fetch_array ($result);

do {

printf ("<table class='clothes'>

<tr>
<td class='clothes_title'>
<br><p><h1><a href='view_clothes.php?id=%s'>%s</a></h1></p>
<p class='clothes_adds'><h6>Номер: %s</h6></p>
<p class='clothes_adds'><h6>Дата добавления: %s</p>
<p>Адрес: %s</td>
</tr>

<tr>
<td><br><p class='clothes_adds'><h5>%s</h5></p>
<br><p class='clothes_adds'><h6>Просмотров: %s</h6></p></td>
</tr>

</table><br><br>", $row["id"], $row["title"], $row["id"], $row["date"], $row["adres"], $row["description"], $row["view"]);

}

while ($row = mysql_fetch_array ($result));

Отвратительная поповщина

а что именно у вас не работает ?

Link to comment
Share on other sites

  • 0

1. Для mysql_fetch_array нельзя, слышите, нельзя использовать циклы с постусловием! Никогда! Ни прикаких обстоятельствах!

2. Лучше использовать MySQLi

3. Вместо printf лучше использовать echo. И разберитесь когда используются двойные кавычки, а когда одинарные.

4.

$new_view = $row["view"] + 1;
$update = mysql_query ("UPDATE view_clothes SET view='$new_view' WHERE id='$id'",$bd);

Это зачем так? Надо прибавить единицу? Тогда

UPDATE `view_clothes` SET `view`=`view`+1 WHERE ...

Link to comment
Share on other sites

  • 0

Уж вот fetch_array-то можно и так использовать, просто у него будет лишний один вызов. Говнокодно, но на эффективность не влияет.

while ($row = mysql_fetch_array ($result));
$new_view = $row["view"] + 1;

Уверены, что в $row после последнего прохода цикла будет хоть что-то? Я - нет.

Link to comment
Share on other sites

  • 0

я тока начинаю разбираться с php тоэтому пока не очень понимаю.

Нужно зделать что б количесво просмотров увеличивалось при переходе с clothes.php на view_clothes.php и отображалось на обеих страницах...

сменил clothes.php на

<?php
$db = mysql_connect ("mysql-23.ukraine.com.ua","","")OR DIE("Не можу підключитися.. ");;
mysql_set_charset ('utf8',$db);
mysql_select_db("",$db)or die(mysql_error());

$result = mysql_query ("SELECT id,title, meta_d, meta_k, description, text, date, adres, view FROM clothes");

$row = mysql_fetch_array ($result);

do {

printf ("<table class='clothes'>

<tr>
<td class='clothes_title'>
<br><p><h1><a href='view_clothes.php?id=%s'>%s</a></h1></p>
<p class='clothes_adds'><h6>Номер: %s</h6></p>
<p class='clothes_adds'><h6>Дата добавления: %s</p>
<p>Адрес: %s</td>
</tr>

<tr>
<td><br><p class='clothes_adds'><h5>%s</h5></p>
<br><p class='clothes_adds'><h6>Просмотров: %s</h6></p></td>
</tr>

</table><br><br>", $row["id"], $row["title"], $row["id"], $row["date"], $row["adres"], $row["description"], $row["view"]);

}

while ($row = mysql_fetch_array ($result));

$update = mysql_query ("UPDATE 'view_clothes' SET 'view'='view' +1 WHERE id='$id'",$bd);


?>

не помогло

Link to comment
Share on other sites

  • 0

Вы понимаете что делается в каждой строчке вашего кода? Я здесь вижу сумбур и неприкрытую порнографию. Давайте разберёмся что и как работает, а потом уже станет понятно как реализовать ту или иную задачу. Начём с начала. Что у вас выводится на странице clothes.php? Вероятно, какой-то список одежды. Как видим, количество просмотров идёт для каждой конкретной записи. Переменная $id не определена, а значит, что запрос-апдейт на увеличение количество просмотров идёт в несуществующую запись. Если не секрет, откуда такой код? Вы его сами писали или скопипастили? Потому что всё говорит о том, что вы не понимаете что внутри скрипта происходит.

Link to comment
Share on other sites

  • 0

Выкиньте и забудьте всё, что там говорилось. Что касается увеличения просмотра всех товаров, которые выводятся в списке, то надо делать так:

UPDATE `view_clothes` SET `view`=`view`+1

И не надо путаться с кавычками — есть косая кавычка `, а есть прямая '. Так вот для названия полей, таблиц, БД и а альясов надо использовать косую кавычку, для значений — прямую.

Link to comment
Share on other sites

  • 0

вот что щас имеется

<?php
$db = mysql_connect ("mysql-23.ukraine.com.ua","","")OR DIE("Не можу підключитися.. ");;
mysql_set_charset ('utf8',$db);
mysql_select_db("",$db)or die(mysql_error());

$result = mysql_query ("SELECT id,title, meta_d, meta_k, description, text, date, adres, view FROM clothes");

$row = mysql_fetch_array ($result);

do {

printf ("<table class='clothes'>

<tr>
<td class='clothes_title'>
<br><p><h1><a href='view_clothes.php?id=%s'>%s</a></h1></p>
<p class='clothes_adds'><h6>Номер: %s</h6></p>
<p class='clothes_adds'><h6>Дата добавления: %s</p>
<p>Адрес: %s</td>
</tr>

<tr>
<td><br><p class='clothes_adds'><h5>%s</h5></p>
<br><p class='clothes_adds'><h6>Просмотров: %s</h6></p></td>
</tr>

</table><br><br>", $row["id"], $row["title"], $row["id"], $row["date"], $row["adres"], $row["description"], $row["view"]);

}

while ($row = mysql_fetch_array ($result));

$update = mysql_query ("UPDATE `view_clothes` SET `view`=`view` +1 WHERE id='$id'",$bd);


?>

также не работает(

Link to comment
Share on other sites

  • 0

будет ценно, если вы скажете, что именно не работает.

Какую ошибку пишет.

В коде пока что ошибку можно найти практически в каждой строке, кроме пустой.

$update = mysql_query ("UPDATE `view_clothes` SET `view`=`view` +1 WHERE id='$id'",$bd);

это что?

$id нигде ранее в коде не встречается.

Значит либо вы не полностью код привели, либо она не определена, и соответственно апдейта не происходит. WHERE id='' — нет такого в БД наверно?

И ещё что-то мне подсказывает, что $id должно быть целым числом, а у вас оно может принимать любое значение, хоть '0;drop table `view_clothes`;'

Link to comment
Share on other sites

  • 0

вот добавил,

if (isset($_GET['id'])) {$id = $_GET['id']; }
if (!isset($id)) {$id = 1;}

всеравно ничево

общий код

<?php
$db = mysql_connect ("mysql-23.ukraine.com.ua","","")OR DIE("Не можу підключитися.. ");;
mysql_set_charset ('utf8',$db);
mysql_select_db("",$db)or die(mysql_error());
if (isset($_GET['id'])) {$id = $_GET['id']; }
if (!isset($id)) {$id = 1;}
$result = mysql_query ("SELECT id,title, meta_d, meta_k, description, text, date, adres, view FROM clothes");

$row = mysql_fetch_array ($result);

do {

printf ("<table class='clothes'>

<tr>
<td class='clothes_title'>
<br><p><h1><a href='view_clothes.php?id=%s'>%s</a></h1></p>
<p class='clothes_adds'><h6>Номер: %s</h6></p>
<p class='clothes_adds'><h6>Дата добавления: %s</p>
<p>Адрес: %s</td>
</tr>

<tr>
<td><br><p class='clothes_adds'><h5>%s</h5></p>
<br><p class='clothes_adds'><h6>Просмотров: %s</h6></p></td>
</tr>

</table><br><br>", $row["id"], $row["title"], $row["id"], $row["date"], $row["adres"], $row["description"], $row["view"]);

}

while ($row = mysql_fetch_array ($result));

$update = mysql_query ("UPDATE `view_clothes` SET `view`=`view` +1 WHERE id='$id'",$bd);


?>

Link to comment
Share on other sites

  • 0
вот добавил,

if (isset($_GET['id'])) {$id = $_GET['id']; }
if (!isset($id)) {$id = 1;}

какой кошмар!

А что мешает написать проще?

$id = isset($_GET['id']) ? (int)$_GET['id'] : 1;

и таки ответьте: правильно я понимаю, что у вас в БД тип поля id — int?

Если да, то почему вы ищете соответствие строке?

и, кстати!

$update = mysql_query ("UPDATE `view_clothes` SET `view`=`view` +1 WHERE id='$id'",$bd);

Это что за идентификатор?

Вы всё-таки не весь код привели явно. В приведённой вами части нет строки, где открывается это соединение.

Link to comment
Share on other sites

  • 0
и, кстати!

$update = mysql_query ("UPDATE `view_clothes` SET `view`=`view` +1 WHERE id='$id'",$bd);

Это что за идентификатор?

Проглядела, оно у него в первой строчке там где на конце две точки с запятой.

А вообще удивительно, оно ж должно кучу нотисов, варнингов и ерроров выдавать, неужто ТС не видит их ?

Link to comment
Share on other sites

  • 0

а надо не бездумно менять, а понимать.

в запросе mysql вы что пишете?

where id='$id'

то есть, у вас mysql будет искать значение поля типа int, соответствующее строке '$id'.

Чего в принципе быть не может. Никогда ни при каких условиях не окажется в числовом поле строки. Тип данных не позволит.

Почитайте лучше основы программирования, о типах данных. Больше пользы будет, чем от попова.

В кавычках строки указываются. Числа — без.

Проглядела, оно у него в первой строчке там где на конце две точки с запятой.

неа, там другое, там $db.

Link to comment
Share on other sites

  • 0
то есть, у вас mysql будет искать значение поля типа int, соответствующее строке '$id'.

Чего в принципе быть не может. Никогда ни при каких условиях не окажется в числовом поле строки. Тип данных не позволит.

mysql найдёт, да и php подставит вместо $id число запрос же в двойных ковычках.Просто это не красиво да и сработает чуть медленней.

Link to comment
Share on other sites

  • 0

осталось только дождаться, когда в интерпретатор php встроят модуль искусственного интеллекта.

Тогда он тоже будет понимать, что имелось-то в виду именно это.

mysql найдёт, да и php подставит вместо $id число…

ага.

И это число окажется в кавычках.

Чего мускулу думать прикажете?

Он идеально туп, понимает всё исключительно буквально. У него тоже нет модуля искусственного интеллекта.

Ему сказано, что в кавычках строки, он и будет искать строку с этим числом :)

Link to comment
Share on other sites

  • 0

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

вот код который имею со всеми вашими коментариями

<?php
$db = mysql_connect ("mysql-23.ukraine.com.ua","","")OR DIE("Не можу підключитися.. ");;
mysql_set_charset ('utf8',$db);
mysql_select_db("",$db)or die(mysql_error());
$id = isset($_GET['id']) ? (int)$_GET['id'] : 1;
$result = mysql_query ("SELECT id,title, meta_d, meta_k, description, text, date, adres, view FROM clothes");

$row = mysql_fetch_array ($result);

do {

printf ("<table class='clothes'>

<tr>
<td class='clothes_title'>
<br><p><h1><a href='view_clothes.php?id=%s'>%s</a></h1></p>
<p class='clothes_adds'><h6>Номер: %s</h6></p>
<p class='clothes_adds'><h6>Дата добавления: %s</p>
<p>Адрес: %s</td>
</tr>

<tr>
<td><br><p class='clothes_adds'><h5>%s</h5></p>
<br><p class='clothes_adds'><h6>Просмотров: %s</h6></p></td>
</tr>

</table><br><br>", $row["id"], $row["title"], $row["id"], $row["date"], $row["adres"], $row["description"], $row["view"]);

}

while ($row = mysql_fetch_array ($result));

$update = mysql_query ("UPDATE `view_clothes` SET `view`=`view` +1 WHERE id='$id'",$bd);


?>

Link to comment
Share on other sites

  • 0

Вот как бы сделал я. Во-первых, создаём файл с подключением к БД, чтобы его не полодить везде.

db.php

<?php
$DB=mysqli_connect('localhost', 'login', 'password', 'dbname');
if ($DB===false) die('Database connection failed');

clothes.php

<?php
require_once('db.php');
$q = mysqli_query($DB, "SELECT `id`, `title`, `meta_d`, `meta_k`, `description`, `text`, `date`, `adres`, `view` FROM `clothes`");
while ($r=mysqli_fetch_assoc($q)) {

echo "<table class='clothes'>

<tr>
<td class='clothes_title'>
<br><p><h1><a href='view_clothes.php?id={$r['id']}'>{$r['title']}</a></h1></p>
<p class='clothes_adds'><h6>Номер: {$r['id']}</h6></p>
<p class='clothes_adds'><h6>Дата добавления: {$r['date']}</p>
<p>Адрес: {$r['adres']}</td>
</tr>

<tr>
<td><br><p class='clothes_adds'><h5>{$r['description']}</h5></p>
<br><p class='clothes_adds'><h6>Просмотров: {$r['view']}</h6></p></td>
</tr>

</table><br><br>";

}


mysqli_query ($DB, "UPDATE `view_clothes` SET `view`=`view`+1");

На самом деле, я бы сделал ещё более не так — я бы создал классы, методы для получения нужных данных из БД, разделил бы логику и представление... Но для вас пока так.

Link to comment
Share on other sites

  • 0
осталось только дождаться, когда в интерпретатор php встроят модуль искусственного интеллекта.

Тогда он тоже будет понимать, что имелось-то в виду именно это.

ага.

И это число окажется в кавычках.

Чего мускулу думать прикажете?

Он идеально туп, понимает всё исключительно буквально. У него тоже нет модуля искусственного интеллекта.

Ему сказано, что в кавычках строки, он и будет искать строку с этим числом :)

и всё же есть у него немного интеллекта как и у php когда пишут "Ваша переменная = $name" и mysql найдёт хоть и тип задан как строка.Но времени больше уйдёт как и у php и это не правильно я уже сказал :) Поэтому вовсе он не тупой, а очень гибкий что позволяет "поповцам" делать грубые ошибки.

Edited by gradus
Link to comment
Share on other sites

  • 0
и всё же есть у него немного интеллекта как и у php когда пишут "Ваша переменная = $name" и mysql найдёт хоть и тип задан как строка.Но времени больше уйдёт как и у php и это не правильно я уже сказал :) Поэтому вовсе он не тупой, а очень гибкий что позволяет "поповцам" делать грубые ошибки.

найдите одно отличие (десять не надо):

"Ваша переменная = $name"

"Ваша переменная = '$name'"

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