【问题标题】:value does not enter the switch statement值不进入switch语句
【发布时间】:2012-04-27 23:58:22
【问题描述】:

我有一个电子商务网站项目,这里是细节,这只是我无法解决的小问题。我有两张桌子,第一张桌子叫做物品,第二张桌子是购物车。我在一个页面中链接了名为 Add to cart 的链接,将我转换为 cart.php

a href="cart.php? action=add & id=<?php echo $itemId; ?>"> Add to Cart </a><br/>

'<a href="cart.php? action=show & id=<?php echo $itemId; ?> ">View Shopping Cart </a>` 

在我有 cart.php 页面之后:

  <?php 
// Script Error Reporting
error_reporting(E_ALL);
ini_set('display_errors', '1');
?>
<html>
<head>
<title> Cart Page </title>
</head>
<body>
<?php
include "function.php";
ConnectToDb( );
$id= $_GET['id'];
$action = $_REQUEST['action'];
$action=(isset($_GET['action']) && $_GET['action'] != '') ? $_GET['action'] : 'view';

switch($action){
case "add":
{$sql=mysql_query("SELECT * FROM items WHERE itemId='$id'");
 $row=mysql_fetch_array($sql);
 $itemPrice= $row["itemPrice"];
 $itemName= $row["itemName"];
 $quanty=$row["qty"];

$query="insert into cart values('1',".$_GET[id].",1,".$itemPrice.",".$itemName.")";
$result=mysql_query($query);
header("location:cart.php? action=show ");
echo "Item Was Added";
break;
}
case "remove":
{
$query="delete from cart where itemId=".$_GET['id'];
$result = mysql_query($query);
header("location:cart.php?action=show");
}

case "update":
{
$query="update cart set". $quanty = $_POST['quantity']."where itemId=".$_GET['id'];
$result = mysql_query($query);
header("location:cart.php?action=show");
break;
}
case "show_update":
{
$result = mysql_query("select * from cart");
$uid=$row["uid"];
$itemId= $row["itemId"];
$qty=$row["qty"];
$itemPrice=  $row["itemPrice"];
$itemName=  $row["itemName"];
while($row = mysql_fetch_array($result))
{   if ($itemId == $id )
    {  
            $totalCost =0;
            $query = "select * from cart inner join items on cart.itemId= items.itemId";    
            $result = mysql_query($query); 
            echo "<table width ='100%' border ='1'>"; 
            while($row = mysql_fetch_array($result)) 
            {$totalCost += ($qty * $itemPrice);
            echo "<tr>";
            echo "<td>";    echo $itemName;     echo "</td>";
            echo "<td> SR"; echo $itemPrice;    echo "</td>";
            echo "<td> <input type ='text' name='quantity' value=".$qty."</td>";
            echo'<td width="23%"><a href="cart.php?action=update&id='.$itemId.'">save</a></td>';
            echo'<td width="23%"><a href="cart.php?action=remove&id='.$itemId.'">Remove</a></td>';
            echo"</tr>";}
            // Increment the total cost of all items
            $totalCost += ($row["qty"] * $row["itemPrice"]);
            echo "<tr> <td colspan='2'> <a href='products.php'>Keep Shopping</a></td>";
            echo "<td colspan='2'> <b>Total: SR".$totalCost."</b></td></tr>";
            echo "</table>";
            }
        else{   
            $totalCost =0;
            $query2 = "select * from cart inner join items on cart.itemId= items.itemId";   
            $result2 = mysql_query($query2); 
            echo "<table width ='100%' border ='1'>"; 
            while($row2 = mysql_fetch_array($result2)) 
            {$totalCost += ($row2["qty"] * $row2["itemPrice"]);
            echo "<tr>";
            echo "<td>";    echo $row2['itemName'];     echo "</td>";
            echo "<td> SR"; echo $row2["itemPrice"];    echo "</td>";
            echo "<td>";     echo $row2["qty"];         echo "</td>";
            echo'<td width="23%"><a href="cart.php?action=show_update&id='.$row2["itemId"].">edit</a></td>";
            echo'<td width="23%"><a href="cart.php?action=remove&id='.$row2["itemId"].">Remove</a></td>";
            echo"</tr>";
            }
            // Increment the total cost of all items
            $totalCost += ($row2["qty"] * $row2["itemPrice"]);
            echo "<tr> <td colspan='2'> <a href='homestore.php'>Keep Shopping</a></td>";
            echo "<td colspan='2'> <b>Total: SR".$totalCost."</b></td></tr>";
            echo "</table>";}
            break;
}}
case "show":
{
$totalCost =0;
$query = "select * from cart inner join items on cart.itemId = items.itemId";
$result = mysql_query($query);
?>
<table width="100%" border="1"> 
    <?php while($row = mysql_fetch_array($result))
    {   
    $totalCost += ($row["qty"] * $row["itemPrice"]);
    ?>
    <tr>
    <td><?php echo $row["itemName"]; ?></td>
    <td>SR<?php echo $row["itemPrice"]; ?></td>
    <td><a href="cart.php?action=show_update&id=<?php echo $row["itemId"]; ?>">edit</a></td>
    <td><a href="cart.php?action=remove&id=<?php echo $row["itemId"]; ?>">Remove</a></td>
    </tr>
<?php } 

// Increment the total cost of all items
$totalCost += ($row["qty"] * $row["itemPrice"]);
$totalCost = $totalCost + ($row["qty"] * $row["itemPrice"]); ?>
<tr> <td colspan="2"> <a href="products.php">Keep Shopping</a></td>
<td colspan="2"> <b>Total: SR<?php echo $totalCost; ?></b></td></tr>
</table>

<?php break; }
}


?>
</body>
</html>

如果用户点击链接,action = "add" 和产品 id 将转换为 cart.php, 问题是 $action 无法插入到 Switch 语句中,尽管我已经 echo $action 并打印添加 我不知道为什么它没有进入switch statment 我也尝试回显 $id 并打印 2 这是正确的 我已经尝试过 var_dump($_GET) 并且它也有效,它告诉我有字符串添加和 id =2 我想发疯,因为我一整天都在笔记本电脑上设置 2 并且它不起作用。

在这里,我不与购物车的会话或用户进行交互,这就是为什么在添加情况下我刚刚插入 1 作为 uid 的第一个值,如果它成功,我将添加会话。 按下添加到卡后,它将直接转移到我们找到编辑和删除的显示案例 当然,在展示柜中按下移除它会将他转移到移除案例 然而

如果他在展示案例中点击编辑链接,它将转移到他可以编辑数量的展示更新案例,如果id匹配id文本框将生成其他产品将没有文本框,如果生成文本框,默认数量将为1保存链接会出现,这会改变我们更新购物车表中数量的更新情况。

我只是想知道为什么$action 不能进入切换状态??

【问题讨论】:

  • ConnectToDb( ) 函数可能没有返回或静默失败。在它之后放置一个打印语句,以确保您从它返回。此外,您应该添加一个默认大小写(请参阅the docs)以查看您是否没有正确匹配大小写。
  • 又一集Bobby Tables
  • 出于调试目的,尝试向开关添加默认值并在其中打印 $action 的值
  • 很抱歉,但不禁想知道:您的所有链接是否真的在代码中是这样写的:cart.php? action=add & id=2(我的意思是,参数周围有空格)?
  • 如果我删除链接中的空格,这就是问题

标签: php switch-statement


【解决方案1】:

在此行之后回显 $action

$action=(isset($_GET['action']) && $_GET['action'] != '') ? $_GET['action'] : 'view';

并检查它的值

【讨论】:

  • it print add 这意味着它可以工作但仍然无法进入案例
  • 然后尝试以下操作,检查开关内部的代码是否导致此问题: switch($action){ case "add": echo "Add";break;案例“删除”:回显“删除”;中断; case "update":echo "update";break;}
【解决方案2】:

你知道这些行是做什么的吗:

'<a href="cart.php? action=show & id=<?php echo $itemId; ?> ">View Shopping Cart </a>`

$action=(isset($_GET['action']) && $_GET['action'] != '') ? $_GET['action'] : 'view';

如果没有,我谦虚地建议您考虑购买电子商务解决方案或使用开源选项。

如果你这样做了,那么你应该看到这实际上是你的错误源于查询字符串中的空格。

此外,由于您没有 view 分支或 default 分支,因此您将跳过整个 switch 语句。

【讨论】:

  • 不过,通过调试 $action === 'action ' 案例很容易检查。
  • $_GET['action'] 将不存在,$_GET[' action'] 将。关于 $action 的第二个注释只是指出他正在“默认” $action 以“查看”,但没有在 switch 语句中处理它,也没有使用默认分支。
  • 是的,这很合乎逻辑;但是他是如何得到“添加”的呢? ) 可能是“添加”(这是为什么开关在应该正确时会出错的唯一解释)),但仍然......
  • 首先,我是大学生,我不购买任何代码,如果你想提供帮助,就去做,如果没有,我希望别人帮助我。其次,我是我们的讲师教我们编写的那些代码,她是讲师,但她不测试她的代码,谢谢。我会试试的
  • 我试过把 default ,然后它总是去 default case ,但是它的值是 add 并且有 case add
【解决方案3】:

我找到了解决方案;如果你知道答案,你会笑的。它是:

不应以$id= $_GET['id']; 开头 因为在“添加”到购物车的链接中,操作首先出现,然后是 id
我从一开始就删除了$id= $_GET['id'];,我把它放在每个箱子里,它正在工作。感谢您的帮助。

【讨论】:

    【解决方案4】:

    $_GET[id] 更改为$id,因为您已经在$id 中收到了这个

    【讨论】:

    • 你希望这能解决他的问题吗?
    • 这应该可以工作,因为他在询问没有在 switch 语句中插入值。如果我可以问,你为什么怀疑?
    • 我必须从产品页面获取它的工作原理,就像我在 $action 中所做的那样
    • 在这种情况下“删除”后的中断在哪里:{ $query="delete from cart where itemId=".$_GET['id']; $result = mysql_query($query); header("位置:cart.php?action=show"); }
    猜你喜欢
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多