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.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

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