Pereiti prie turinio

PHP - nesigauna balsavimas su cookies


Rekomenduojami pranešimai

Sveiki, taigi kuriu naują projektą ir atsitiko tokia bėda. Sukūriau balsavimas.php su cookies ir padariau kad eitų balsuoti tik kas 6 valandas.

Bet deja šis kodas veikia tik localhostui, o paprastam kitokiam ip'ui neveikia. Net nuėjus ant savo pc į sukurtą xampp serverį nerodo neeina balsuoti, tinka tik local ip.

Kažkas turėtų būti bėdoje su ip tikrinimu, nors ip išgauna, nes parašius echo "$vartotojo_ip" jį puikiausiai rodo.

Galite įsitikinti tarp Liveforspeed.lt

BEJE: naudoju us.lt hostingą. Ir kažkas sakė, kad neišgauna duomenų mano hostingas, nors database puikiausiai rodo kas įdėjo serverį.

KODAS:

<?php
  ob_start();
  include 'mysql.php';
  $id = addslashes($_GET['id']);

  if (isset($id))
  {
     $get = mysql_query("SELECT * FROM serveriai WHERE id=$id");
     if ((mysql_num_rows($get)) < 1) { echo "Tokio serverio nėra."; }
     else
     {
        if(isset($_COOKIE["balsavo"])) { echo "Balsuoti galima tik kas 6 valandas."; }
        else
        {
           while($row=mysql_fetch_assoc($get))
           {
              $balsu = $row['balsai'];
           }
           $balsas = $balsu+1;
           mysql_query("UPDATE serveriai SET balsai='$balsas' WHERE id=$id");
           $expire=time()+60*60*6;
           setcookie("balsavo", "true", $expire);
           echo "Jusu balsas sekmingai pridetas.";
        }
     }
  }
  else
  {
     echo "Tokio serverio nėra.";
  }

?>

Redagavo doncatas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

tai jei gali pasakyk geresnį variantą, nes aš su php dar tik mokaus. ačiū iš anksto :)

 

Irasai duomenu baze :

IP adresas

Laikas (timestamp)

 

Poto su php tikrini jei timestamp+6val is duomenu bazes yra mazesnis uz time() t.y esama laika tuomet leidi balsuot o jei didesnis neleidi ir viskas issaugai balsa tam paciam formate ir poto vel paimi is duombazes last result pagal ta ip ir kartoji ta pati tikrinima.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

taigi vėl rašau...

su if nesigaus padaryti balsavimo, nes neeis padaryti, kad balsuot eitų kas 6 valandas... pvz jei prabalsuos 23:00, tai naują dieną vėl teks balsuot. o jei reiks atskirai į if paimti dienas, tai tada ir mėnesius ir metus atskirai paimt. negi nėr paprastesnio būdo...

 

cron jobai ir ip checkas. 

o šito comment išvis nesupratau :(

Nuoroda į pranešimą
Dalintis kituose puslapiuose

taigi vėl rašau...

su if nesigaus padaryti balsavimo, nes neeis padaryti, kad balsuot eitų kas 6 valandas... pvz jei prabalsuos 23:00, tai naują dieną vėl teks balsuot. o jei reiks atskirai į if paimti dienas, tai tada ir mėnesius ir metus atskirai paimt. negi nėr paprastesnio būdo...

 

cron jobai ir ip checkas. 

o šito comment išvis nesupratau :(

 

if(paskutinio_balsavimo_laikas < (time() - 60*60*6)) {
 galima balsuoti
} else {
 paskutinis balsavimas buvo maziau nei pries 6 valandas
}

laikas nurodomas UNIX timestamp.

 

Taip Jums netinka?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

sveiki ir vėl aš rašau. pasakysiu dabar problemą, kurios mes nemokam ištaisyt.

 

$laikas = date('YmdHi');
$db_laikas = $row['laikas'];
if($db_laikas + 600 <= $laikas)

 

pagrinde, ko nesuprantu, tai kaip pridėt 6h, nes pvz balsavo: 21:00 + 6:00 = 27:00

jei darau kad atimt 6val., tada 1:00 - 6:00 = -5:00

 

pridedu, kodą gal kas bus labai geras ir nepatingės pataisyt :)

 

<?php
ob_start();
//prisijungimas prie mysql
include "mysql.php";

//vartotojo ip ir laikas
$vartotojo_ip = $_SERVER['REMOTE_ADDR'];
$laikas = date('YmdHi');

//isgaunu mysql duomenis
$gauti_duomenis = mysql_query("SELECT * FROM balsavimas WHERE ip=$vartotojo_ip");
$isviso = mysql_num_rows($gauti_duomenis);
if(mysql_num_rows($gauti_duomenis))
{
	$db_ip = $row['ip'];
	$db_laikas = $row['laikas'];
}


if($isviso == 1)
{
	if($db_laikas + 600 <= $laikas)
	{
		if(isset($id))
		{

			$id = addslashes($_GET['id']);

			$gauti_id = mysql_query("SELECT * FROM serveriai WHERE id=$id");
			if((mysql_num_rows($gauti_id)) < 1)
			{
			echo "Norint balsuoti, turit pasirinkti serverį, kuriam skirsite balsą!";
			}
			else
			{
				while($row = mysql_fetch_assoc($gauti_id))
				{
					$balsai = $row['balsai'];
				}

				$write = mysql_query("UPDATE balsavimas SET laikas='$laikas' WHERE ip=$vartotojo_ip");
				$balsuoti = $balsai + 1;
				mysql_query("UPDATE serveriai SET balsai='$balsuoti' WHERE id=$id");
				echo "Tavo balsas priimtas! šis serveris jau turi <b>$balsuoti</b> balsų!<br /> Kitą kartą balsuoti galėsi po 6 valandų!";
			}

		}
		else
		{
		echo "Norint balsuoti, turit pasirinkti serverį, kuriam skirsite balsą!";
		}

	}
	else
	{
		echo "Dar nepraėjo 6 valandos nuo praeito balsavimo!";
	}

}
else
{
	$irasyti_balsuotoja = mysql_query("INSERT INTO balsavimas VALUES ('$laikas','$vartotojo_ip')");
	$balsuoti = $balsai + 1;
	$prideti_balsa = mysql_query("UPDATE serveriai SET balsai='$balsuoti' WHERE id='$id'");

	echo "Jūsų balsas sėkmingai pridėtas! Serveris dabar turi <b>$balsuoti</b> balsų!";

}
?>

Nuoroda į pranešimą
Dalintis kituose puslapiuose

add_slashes nėra pats geriausias pasirinkimas apsaugai nuo SQL injekcijos. Geriausia naudoti mysql_real_escape_string.

Laiką saugok UNIX timestamp'u, t.y. sekundėmis, praėjusiomis nuo 1970 sausio 1 d. (jį galima gauti tiesiog su funkcija time). Pakankamai universalus formatas ir nesusidursi su savo minėtomis problemomis.

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...