Php 函数及其返回值的问题
我制作了这种积分系统,用户可以在这里花费他们的积分。用户的分数确实会被扣除。我并没有包括很多变量,但它们都可以。问题出现在Php 函数及其返回值的问题,php,function,Php,Function,我制作了这种积分系统,用户可以在这里花费他们的积分。用户的分数确实会被扣除。我并没有包括很多变量,但它们都可以。问题出现在return($success)和return($error\u message)上 代码如下: function died($error) { header("Location: error_points_on.php?error=" . $error); die(); } function success($success) { header("
return($success)
和return($error\u message)
上
代码如下:
function died($error) {
header("Location: error_points_on.php?error=" . $error);
die();
}
function success($success) {
header("Location: success_points_on.php?success=" . $success);
die();
}
function quote_smart($value, $handle) {
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value, $handle) . "'";
}
return $value;
}
function product($price,$points, $name, $uname, $error_message, $success_message) {
$user_name = "cencord";
$pass_word = "cencord";
$database = "cencord";
$server = "cencord";
$db_handle = mysql_connect($server, $user_name, $pass_word);
$db_found = mysql_select_db($database, $db_handle);
if ($db_found) { // connect to DB
$uname = quote_smart($uname, $db_handle);
$SQL = mysql_query("SELECT points FROM members WHERE username=$uname");
$points = mysql_fetch_row($SQL);
$points = $points[0]; // make it a variable rather then an array
if ($points >= $price) {
$points = $points-$price; // fjern points
$points = quote_smart($points, $db_handle);
mysql_query("UPDATE members SET points=$points WHERE username = $uname");
$success_message .= "The " . $name . " has been mailed to your E-mail, please allow 5 minutes for it to arrive.<br />";
return($success_message);
}
else if ($points < $price) {
$error_message .= "You have " . $points . " you need " . $price . " points to purchase a " . $name;
return($error_message);
}
else if (!$db_found) {
$error_message .= "Could not connect to the database, please contact support";
return($error_message);
}
}
}
if($Checked1 == true) {
product(400, $points, "Some string", $uname, $error_message, $success_message); //price and name
}
if($Checked2 == true) {
product(400, $points, "Some string", $uname, $error_message, $success_message);
}
if(strlen($error_message) > 0) {
died($error_message);
}
if(strlen($success_message) > 0) {
success($success_message);
}
echo "error didnt pass at all";
而不是退货,但我希望用户能够购买多个项目(添加它而不是退货确实有效)。您的逻辑嵌套是错误的。去掉内脏,只留下if语句,您的
product()
函数中有:
function product($price,$points, $name, $uname, $error_message, $success_message) {
if ($db_found) { // connect to DB
if ($points >= $price) {
$success_message = "blah";
return($success_message);
}
else if ($points < $price) { // This if () part is redundant, btw
$error_message = "blah";
return($error_message);
}
else if (!$db_found) {
$error_message .= "blah"; // This should be = instead of .=
return($error_message);
}
}
}
我强烈建议使用一些工具,比如IDE,它可以保持代码格式正确,这将使这些类型的问题更容易被发现
编辑
我还注意到,您没有通过引用传递$error\u消息和$success\u消息,这将导致进一步的问题。上面所做的更改(在第二个示例中),但这段代码仍然不是我所说的最佳实践。我同意@leftclickben上面所说的一切,但我想再补充一点。在调用
product()
之后的代码中,您似乎正在使用$error\u message
和$success\u message
的值,但要让函数更改它们的值,必须使用和符号通过引用传递它们
将您的函数原型更改为
function product($price,$points, $name, $uname, &$error_message, &$success_message) {
函数返回后,值的更改将可用。“问题发生了”。。。你能解释一下你打算发生什么,以及实际上发生了什么吗?“当我输入x时,我希望看到y,但我看到z”?我在代码下面说,对不起“我可以添加标题(“Location:success\u points\u on.php?success=“.success”);而不是退货,但我希望用户能够购买多个项目,(添加它而不是退货确实有效)。Ivan R问”我很抱歉,但不清楚你打算发生什么,以及实际发生了什么。重复同样的事情通常不会让事情变得更清楚。“当我的代码中有一行写着“xxx”,而用户试图执行“yyy”时,就会出现“zzz”。我希望出现“qqq”。声明“添加它而不是返回确实有效。”“对于一个愿意免费提供帮助但又不愿意破译你的信息的人来说,这是不够的。我试图帮助您获得帮助…我可以详细说明,我想要的是,A)从SQL数据库中扣除用户分数(有效),B)用户使用适当的$success\u message/$error\u message发送到适当的错误页面(如果我立即将其发送到那里,而不是返回并检查购买的更多项目,则有效)。当代码被执行时,会发生的是echo“错误根本没有通过”;获取显示,不应显示,因为$error_消息或$success_消息应包含字符串抱歉,我忘记了quote_智能函数,它不是必需的,但应该添加一些说明,现在添加了。现在查看如何通过引用传递它们tyI已经这样做了,在参数名称前面添加了-)Ty非常,我不知道变量没有更改,我也不知道如何通过引用传递,Ty寻求帮助,现在开始工作:)Ty非常,我不知道变量没有更改,我不知道如何通过引用传递信息,ty帮了我的忙,现在它开始工作了:)@leftclickben-伟大的人都有相同的想法。我没有看到你的编辑,你也没有看到我的帖子。。。
function product($price,$points, $name, $uname, &$error_message, &$success_message) {
if ($db_found) {
if ($points >= $price) {
$success_message = "blah";
return($success_message); // this is redundant actually
} else {
$error_message = "blah";
return($error_message); // this is redundant actually
}
} else {
$error_message = "blah";
return($error_message); // this is redundant actually
}
}
function product($price,$points, $name, $uname, &$error_message, &$success_message) {