Pěkný den,
prosím o pomoc, mohl by mi někdo (pomoct) napsat PHP script pro hodnocení článků?
Sám to napsat nedokážu a strýček Google mi taky nepomohl.
Předem díky, Petr
Fórum › PHP
Hodnocení článků
To Petr : pocuj, aj ked je toto sice poradna, a nie "urob mi zadarmo", velmi radi by sme ti pomohly (aspon niektory urcite), trochu viac sa pricin, ukaz nam stranku kde to potrebujes, aku pouzivas db... ukaz aj tu cast kodu.... a urcite sa dopracujeme k tvojej spokojnosti... :smile1:
Že ti Google nepomohl? Co třeba tohle http://php.about.com/od/finishedphp1/ss/rating_script.htm nebo tohle http://www.roscripts.com/AJAX_PHP_rating_script-145.html ? Na google je 3 550 000 výsledků na dotaz PHP rating script :smile4:
Dobře :o) , tak znova.
Na svém webu www.montyho.cz bych rád dal možnost ohodnotit články, chci použít MySQL databázi.
možnost a)
-každý článek by měl jeden svůj řádek v DB
-pokud by byl ohodnocen poprvé řádek by se vytvořil, jinak by se přepočítal již zapsaný
-sloupce DB: id_clanku, hodnoceni_pocet, hodnoceni_prumer
-do cookies by se zapsalo jestli uživatel již hodnotil (netuším jak napsat)
-zápis nového hodnocení:
Kontrola jestli už uživatel nehlasoval.
$hodnoceni = $get['hodnoceni_prumer']
$pocet = $get['hodnoceni_pocet']
$hodnoceni_prumer = ($hodnoceni * $pocet + $nove_hodnoceni) / ($pocet + 1)
Zapsat do DB výsledek.
Přičíst v DB k počtu hodnocení jedničku.
možnost b)
-každé hodnocení by mělo svůj řádek v DB
-na řádku by bylo zapsáno: id_clanku, ip_uzivatele, hodnoceni
-ve scriptu pro výpis by se vytáhla data s určenou ID s každým načteným řádkem by se do
$pocet_hodnoceni += 1
a do $hodnoceni += $get['hodnoceni']
nakonec by se $hodnoceni vydělilo $pocet_hodnoceni.
-při zápisu by se zkontrolovaly řádky s danou id_clanku a pokud by nebyl nalezen radek se stejnou IP jako má uživatel pokračovalo by se normálním vytvořením nového řádku DB
formulář:
<form action="" method="GET">
Ohodnotit (jako ve škole):
1 <input type="radio" name="hodnoceni" value="jedna">
2 <input type="radio" name="hodnoceni" value="dve">
3 <input type="radio" name="hodnoceni" value="tri">
4 <input type="radio" name="hodnoceni" value="ctyri">
5 <input type="radio" name="hodnoceni" value="pet">
<button name="ohodnot" value="ohodnot" type="submit" Poslat>Poslat</button>
</form>
Doufám že to bude stačit stačí slovo a doplním.. mockrát děkuji :smile1:
nejak takto by to mohlo byt:
vytvorit novu tabulku ipecky s jednym stlpcom ipecka - VARCHAR(15)
a pridat do tabulky s clankami nove 2 stlpce pocet_hlasovani INT(10) sucet_hlasovania int(10)
<?php
if (($_GET['hodnoceni']>=1)and($_GET['hodnoceni']<=5)and(isset($_GET['id_clanku']))) {
$id_clanku=intval($_GET['id_clanku']); // resp. lepsie zabezpecenie
$kontrola=mysql_query("SELECT * FROM ipecky WHERE ipecka='".$_SERVER['REMOTE_ADDR']."'");
if (mysql_num_rows($kontrola)==0) {
mysql_query("INSERT INTO ipecky (ipecka) VALUES ('".$_SERVER['REMOTE_ADDR']."')");
mysql_query("UPDATE nazov_tabulky_s_clankami SET pocet_hlasovani=pocet_hlasovani+1, sucet_hlasovania=sucet_hlasovania + $_GET['hodnoceni'] WHERE nazov_stlpca_s_id_clanku='".$id_clanku"'");
} else {
echo "Už si hlasoval !";
}
}
$hodnotenie=mysql_query("SELECT * FROM nazov_tabulky_s_clankami WHERE nazov_stlpca_s_id_clanku='".$premenna_s_ID_clankom_z_db."'");
$hodnotenie_data=mysql_fetch_assoc($hodnotenie);
echo "Hodnotenie: ".rand($hodnotenie_data['sucet_hlasovania'] / $hodnotenie_data['pocet_hlasovani'],0).", Hlasovalo: ".$hodnotenie_data['pocet_hlasovani']."";
?>
<form action="" method="GET">
Ohodnotit (jako ve škole):
1 <input type="radio" name="hodnoceni" value="1">
2 <input type="radio" name="hodnoceni" value="2">
3 <input type="radio" name="hodnoceni" value="3">
4 <input type="radio" name="hodnoceni" value="4">
5 <input type="radio" name="hodnoceni" value="5">
<input type="hidden" name="id_clanku" value="<?php echo $premenna_s_ID_clankom_z_db; ?>" />
<button name="ohodnot" value="ohodnot" type="submit" Poslat>Poslat</button>
</form>
ale neskusal som :)
vidis.. to ma nenapadlo v rychlosti... urob si do ipecky este jeden stlpec s id_clanku a do SELECT-u pridaj podmienku AND id_clanku='".$id_clanku."'
Ahoj,
<?php
if (($_GET['hodnoceni']>=1)and($_GET['hodnoceni']<=5)and(isset($_GET['id']))) {
$id_clanku=intval($_GET['id']); // resp. lepsie zabezpecenie
mysqli_connect
('localhost', ' ', ' ', ' ', 3306);
$kontrola=mysql_query("SELECT * FROM hodnoceni_ip WHERE id_clanku='".$id_clanku."' AND ipecka='".$_SERVER['REMOTE_ADDR']."'");
if (mysql_num_rows($kontrola)==0) {
mysql_query("INSERT INTO hodnoceni_ip (ipecka) VALUES ('".$_SERVER['REMOTE_ADDR']."')");
mysql_query("UPDATE hodnoceni SET pocet_hodnoceni=pocet_hodnoceni+1, soucet_hodnoceni=soucet_hodnoceni + $_GET['hodnoceni'] WHERE id_clanku='".$id_clanku"'");
}
else {
echo "Už si hlasoval !";
}
}
$id_clanku=$_GET['id'];
$hodnotenie=mysql_query("SELECT * FROM hodnoceni WHERE id_clanku='".$id_clanku."'");
$hodnotenie_data=mysql_fetch_assoc($hodnotenie);
echo "Hodnotenie: ".rand($hodnotenie_data['soucet_hodnoceni'] / $hodnotenie_data['pocet_hhodnoceni'],0).", Hlasovalo: ".$hodnotenie_data['pocet_hodnoceni']."";
?>
<form action="" method="GET">
Ohodnotit (jako ve škole):
1 <input type="radio" name="hodnoceni" value="1">
2 <input type="radio" name="hodnoceni" value="2">
3 <input type="radio" name="hodnoceni" value="3">
4 <input type="radio" name="hodnoceni" value="4">
5 <input type="radio" name="hodnoceni" value="5">
<input type="hidden" name="id" value="<?php $content=$_GET['id']; echo($content); ?>" />
<button name="ohodnot" value="ohodnot" type="submit" Poslat>Poslat</button>
</form>
Chybka:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/free/tym.cz/y/yxc/root/www/stranka.inc on line 21
Prosím o radu
alebo
mysql_query("UPDATE hodnoceni SET pocet_hodnoceni=pocet_hodnoceni+1, soucet_hodnoceni='".(soucet_hodnoceni + $_GET['hodnoceni'])."' WHERE id_clanku='".$id_clanku."'");
Ahoj
$itemid = $_POST["item_id"];
$rating = intval($_POST["rating"]);
if(($rating < 1)||($rating>5)) {
mysqli_query($db,"INSERT INTO ratings(item_id,rating) VALUES ('$itemid',$rating)");
}
Takle vypadá kód pro zápis.. v čem je chyba? Když místo promněnných napíšu hodnoty, tak se to do DB zapíše ale takto to vloží jen prázdné řádky..
já se hlavně divím, že to vubec funguje, když máš špatně podmínku. mělo by být if ($rating => 1 && $rating <= 5)
srr, samozrejme to byt $rating >= 1 && $rating <= 5
To Petr : vkladaj premenne do jednoduchych uvodzoviek ' teda '".$premenna."' ... len pre istotu :)
Jak prosím zabezpečit proti SQL injection? Fungují jen mysqli příkazy.. díky
<?php
//připojení k db
$db = mysqli_connect(' ', ' ', ' ', ' ');
if (!$db) {
echo "Spojení s DB se nepodařiloilo";
exit();
}
$id_clanku = $_POST["id_clanku"];
//zapsani
$kontrola=mysqli_query($db, "SELECT * FROM hodnoceni WHERE id_clanku='".$id_clanku."' AND ip='".$_SERVER['REMOTE_ADDR']."'");
if (mysqli_num_rows($kontrola)==0) {
$hodnoceni = intval($_POST["hodnoceni"]);
if($hodnoceni >= 1 && $hodnoceni <= 5)
mysqli_query($db,"INSERT INTO hodnoceni(id_clanku,hodnoceni,ip) VALUES ('".$id_clanku."',".$hodnoceni.",'".$_SERVER['REMOTE_ADDR']."')");
}
else {
echo "Už si hlasoval !";
}
$id_clanku=$_GET['id'];
//vypsani
$result = mysqli_query($db,"SELECT id_clanku,AVG(hodnoceni) FROM hodnoceni WHERE id_clanku = '".$id_clanku."' GROUP BY id_clanku");
while($values = mysqli_fetch_array($result)){
$id_clanku = $values[0];
$hodnoceni = number_format($values[1], 2, '.', '');
echo "Hodnocení: $hodnoceni, ";
}
if(!$result)
echo"Ještě nikdo nehodnotil, buďte první!";
//spočítání počtu hodnocení
$pocet_data = 0;
$pocet = mysqli_query($db,"SELECT * FROM hodnoceni WHERE id_clanku='".$id_clanku."'");
while($values = mysqli_fetch_array($pocet)){
$pocet_data += 1;
}
echo" Počet hodnocení: $pocet_data";
?>
<form method="POST" action="">
<b>Ohodnoťtě</b>(5 - nejlepší):
<input type="hidden" name="id_clanku" value="<?php $content=$_GET['id']; echo($content); ?>" />
1 <input type="radio" name="hodnoceni" value="1">
2 <input type="radio" name="hodnoceni" value="2">
3 <input type="radio" name="hodnoceni" value="3">
4 <input type="radio" name="hodnoceni" value="4">
5 <input type="radio" name="hodnoceni" value="5">
<input type="submit" value="Poslat">
</form>
$kontrola=mysqli_query($db, "SELECT * FROM hodnoceni...
Je zbytečné "vytahovat" všechna data. Nestačil by pouze počet? SELECT COUNT(*) FROM....
To stejné u "spočítání počtu hodnocení"
Petr napsal:
Jak prosím zabezpečit proti SQL injection? Fungují jen mysqli příkazy.. díky
ak su data vkladane uzivatelmi iba cisla (resp. ich vkladas podla $_GET cez link a podobne), kontroluj ich s is_numeric(); a utocnik nema sancu
To Zdeny :
v tomto pripade mas urcite pravdu, no niekedy je ovela efektivnejsie zistit pocet udajov cez mysql_num_rows();
(on sa pokusil o nieco podobne cez cyklus no je to zbytocne)
To Petr :
mysql_real_escape_string();
http://sk2.php.net/manual/en/function.mysql-real-escape-string.php
To Petr :
hmm zvlastne, takcitak, nazvy funkcii su takmer identicke az na to "i" .. mas to iste aj s mysqli
mysqli_real_escape_string();
http://sk2.php.net/manual/en/mysqli.real-escape-string.php
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Hodnocení článků — založil Jimosona
Hodnocení SŠ - Praha — založil FuzzyWuzzyCZ
Hodnocení e-shopu — založil xanteacz
Hodnocení úkolů — založil dinkin
Moderátoři diskuze