Рейтинг система за оценяване

worda

New member
Здравейте , пробвах да си създам рейтинг система но не успях . Мисълта ми е следната, искам даден виц да се оценява от 1 ип само веднъж , данните да се записват в базата данни . След като е гласувано от това ип , на мястото на възможността за оценяване да се показва средно аритметичното от всички гласове .
Благодаря предварително !
 
Re: Рейтинг система за оценяване

Здравейте , пробвах да си създам рейтинг система но не успях . Мисълта ми е следната, искам даден виц да се оценява от 1 ип само веднъж , данните да се записват в базата данни . След като е гласувано от това ип , на мястото на възможността за оценяване да се показва средно аритметичното от всички гласове .
Благодаря предварително !

Кое по-точно не успя да направиш?
 
За: Re: Рейтинг система за оценяване

За: Re: Рейтинг система за оценяване

Кое по-точно не успя да направиш?
Записването на данни в базата данни от 1 ип само веднъж , т.е. 1 ип може да гласува за виц само веднъж.
 
За: Рейтинг система за оценяване

За: Рейтинг система за оценяване

1. $ip = $_SERVER['REMOTE_ADDR'];
Слагаш си променлива, коят да взема IP адреса на посетителя. И после слагаш един IF, ако IP-то съществува какво да се случи (в случая да му изкара грешка/надпис, че вече е гласувал) и после ELSE ако не съществува - да добави отговора му към DB:
2. if ($this->VотеExists($ip)) {

EDIT: Освен отговора - да му добави и IP-то във вече гласувалите. 🙂
 
За: Рейтинг система за оценяване

За: Рейтинг система за оценяване

1. $ip = $_SERVER['REMOTE_ADDR'];
Слагаш си променлива, коят да взема IP адреса на посетителя. И после слагаш един IF, ако IP-то съществува какво да се случи (в случая да му изкара грешка/надпис, че вече е гласувал) и после ELSE ако не съществува - да добави отговора му към DB:
2. if ($this->VотеExists($ip)) {

EDIT: Освен отговора - да му добави и IP-то във вече гласувалите. 🙂
Колегите от bgdev ми помогнаха и успях да стигна до следното . Но след като го приложа във index файла на даден виц данните не се записват в базата данни....
 
За: Рейтинг система за оценяване

За: Рейтинг система за оценяване

Много постна информация даваш, за да очакваш адекватна помощ.

За да се запише нещо в DB трябва преди това да си се логнал там (чрез друга команда). Това направено ли е?
 
За: Рейтинг система за оценяване

За: Рейтинг система за оценяване

Много постна информация даваш, за да очакваш адекватна помощ.

За да се запише нещо в DB трябва преди това да си се логнал там (чрез друга команда). Това направено ли е?
PHP:
<?php
$db = mysql_connect("localhost","user","pass");
			if(!$db) die("Error connecting to MySQL database.");
			mysql_select_db("user" ,$db);
$sql2 = mysql_query('SELECT * FROM rating GROUP by id_urok');
$rowa = mysql_fetch_array($sql2);
$ipto = $rowa['ip'];
$ipa = $_SERVER['REMOTE_ADDR'];
$idurok = $rowa['id_urok'];
if($ipto==$ipa and $idurok==($this->item->id)) echo 'veche ste glasuvali';
if($ipto!=$ipa and $idurok==($this->item->id))
echo '<form action="http://smeshnoto.eu/вицове/'.$this->item->category_alias.'/'.$this->item->id.'-'.$this->item->alias.'" method="post">
				<input type="text" name="id_urok" maxlength="50" value="'.$this->item->id.'" hidden="hidden"/>
				<input type="text" name="ip" maxlength="50" value="'.$ipa.'" hidden="hidden"/>
			<p>
				<label for="rating">Оценка</label>
				<input type="radio" name="rating" value="1"/> 1 
				<input type="radio" name="rating" value="2"/> 2 
				<input type="radio" name="rating" value="3"/> 3 
				<input type="radio" name="rating" value="4"/> 4 
				<input type="radio" name="rating" value="5"/> 5 
			</p>
			<input type="submit" name="formSubmit" value="Submit" />
		</form>';?>
ето това направих ...
 
За: Рейтинг система за оценяване

За: Рейтинг система за оценяване

Точен код ме мързи да пиша... ама ще го кажа така:

Ти проверяваш DB за съвпадение на IP-тата - ако има съвпадение - показва: "Вече сте гласували". Ако няма съвпадение - показва формата за гласуване. Ок. А на тая форма къде са Й функциите? Какво прави тя (освен да се покаже)? :-] От там е проблема - не си описал какво да прави формата след натискане на Submit.
 
За: Рейтинг система за оценяване

За: Рейтинг система за оценяване

Точен код ме мързи да пиша... ама ще го кажа така:

Ти проверяваш DB за съвпадение на IP-тата - ако има съвпадение - показва: "Вече сте гласували". Ако няма съвпадение - показва формата за гласуване. Ок. А на тая форма къде са Й функциите? Какво прави тя (освен да се покаже)? :-] От там е проблема - не си описал какво да прави формата след натискане на Submit.
Ами това не е целия код , преди този има следното :
PHP:
<?php
	if($_POST['formSubmit'] == "Submit") 
    {
		$errorMessage = "";
		$varIP = $_POST['ip'];
		$varRating = $_POST['rating'];
		$varIDUrok = $_POST['id_urok'];

			$db = mysql_connect("localhost","user","pass");
			if(!$db) die("Error connecting to MySQL database.");
			mysql_select_db("user" ,$db);
			$sql = "INSERT INTO rating (ip,id_urok,rating) VALUES (".
							PrepSQL($varIP) . ", " .
							PrepSQL($varIDUrok) . ", " .
							PrepSQL($varRating) . ")";
			mysql_query($sql);
			
			exit();
	}
            
    function PrepSQL($value)
    {
        // Stripslashes
        if(get_magic_quotes_gpc()) 
        {
            $value = stripslashes($value);
        }

        // Quote
        $value = "'" . mysql_real_escape_string($value) . "'";

        return($value);
    }
?>
 
За: Рейтинг система за оценяване

За: Рейтинг система за оценяване

Значи
1. Препоръчвам да съхраняваш IP адреса като long (integer) това става с една функция ip2long
2. Направи уникален ключ в базата данни, които да съдържа полетата IP-to и ID-то на вица. По този начин ще предотвратиш повторно гласуване при каквито и да е обстоятелства.

ip2long — Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address
int ip2long ( string $ip_address )
Това ще ти оптимизира и базата данни.. много по лесно е да се търси по Integer отколкото по String.. И по малко ресурси се използват и е по-бързо. Също така може да сложиш и Index на Ip-to

Поздрави и успех!
 

Back
Горе