Php 从表1查询MySQLi并将详细信息更新到表2
我被以下问题困扰了数周,无法找到解决方案: 我有两个数据库表。我想使用MySQLi查询从第一行中选择一行,从另一行中选择更多行。 第一个名为“users”的表,我在这里存储用户当前的货币信息。第二个表存储有关他的“宠物”的信息。 我已经走了这么远。。。但我也想通过点击提交更新宠物的一个信息 这是我的代码:Php 从表1查询MySQLi并将详细信息更新到表2,php,mysql,mysqli,Php,Mysql,Mysqli,我被以下问题困扰了数周,无法找到解决方案: 我有两个数据库表。我想使用MySQLi查询从第一行中选择一行,从另一行中选择更多行。 第一个名为“users”的表,我在这里存储用户当前的货币信息。第二个表存储有关他的“宠物”的信息。 我已经走了这么远。。。但我也想通过点击提交更新宠物的一个信息 这是我的代码: $statement = $mysqli->prepare("SELECT money FROM users WHERE fbid = ?"); $statement->bin
$statement = $mysqli->prepare("SELECT money FROM users WHERE fbid = ?");
$statement->bind_param("s", $_SESSION['FBID']);
$statement->execute();
$statement->bind_result($money);
while ($statement->fetch());
$statement->close();
if($stmt = $mysqli->prepare("SELECT clean,health,petname FROM pets WHERE fbid = ?")){
$stmt->bind_param('s',$_SESSION['FBID']);
$stmt->execute();
$stmt->store_result();
$num_of_rows = $stmt->num_rows;
$stmt->bind_result($clean,$health,$petname);
while ($stmt->fetch()) {
if($_GET['buy']=='clean' && $money>='5' && $clean<='95'){
$stmt2 = $mysqli->prepare("UPDATE pets SET `clean` = `clean` + 5 WHERE fbid = ? AND petname = ?");
$stmt2->bind_param("ss", $_SESSION['FBID'],$_GET['identifier']);
$stmt2->execute();
$stmt2->close();
$stmt3 = $mysqli->prepare("UPDATE users SET `money` = `money` - 5 WHERE fbid = ?");
$stmt3->bind_param("s", $_SESSION['FBID']);
$stmt3->execute();
$stmt3->close();
header( "Location: /pets.php?success=clean" );
}
if($_GET['buy']=='health' && $money>='7' && $health<='90'){
$stmt4 = $mysqli->prepare("UPDATE pets SET `health` = `health` + 10 WHERE fbid = ? AND petname = ?");
$stmt4->bind_param("ss", $_SESSION['FBID'],$_GET['identifier']);
$stmt4->execute();
$stmt4->close();
$stmt5 = $mysqli->prepare("UPDATE users SET `money` = `money` - 7 WHERE fbid = ?");
$stmt5->bind_param("s", $_SESSION['FBID']);
$stmt5->execute();
$stmt5->close();
header( "Location: /pets.php?success=health" );
}
echo "".$petname." welcomes you!<br>";
if($health<='90' && $money>='7'){
echo "<form method='GET'><input type='hidden' name='identifier' value='".$petname."'><input type='hidden' name='buy' value='health'><input type='submit' value='Healthcare (G$7)'></form>";
}
if($clean<='95' && $money>='5'){
echo "<form method='GET'><input type='hidden' name='identifier' value='".$petname."'><input type='hidden' name='buy' value='clean'><input type='submit' value='Clean (G$5)'></form>";
}
}
$stmt->free_result();
$stmt->close();
}
在我单击submit之前,它工作得非常好。然后它会更新所选宠物的值,但会更新值,更新次数与我拥有的宠物数量相同。我只想更新一次,但我必须在一页中打印出所有宠物信息
那我该怎么做呢
我无法使用get_result,因为它未安装在服务器上
谢谢大家 将更新宠物的逻辑与显示宠物的逻辑分开。您当前处于显示循环内,因此每次显示循环迭代都会更新一个宠物。当您将更新代码移到while循环之外时,您将只更新宠物信息一次,但仍会在一个循环中显示所有宠物。好的,这很清楚,但是如果$\u GET['buy']=='clean'&&$money>='5'&&$clean@krisz44g您使用$_GET['identifier']值来识别正确的宠物。嗯,但是如果我只是这样做并分开更新,那么我就无法在发送请求之前准确地检查钱的价值,因此如果出现按钮,因为当页面加载时我仍然有钱,但我也打开另一个窗口并将钱花在其他东西上,它将接受请求,就好像我仍然有钱一样。这是我的问题。有什么想法吗?@krisz44g您仍然可以通过SELECT查询读取并检查用户拥有的资金。当您有足够的钱时,您可以通过第二次选择查询来检查特定宠物的“清洁”值,您可以使用$\u GET['identifier']值。如果您有钱且“clean”值有效,则运行更新查询。毕竟,你仍然有你的正常while循环来打印所有的宠物,不管你是否运行过像clean或health这样的操作。