Ocenianie artykułów przez gosci

0

Witam.

Jak na stronie mógłbym udostępnić ocenianie artykułów dla gości. Ale tak żeby każdy mógł ocenić tylko raz jeden artykuł. Myślałem o cookie ale wtedy jak ktoś usunie bądź będzie pracował w trybie prywatnym będzie mógł oceniać cały czas ten sam artykuł. Z drugiej strony można zrobić tabele w bazie danych z ip i tematem który był oceniany z tego ip ale nie wiem czy to nie przerost formy nad treścią :)
Proszę o jakąś radę bo bez sensy wywarzać otwarte drzwi ;).

0

Ja zrobiłbym tabelę i zapisywał IP.
To chyba najprostsza, a zarazem najpewniejsza metoda.

0

wg. mnie goście nie powinni mieć prawa głosu, ale opcja z ciasteczkami jest zła, a z IP rozsądna.

0

No to zabrałem się za robotę i mam problem :) Bo po naciśnięciu na obrazek

<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="1" id ="1" class="glos"/>

Strona się przeładowuje ale wartość $_POST['glos'] nie jest ustawiony. Jak zmieniłem typ z image na submit to działało ale wtedy mam przycisk zamiast obrazka :).

<script type="text/javascript">
		function stars_mouseon(x){
			x.src="skrypty_php/ocena/star_mouseon.gif"
			i=x.id
			for(i; i>0; i--)
			{
				a=document.getElementById(i);
				a.src="skrypty_php/ocena/star_mouseon.gif";
			}
		}
		function stars_mouseoff(x){
			x.src="skrypty_php/ocena/star_mouseoff.gif"
			i=x.id
			for(i; i>0; i--)
			{
				a=document.getElementById(i);
				a.src="skrypty_php/ocena/star_mouseoff.gif";
			}
		}
</script>

<?php
	db_connect();
	
	$IP = $_SERVER['REMOTE_ADDR'];
	// Pobieramy adres aktualnej strony bez nazwy domeny
	$adres = $_SERVER['REQUEST_URI'];
	// Jeżeli został wciśnięty przycisk "wyślij"
	if (isset ($_POST['glos'])) {
		echo'COS TAM asfuhasfhauipshd uipshdui hpishdfip hspdoj ';
	}
	
	mysql_close();
?>
<!-- Gwiazdki -->
<div id="ocena_artykulu">Oceń artykuł: </br>
	<form action="<?php echo ($adres); ?>" method="post">
		<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="1" id ="1" class="glos"/>
		<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="2" id ="2" class="glos"/>
		<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="3" id ="3" class="glos"/>
		<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="4" id ="4" class="glos"/>
		<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="5" id ="5" class="glos"/>
		<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="6" id ="6" class="glos"/>
		<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="7" id ="7" class="glos"/>
		<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="8" id ="8" class="glos"/>
		<input type="image" onmouseover="stars_mouseon(this)" onmouseout="stars_mouseoff(this)" src="skrypty_php/ocena/star_mouseoff.gif" name="glos" value="9" id ="9" class="glos"/>
	</form>
</div>
0

najprościej - użyj css i wywal inputom ramki, paddingi, ustaw wysokość i szerokość oraz tło.

mnie nie dziwi, że klikanie w obrazki nie submituje formy ;)

i mała uwaga:
atrybuty id NIE MOGA ZACZYNAC SIE OD CYFRY (a więc i być samą cyfrą).

mógłbyś zrobić też coś takiego:

<form action="<?php echo ($adres); ?>" method="post" id="glosowanie">
  <input type="hidden" name="glos" value="" id="glos" />
  <!-- tu te Twoje obrazki, i każdy z nich niech ma onclick="glosuj(this);" i niech **nie** ma atrybutu name w ogóle -->
  <!-- dodatkowo value jest niepoprawnym atrybutem dla img, lepiej wstaw "data-value" -->
  <!-- z value też będzie działać, ale lepiej uczyć dobrych nawyków -->
</form>
function glos(obj) {
  var value =  obj.getAttribute("data-value");
  document.getElementById('glos').value=value;
  document.getElementById('glosowanie').submit();
}

Ale problem aż prosi się o użycie ajaxa i ew zastosowanie fallbacka w wersji takiej jaką podałem Ci jako pierwszą sugestię - bo podziała bez javascriptu (tylko podświetlenie gwiazdek też byłoby do przeróbki).

1 użytkowników online, w tym zalogowanych: 0, gości: 1