PHP if else -表单提交按钮中的条件链接


PHP if else - conditional link in form submit button

希望有人能帮助把这个-我继承了一个网站,我试图修改一些PHP,我不熟悉。我已经学得差不多了,但还是有问题。

这是一个在线商店的页面,根据产品提供可选的附加功能。这些产品都是家具,所以有些人还可以买靠垫。我想做的改变是,根据产品的不同,有两种不同尺寸的坐垫可供选择。

在产品表中有一个字段' buffers ',还有一个页面'accessories.php'提供了添加缓冲的选项。

我已经添加了一个新的字段'cushion '和一个新的页面'accessories2.php'来覆盖垫子的新尺寸。

网站在这里,带有这个示例产品:

http://www.lloydloomonline.com/product.php?id=32

如果您点击"添加到购物车",下一页为您提供了添加自定义油漆的选项。

如果你在那里输入一些东西,然后点击"添加颜色",它就会起作用——也就是说,下一页是提供靠垫的页面。

但是如果你只是点击'No thank you, proceed with order',它只是重新加载页面-基本上URL没有被拉过,因为它应该。

页面顶部的PHP代码如下所示:

<?php
session_start();
$page = "paintwork";   
include("../includes/header.php");
include("../includes/db_open.php");
$sql =
  "SELECT p.*, c.`name` AS `categoryname` " .
  "FROM `products` p, `categories` c " .
  "WHERE p.`category` = c.`id` " .
  "AND p.`id` = '" . $_SESSION["basket"]["items"][$_REQUEST["id"]]["product"] . "'";
$result = mysql_query($sql) or die("Query failed : $sql at line " . __line__);
$row = mysql_fetch_assoc($result);
if (!empty($_POST)) {
$_SESSION["basket"]["items"][$_POST["id"]]["paintwork"] = $_POST["colour"];
if ($row["cushions"] == -1) {
    $url = "accessories.php?id=" . $_REQUEST["id"];
} else if ($row["cushions2"] == -1) {
    $url = "accessories2.php?id=" . $_REQUEST["id"];
} else if (!empty($row["glasstop"])) {
    $url = "glasstop.php?id=" . $_REQUEST["id"];
} else {
    $url = "shopping_cart.php";
}
?>

输入/提交的表单是这样的:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>" onsubmit="return validate(this)">
<label for="quantity" style="float: left; width: 75px; margin: 0">COLOUR</label>
<textarea name="colour" id="colour" style="float: left; height: 80px; width: 250px"></textarea>
<img src="images/spacer.gif" class="clear" style="height: 10px" />
<input type="submit" value="ADD COLOUR TO ORDER" id="submit" onmouseover="this.style.color = '#DBC87B'" onmouseout="this.style.color = '#FFFFFF'" style="float: left; margin-left: 75px; margin-right: 10px; width: 255px; padding-bottom: 3px; height: 23px" />
 <a href="<?php echo $url?>" style="float: left; color: #251717; background-color: #DBC87B">NO    THANKYOU, PROCEED WITH ORDER</a>
 <input type="hidden" name="id" value="<?php echo $_REQUEST["id"]?>" />
 </form>

希望这是有意义的-我认为它必须几乎在那里,因为所有的条件代码似乎工作,但URL没有被正确地拉过的形式。

如果有人能看一下,希望能让megabuck走上正轨,我将非常感激。

谢谢。


原版略有不同,只有一个坐垫选项:

$row = mysql_fetch_assoc($result);  
if (!@empty($_POST)) {
$_SESSION["basket"]["items"][$_POST["id"]]["paintwork"] = $_POST["colour"];
if (@empty($row["cushions"])) {
$url = "accessories.php?id=" . $_REQUEST["id"];
} elseif (!@empty($row["glasstop"])) {
$url = "glasstop.php?id=" . $_REQUEST["id"];
} else {
$url = "shopping_cart.php";
}

这个是:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>" onsubmit="return validate(this)">
  <label for="quantity" style="float: left; width: 75px; margin: 0">COLOUR</label>
  <textarea name="colour" id="colour" style="float: left; height: 80px; width: 250px" >   </textarea>
  <img src="images/spacer.gif" class="clear" style="height: 10px" />
  <input type="submit" value="ADD COLOUR TO ORDER" id="submit" onmouseover="this.style.color = '#DBC87B'" onmouseout="this.style.color = '#FFFFFF'" style="float: left; margin-left: 75px; margin-right: 10px; width: 255px; padding-bottom: 3px; height: 23px" />
  <a href="<?php echo (!@empty($row["cushions"])) ? "shopping_cart.php" : "accessories.php?id=" . $_REQUEST["id"]?>" style="float: left; color: #251717; background-color: #DBC87B">NO THANKYOU, PROCEED WITH ORDER</a>
  <input type="hidden" name="id" value="<?php echo $_REQUEST["id"]?>" />
</form>

所以在这两者之间,它不会太远,但是我对语法有点不了解,显然必须完全正确。


问题显然与表单中链接中的代码有关。如果原文是:

<a href="<?php echo (!@empty($row["cushions"])) ? "shopping_cart.php" : "accessories.php?id=" . $_REQUEST["id"]?>">NO THANK YOU, PROCEED WITH ORDER</a>

也就是说:

如果' buffers '不是空的,请到shopping_cart.php,否则请到accessories.php。

可以改成:

如果' buffers ' = -1,则进入accessories.php,如果'cushion ' = -1,则进入accessories2.php,否则进入shopping_cart.php?

匹配标题中的逻辑,当表单提交按钮被按下时,它会正确工作:

$row = mysql_fetch_assoc($result);
if (!empty($_POST)) {
$_SESSION["basket"]["items"][$_POST["id"]]["paintwork"] = $_POST["colour"];
if ($row["cushions"] == -1) {
    $url = "accessories.php?id=" . $_REQUEST["id"];
} else if ($row["cushions2"] == -1) {
    $url = "accessories2.php?id=" . $_REQUEST["id"];
} else {
    $url = "shopping_cart.php";
}

if (!empty($_POST)) { ...}表示如果POST不为空,则…对吧?因此,链接:

<a href="<?php echo $url?>" style="float: left; color: #251717; background-color: #DBC87B">NO    THANKYOU, PROCEED WITH ORDER</a>

不是一个真正的POST,而只是一个链接。因此代码为:

if (!empty($_POST)) {

$_SESSION["basket"]["items"][$_POST["id"]]["paintwork"] = $_POST["colour"];
if ($row["cushions"] == -1) {
    $url = "accessories.php?id=" . $_REQUEST["id"];
} else if ($row["cushions2"] == -1) {
    $url = "accessories2.php?id=" . $_REQUEST["id"];
} else if (!empty($row["glasstop"])) {
    $url = "glasstop.php?id=" . $_REQUEST["id"];
} else {
    $url = "shopping_cart.php";
} }

永远不会触发,也永远不会设置$url,因为$_POST是空的,给你一个空的$url变量和链接,从而重新加载页面。

你可以试试:

if ($row["cushions"] == -1) {    
  $url = "accessories.php?id=" .
  $_REQUEST["id"]; 
} else if ($row["cushions2"] == -1) {
  $url ="accessories2.php?id=" . $_REQUEST["id"]; 
} else if(!empty($row["glasstop"])) {
  $url = "glasstop.php?id=" . $_REQUEST["id"]; } else {
  $url = "shopping_cart.php"; 
}

if (!empty($_POST)) {

$_SESSION["basket"]["items"][$_POST["id"]]["paintwork"] = $_POST["colour"];

}

好的,我想我现在可以工作了。我有一点顿悟,我可以把三个链接包装在一些条件代码中,这是可行的:

<?php if ($row['cushions']=="0" AND $row['cushions2']=="0"){ ?>
  <a href="shopping_cart.php" style="float: left; color: #251717; background-color: #DBC87B">NO THANK YOU, PROCEED WITH ORDER</a><br>
  <?php }  ?>
  <?php if ($row['cushions']=="-1"){ ?>
  <a href="<?php echo "accessories.php?id=" . $_REQUEST["id"]?>" style="float: left; color: #251717; background-color: #DBC87B">NO THANK YOU, PROCEED WITH ORDER</a><br>
  <?php } ?>
  <?php  if ($row['cushions2']=="-1"){ ?>
  <a href="<?php echo "accessories2.php?id=" . $_REQUEST["id"]?>" style="float: left; color: #251717; background-color: #DBC87B">NO THANK YOU, PROCEED WITH ORDER</a><br>
  <?php } ?>

它不像它可能的那样优雅,但它似乎有效!