表单提交不更改数据

时间:2013-08-17 15:15:28

标签: php

我在li上提交问题时代码正在提交我的数据没有变化。这是代码:

<?php
$theme1 = business;
$theme2 = modern;
$theme3 = web2;
if(isset($_POST['style']))
{setcookie('style', $_POST['style'], time()+(60*60*24*1000));
$style=$_POST['style'];}
elseif(isset($_COOKIE['style']))
{$style=$_COOKIE['style'];}
else
{$style=$theme1;} 

echo "
<link href='"; $style; echo".css' rel='stylesheet' type='text/css' />

<form  action='".$_SERVER['PHP_SELF']."' method='post' id='myForm'>
<li onclick='myForm.submit();' value='$theme1'> business</li>
</form>

";
?>

代码确实在网站上提交,但它没有更改数据。表单是使用select选项样式制作的。这是代码:

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> 
<select name="style"> 
<option type="submit" <?php echo "value='$theme1'";if($style == $theme1){echo    "selected='selected'";}?>><?php echo $theme1; ?></option>
<option type="submit" <?php echo "value='$theme2'";if($style == $theme2){echo "selected='selected'";}?>><?php echo $theme2; ?></option>
<option type="submit" <?php echo "value='$theme3'";if($style == $theme3){echo "selected='selected'";}?>><?php echo $theme3; ?></option>
</select>
<input type="submit">
</form>

我认为li遗漏了一些信息存在问题。我的代码出了什么问题?

3 个答案:

答案 0 :(得分:0)

有很多错误,但这里有一些修复

$theme1 = 'business';
$theme2 = 'modern';
$theme3 = 'web2'; //qoute strings
if(isset($_POST['style'])){
setcookie('style', $_POST['style'], time()+(60*60*24*1000));
    $style=$_POST['style'];
}
elseif(isset($_COOKIE['style'])){
$style=$_COOKIE['style'];
}else{
$style=$theme1;} 

echo "<link href='". $style . ".css' rel='stylesheet' type='text/css' />"; //this line was way off

答案 1 :(得分:0)

这里有很多问题!与您可能出现的问题最相关的是:

  • ; $style;可能不会做你认为的事情
  • <li value="…">没有意义,不会随表单一起提交(<li><ul>之外无法开始使用)

所以这里有两个修复使用PHP的标签和<input type="submit">,以及一些代码样式更改 - 假设您使用的是PHP 5.4或更高版本:

<?php
$themes = ['business', 'modern', 'web2'];
if(isset($_POST['style'])) {
    setcookie('style', $_POST['style'], time() + (60 * 60 * 24 * 1000));
    $style = $_POST['style'];
} elseif(isset($_COOKIE['style'])) {
    $style = $_COOKIE['style'];
} else {
    $style = $themes[0];
} 
?>

<link href="<?= $style ?>.css" rel="stylesheet" type="text/css" />

<form method="POST" id="myForm">
    <ul>
        <?php foreach($themes as $theme): ?>
            <li><input type="submit" name="style" value="<?= $theme ?>" /></li>
        <?php endforeach; ?>
    </ul>
</form>

我还建议不要使用POST吗?如果有人试图刷新页面,那就太烦人了。 GET对于这种事情来说同样有用,而且链接比按钮更容易风格。

答案 2 :(得分:-1)

是的,你是对的。您错过了在li中分配变量。更改以下代码并在将值赋给变量($ theme1,$ theme2,$ theme3)时,使用单引号分配值,因为all都是字符串。

echo "<link href='" . $style . ".css' rel='stylesheet' type='text/css' /><form  action='" . $_SERVER['PHP_SELF'] . "' method='post' id='myForm'><li onclick='myForm.submit();' value='" . $theme1 . "'>" . $style . "</li></form>";

注意:此处代替静态值“business”,将其更改为$ style variable。