Autor Zpráva
dadada
Profil *
Ahoj, mám kod na počet shlédnutí článků.

$edit_hod = MySQL_Query("UPDATE clanky SET count = count + 1 WHERE id = '".$_GET["id"]."' ");


když zadám adresu: www.mujweb.cz/index.php?page=clanek&id=3 tak mi to Shlédnutí jede krásně po jednom
jenže když zadám adresu: www.mujweb.cz/clanek/3/ tak mi první shlédnutí napíše 1, další shlédnutí už 12 a takhle se tam přičítá jiný čísla
Str4wberry
Profil
Co je v $_GET["id"] na stránce www.mujweb.cz/clanek/3/?
dadada
Profil *
ID článku (3)
Jozin
Profil
dadada:
Str4wberry tím určitě chtěl říct, jestli to víš jistě... zkus si to vypsat. Případně sem připojit obsah .htaccess
dadada
Profil *
$sql = MySQL_Query("SELECT * FROM clanky WHERE id = '".$_GET["id"]."' ");
    $row = MySQL_Fetch_Array($sql);
$edit_hod = MySQL_Query("UPDATE clanky SET count = count + 1 WHERE id = '".$_GET["id"]."' ");
...
..
.

.htaccess
RewriteRule ^clanek/(.*) index.php?strana=clanek&id=$1
Jozin
Profil
dadada:
A zkoušel sis vypisovat samotné $_GET['id'], aby sis ověřil, že je tam 3? To sem ti psal před chvilkou... Já se domnívám, že tam není 3, ale 3/. Je to jen má domněnka, ale zkus si to vypsat:
<?php
var_dump($_GET);
dadada
Profil *
Ano, máš pravdu je tam skutečně 3/, dá se toho nějak zbavit toho lomítka?
Jozin
Profil
dadada:
Jsou dvě možnosti:
1) upravíš htaccess
2) přetypuješ

Já se nerad hrabu do htaccess, protože tam vyždycky udělám nějakou chybu, takže pro mě by bylo lepší udělat přetypování:
<?php
$id = (int) $_GET['id'];

s tím, že máš i ošetřený vstup, když ti někdo zadá blbost, tak v proměnné $id bude 0, takže stačí testovat $id jestli není větší než nula, tak přesměrovat/vypsat (na) chybu.
dadada
Profil *
pořád mi to přičítává nesmysly
if (isset($_GET["id"])){
$id = (int) $_GET['id'];
$sql = MySQL_Query("SELECT * FROM clanky WHERE id = '$id' ");
    $row = MySQL_Fetch_Array($sql);
$edit_hod = MySQL_Query("UPDATE clanky SET count = count + 1 WHERE id = '$id' ");
...
..
.
echo"$id";
} 

v echu už mi to vypisuje pouze 3
Str4wberry
Profil
Tak asi bude chyba ještě někde jinde.
dadada
Profil *
No ono, ikdyž udělám:
   $edit_num = MySQL_Query("UPDATE clanky SET count = count + 1 WHERE id = '3' ");


tak to počítá nesmysly.
Teď taky nechápu, když sem si odendal z .htaccess, že se mi bude doplňovat na konci lomítko, že se mi pořád doplňuje
RewriteRule ^clanek/(.*) index.php?strana=clanek&id=$1 

zadám www.mujweb.cz/clanek/3 a doplní se mi www.mujweb.cz/clanek/3/
Str4wberry
Profil
Počítá nesmysly. Tím myslíš, že se ve výpisu neobjevují odpovídající čísla, nebo do databáze ukládají neočekávané hodnoty?
dadada
Profil *
Ukládaj se neočekávaný čísla, při každým reloadu stránky by se mělo k číslu přičíst 1, nyní se přičítá pokaždý jiný číslo
Marek88
Profil
dadada:
A nemáš ten dotaz na přičítání v nějakém cyklu? Buď sem dej celý kod nebo zkus dát těsně před dotaz echo "přičítám jedna" nebo třeba:
$dotaz = "UPDATE clanky SET count = count + 1 WHERE id = $id";
echo $dotaz."<br>";
$edit_num = MySQL_Query($dotaz);

Prostě abys viděl, co se tam opravdu děje...
dadada
Profil *
Marek88:
echo mi vypíše UPDATE videos SET count = count + 1 WHERE id = 3
okolojdouci
Profil *
Jakého typu je sloupec id? Tipnul bych, že je to nějaký varchar.
dadada
Profil *
Teďkon to beru z videích, kde taky zaznamenávám shlédnutí.
CREATE TABLE IF NOT EXISTS `videos` (
  `id` int(20) NOT NULL auto_increment,
  `date` text,
  `nazev` text,
  `section` text NOT NULL,
  `url` text NOT NULL,
  `count` varchar(50) NOT NULL,
  `author` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=4 ;
panther
Profil
dadada:
sloupec count je varchar, proč? Má to být int, vkládáš do něj integer.
dadada
Profil *
ano, správně tam má být int, nic méně vliv nato nemá.
Str4wberry
Profil
Jestli chceš problém vyřešit, asi budeš muset uvést více kódu z problematické stránky. Co jsi sem poslal se zdá být v pořádku.
dadada
Profil *
Dobrá, tak etda ještě jednou.
videa.php
<?php 

if (isset($_GET["id"])){
 item("Detail videa");

$id = (int) $_GET['id'];
		
  $sql = MySQL_Query("SELECT * FROM videos WHERE id = '$id' ");
    $row = MySQL_Fetch_Array($sql);
      if (MySQL_Num_Rows($sql)>0){ 
$edit_num = MySQL_Query("UPDATE videos SET count = count + 1 WHERE id = '$id' ");
  
	  $sql_section = MySQL_Query("SELECT * FROM sections WHERE id = '".$row["section"]."' ");
	    $row_2 = MySQL_Fetch_Array($sql_section);
	     $sql_user = MySQL_Query("SELECT * FROM users WHERE id = '".$row["author"]."' ");
         $row3 = MySQL_Fetch_Array($sql_user);
  echo"......";
  echo"<tr><td height=\"20\" width=\"50\"><strong>Zobrazeno:</strong></td><td>".$row["count"]."x</td></tr>";
  echo"......";

} else {  
      echo error("Toto video nebylo nalezeno!"); 
}
}
?>

.htaccess
# nastavení
Options -Indexes

# verze bez www > s www
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^muj-web.com$
RewriteRule (.*) http://www.muj-web.com/$1 [R=301,QSA,L]

# doplneni lomitek na konci adresy
RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteRule ^(.+[^/])$ /$1/ [R=301]

RewriteRule     ^detail-videa/(.*)    index.php?strana=videa&id=$1


struktura tabulky
CREATE TABLE IF NOT EXISTS `videos` (
  `id` int(20) NOT NULL auto_increment,
  `date` text,
  `nazev` text,
  `section` text NOT NULL,
  `url` text NOT NULL,
  `count` int(11) NOT NULL,
  `author` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=4 ;


Jakmile zadám http://www.muj-web.com/index.php?strana=videa&id=3 - přičítá se po jednom
Jakmile zadám http://www.muj-web.com/detail-videa/3/ - přičítá se mi pokaždý jiný číslo
Radovan789
Profil *
Co tohle:
RewriteRule     ^detail-videa/(.*)    index.php?strana=videa&id=$1


Přepsat na:
RewriteRule     ^detail-videa/(.*)/$    index.php?strana=videa&id=$1
dadada
Profil *
Radovan789:
Teďkon to pokaždý přičítá po 2 místo po 1 a to ikdyž dám adresu http://www.muj-web.com/index.php?strana=videa&id=3
Radovan789
Profil *
Člověk prostě na dálku nezjistí včem je problém, vše co máš dělat ti vysvětlil Jozin a Marek88.
Ten co jsem ti poradil v .htaccess v žádném případě nemůže mít vliv na tuhle adresu: http://www.muj-web.com/index.php?strana=videa&id=3

Je potřeba si udělat v kódu pořádek a kontrolovat si vstupy, výstupy a všechny MySQL příkazy.
pcmanik
Profil
dadada:
Mas ten stlpec dufam typu INT, naviac v dotaze nepouzivaj '$id' ale len $id, ak je to teda typu int.
Lamicz
Profil
dadada:
Nauč se prosímtě SQL JOINy. BTW sázím na "velice kvalitní" RS pro herní klany...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0