PHP - site temasını değiştirmek için bir damla aşağı liste kullanma

4 Cevap php

Kullanıcıların site için bir tema seçebilirsiniz bir damla aşağı liste var. Tek sorun, ben onlar "Uygula" tuşuna bir kez düzgün bir tema yüklemek için nasıl emin değilim, olduğunu. Ben PHP için yeni duyuyorum. Ben GET kullanırsanız, bu bir akım sayfası aracılığıyla değişkenleri geçmek ve URL'nin sonuna ekleyebilirsiniz biliyorum. Ben gerçekten önlemek istiyorum. Peki, ben nasıl tema güncellemek için GET kullanarak önleyebilirsiniz, benim sorum sanırım? Teşekkür ederim.

Burada doğru temayı yüklemek için benim kod:

<?php
$stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red');
if(isset($_GET['theme']) && in_array($_GET['theme'], $stylesArr)) {
	$style = $_GET['theme'];
    setcookie("theme", $style, time()+(60*60*24*30));
} else {
    if(isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $stylesArr)) {
        $style = 'CSS/' . $_COOKIE['theme'] . '.css';
    } else {
        $style = 'CSS/Default.css';
    }
}
?>

İşte temayı seçmek benim açılan aşağı listesi:

<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
<p>Site Theme:
<select name="theme">
<option value="Default">Default</option>
<option value="Black">Black</option>
<option value="Pink">Pink</option>
<option value="Green">Green</option>
<option value="Red">Red</option>
</select>
<input type="submit" value="Apply" />
</form>

4 Cevap

$ _POST Için $ _GET Swap. Ve bana olsaydı ben diğer sayfayı yeniden yükleyin, sonra ayrı bir dosya, örneğin theme_manager.php sonra bir oturumda ya da çerez saklamak için göndermek istiyorum ya

header("Location: xxxxx.php");
exit(); # exit is important as page needs to exit and reload for cookie to work.

Umarım ki olur!

Burada ne ihtiyaç vardır:

choose_style.php
<?
$stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red');
if(isset($_COOKIE['theme']) && in_array($_COOKIE['theme'], $stylesArr)) {
    $style = 'CSS/' . $_COOKIE['theme'] . '.css';
} else {
    $style = 'CSS/Default.css';
}
?>
<link rel="stylesheet" href="<? echo $style; ?>">

## drop down code with form posting to theme_switch.php

theme_switch.php

<?
$stylesArr = array('Default', 'Black', 'Pink', 'Green', 'Red');
if(isset($_POST['theme']) && in_array($_POST['theme'], $stylesArr)) {
    $style = $_POST['theme'];
    setcookie("theme", $style, time()+(60*60*24*30));
}

header("Location: choose_style.php"); # this will reload your theme selector
exit(); # this will make sure the cookie gets loaded next time.

?>

Sen sadece php kod tüm $ _GET için $ _POST değiştirmek, böylece hiçbir şey url eklenecek, GET değil, formunuz için yöntem olarak POST kullanıyor.

Peki, yöntem = "post" doğru adım, sanırım.

Eğer var PHP kod benim alarm zilleri Ancak, kapalı gitmek yapar. Sen, $ _GET, $ _POST $ _COOKIE vb kullanıcı girişi güvenmiyor gerekir! Asla!

Peki ben öneririm olduğunu:

  • Sunulan formdan veri almak için $ _POST kullanın
  • Make a PHP array with all valid themes, like this: $valid_themes = array('Default', 'Black', 'Pink', 'Green', 'Red');
  • Eğer () SetCookie veya teslim tema adı geçerli sizin dizide olup olmadığını http://de.php.net/manual/en/function.in-array.php kontrol etmek için kullanmak, $ stil veya $ _COOKIE ['tema'] veya $ _POST ['tema'] ile başka bir şey yapmadan önce temalar.

Bu güvenlik önlemleri olmadan, sitenizin XSS saldırılarına açık olacaktır: http://en.wikipedia.org/wiki/Cross-site%5Fscripting

Bir sayfaya POST do (en themeswitcher.php diyelim).

There you read the theme the user selected with $_POST["theme"] but the theme in the session (or perhaps even in the database)

ve sonra kullanarak geri geldiği yere kadar kullanıcıyı yönlendirmek

header("Location: xxxxx.php"); 
exit();