ugrás a tartalomhoz

$_COOKIE

attiss94 · 2011. Okt. 11. (K), 18.16
Sziasztok!
Jó szokásomhoz híven ismét egy tök egyszerű dologban ütköztem akadályba. Meg szeretnélek titeket kérdeni, hogy szerintetek ez így miért nem jó, és hogy hogyan kell helyesen használni.

<?php
	$jelszo = 'valami';
	
	if(isset($_COOKIE['suti_']))
		$suti = $_COOKIE['suti_'];
	
	if($suti = $jelszo)
	echo "van suti";
	
	else
	
	echo "nincs suti";

?>
 
1

Értékadás?

Poetro · 2011. Okt. 11. (K), 18.26
Most értéket akasz adni a jelszónak a 7. sorban, vagy össze akarod hasonlítani? Mert az első teszed, holott valószínűleg a másodikat szeretnéd. Hallgass Yoda-ra!
2

Az egyenlőséget a ==

Joó Ádám · 2011. Okt. 11. (K), 18.27
Az egyenlőséget a == művelettel vizsgálod, a = értékadás.
3

Köszönöm a válaszokat,

attiss94 · 2011. Okt. 11. (K), 18.53
Köszönöm a válaszokat, humoros hiba...
Tovább írtam a kódomat, ami sajnos nem működik, fogalmam sincs, hogy miért, háromszor átnéztem... (A kód azt szeretné csinálni, hogyha megvan a sütink, akkor írja ki, hogy "van suti", ha pedig nincs, akkor kiadjon egy FORM-ot, ahol be tudjuk írni a kért jelszót, ha jó, akkor csináljon egy sütit, ha pedig nem, akkor írja ki, hogy "Rossz jelszó.").

<?php
	$jelszo = 'valami';
	
	if(isset($_COOKIE['takacs-art']))
		$takacs_art = $_COOKIE['takacs-art'];
	
	if($takacs_art == $jelszo)
	echo "van suti";
	else
	{
?>

<html>
<body>
	<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
		<input type="password" name="suti" maxlength="8">
		<input type="submit" name="submit" value="ok">
	</form>
</body>
</html>

<?php
}

if($_POST['suti'] == $jelszo)
{
$ora = time() + 3600; 
setcookie(takacs-art, $_POST['suti'], $ora); 
}
else{
echo "Rossz jelszó.";}
?>
4

Logikai hiba

Poetro · 2011. Okt. 11. (K), 19.00
Alapból, ha nincs süti, akkor kiírja a űrlapot, és azt hogy Rossz jelszó.. Mivel a POST csak a form elküldése után fog megérkezni. Azaz a $_POST['suti'] addig üres lesz (ráadásul dob egy Notice-t is), ami természetesen nem egyenlő a jelszóval, amíg az űrlap nincs elküldve.
5

Akkor mi lenne a

attiss94 · 2011. Okt. 11. (K), 19.10
Akkor mi lenne a megoldás?
(Semmi más ötletem nincs a dologra, abból, amit leírtál leszűrtem a problémát, de nem tudom, hogy mi lenne rá a megoldás...)
6

Kitaláltam, hogy mi lenne a

attiss94 · 2011. Okt. 11. (K), 20.01
Kitaláltam, hogy mi lenne a helyes megoldás, köszönöm a segítséget, de még mindig nem szeretne teljesen működni... Kinézetre jól működik, lefut minden, és hivatalosan a sütiket is létrehozza, de amikor megnyitom az index.php-t ismét, ismét továbbít az 1.php-hez, tehát nincsenek eltárolva a kellő sütik... Nem tudod, hogy mi lehet a baja?

index.php:

<?php
	$jelszo = 'valami';
	
	if(isset($_COOKIE['takacs-art']))
		$takacs_art = $_COOKIE['takacs-art'];
	
	if($takacs_art == $jelszo)
	echo "A süti létezik.";
	else
	{ header("Location: 1.php"); }

?>
1.php:

<html>
<body>
	<form action="2.php" method="post">
		<input type="password" name="suti" maxlength="8">
		<input type="submit" name="submit" value="ok">
	</form>
</body>
</html>
2.php:

<?php
$jelszo = 'valami';

if($_POST['suti'] == $jelszo)
	{
		$ora = time() + 3600; 
		setcookie(takacs-art, $_POST['suti'], $ora); 
		echo "A süti létrejött.";
	}
	else
		{
			echo "Rossz jelszó.";
		}
?>
7

Kapcsold be

Poetro · 2011. Okt. 11. (K), 20.21
Kapcsold be a Notice-okat kérlek. Akkor látni fogod, hogy a takacs-art kivonásnak nincs értelme (ugye az eredménye 0 lesz, ezért egy olyan sütit állítasz be, aminek a kulcsa 0). Valamint természetesen meg lehet valósítani az előzőt egy fájlban is.
<?php
$jelszo = 'valami';
$form_kell = TRUE;
$uzenet = '';

if (isset($_COOKIE['takacs-art']) && $_COOKIE['takacs-art'] == $jelszo) {
  $form_kell = FALSE;
  $uzenet = "A süti létezik.";
}
else if (!empty($_POST)) {
  if (isset($_POST['suti']) && $_POST['suti'] == $jelszo) {
    $ora = time() + 3600;
    setcookie('takacs-art', $_POST['suti'], $ora);
    $form_kell = FALSE;
    $uzenet = "A süti létrejött.";
  } else {
    $uzenet = "Rossz jelszó.";
  }
}
?>
<!DOCTYPE html>
<html>
<head>
  <title>Page Title</title>
</head>
<body>
  <?php if ($uzenet) : ?>
  <div class="uzenet"><?php echo $uzenet; ?></div>
  <?php endif; ?>
<?php if ($form_kell) : ?>
  <form action="" method="post">
    <input type="password" name="suti" maxlength="8" />
    <input type="submit" name="submit" value="ok" />
  </form>
<?php endif; ?>
</body>
</html>
8

Mit értesz az alatt, hogy

attiss94 · 2011. Okt. 11. (K), 20.42
Mit értesz az alatt, hogy kapcsoljam be a Notice-okat?
Megpróbáltam lefuttatni a kódot, amit írtál, de nem csinál semmit (nagy fehérség).
9

Eredeti

Poetro · 2011. Okt. 11. (K), 21.21
Az eredeti kódot nézd, ne a színezettet (empty duplikáció). Nincs bekapcsolva nálad semmilyen hibajelzés, ami rossz. Kapcsold be a hibák kijelzését.