PHP update()MySQL数据库不工作
我正在做一个测验,要求用户在最后提供人口统计信息,但我在用我收集的信息正确填充表格时遇到了一些问题 下面的代码是我的databaseAdapator.php文件的一部分。第一个,initUser(),在我的数据库中设置一个用户条目,并将所有内容初始化为0-这正在发生/我可以在MySQL中看到这些值 udpateUser()是我遇到问题的地方。调用它的页面(addUser.php)包含函数所需的所有信息,但当我调用它时,数据库中没有任何更改 基本上,我想执行以下命令:PHP update()MySQL数据库不工作,php,mysql,sql,database,web,Php,Mysql,Sql,Database,Web,我正在做一个测验,要求用户在最后提供人口统计信息,但我在用我收集的信息正确填充表格时遇到了一些问题 下面的代码是我的databaseAdapator.php文件的一部分。第一个,initUser(),在我的数据库中设置一个用户条目,并将所有内容初始化为0-这正在发生/我可以在MySQL中看到这些值 udpateUser()是我遇到问题的地方。调用它的页面(addUser.php)包含函数所需的所有信息,但当我调用它时,数据库中没有任何更改 基本上,我想执行以下命令: update users s
update users set age=11, gender="Male", height_cm=2 where user_id=95;
我的代码
public function initUser($age, $gender, $height, $weight, $ip){
//create new dummy user
$stmt = $this->DB->prepare("Insert into users values(null, :age, :gender, :height, :weight, :ip)");
$stmt->bindParam('age', $age);
$stmt->bindParam('gender', $gender);
$stmt->bindParam('height', $height);
$stmt->bindParam('weight', $weight);
$stmt->bindParam('ip', $ip);
$stmt->execute();
//select last insert ID
$stmt = $this->DB->prepare("SELECT LAST_INSERT_ID() from users");
$stmt->execute();
$userId = $stmt->fetch();
return $userId[0];
}
public function updateUser($user, $age, $gender, $height, $weight){
//edit the information for a user after demographics page
$stmt = $this->DB->prepare("UPDATE users SET age=:age, gender=:gender, height_cm=:height, weight_kg=:weight WHERE user_id=:user");
$stmt->bindParam('age', $age);
$stmt->bindParam('gender', $gender);
$stmt->bindParam('height', $height);
$stmt->bindParam('weight', $weight);
$stmt->bindParam('user', $user);
$stmt->execute();
return $user;
}
这里是addUser.php,调用函数的页面。我知道这是一种可怕的做法(对不起!),我正在尝试让数据库适配器暂时正常工作,并且我已经手动检查了所有变量——它们都有效且非空
<?php
require_once("./databaseAdaptor.php");
$user = $_GET["user"];
$age = $_POST["Age"];
$gender = $_POST["Gender"];
$height_in = $_POST['in'];
$height_ft = $_POST['ft'];
$height = 2.54 * (($height_ft * 12) + $height_in);
$weight = $_POST['lbs'];
$userId = $myDatabaseFunctions->updateUser($user, $age, $gender, $height, $weight);
?>
编辑:
这里是我调用initUser.php的地方
<?php
require_once("./databaseAdaptor.php");
$userId = $myDatabaseFunctions->initUser(0, null, 0, 0, 0);
?>
<form name='fr' action='quiz.php' method='POST'>
<input type='hidden' name='user' value='<?=$userId?>'>
<input type="submit" />
</form>
<script type='text/javascript'>
document.fr.submit();
</script>
食物卡路里
您在调用updateUser()
的页面上获取的$userId
不正确
你称之为:
$user = $_GET["user"];
但是您的表单正在使用$\u POST
,这意味着$user
被设置为NULL
。这意味着在脚本执行过程中不会发生任何事情,因为查询确实成功执行了,但是没有列的用户id
为NULL
。因此,您应该通过以下方式进行呼叫:
$user = $_POST["user"];
这将使它与通过您的表单提交的内容相等
故障排除
你似乎还有些问题。以下是一些建议:
以不同的方式使用PDO。尝试通过execute()
传递所有变量,并包括”;
public function updateUser($user, $age, $gender, $height, $weight){
$stmt = $this->DB->prepare("UPDATE users SET age=?, gender=?, height_cm=?, weight_kg=? WHERE user_id=?");
$variables = [$age, $gender, $height, $weight, $user];
echo "<pre>".print_r($variables, true)."</pre>";
$stmt->execute($variables);
return $user;
}
$stmt->execute($variables);
返回$user;
}
尝试检查是否可以显示调用initUser()的代码
?当然,我会把它放到主帖子中。发生了什么事情……捕捉错误可能有助于说明这是什么。我遇到的部分问题是,由于重定向到人口统计页面,用户没有正确地从测验页面发布,所以它被移动到URL中的一个参数。@JFinderupdateUser()
函数实际返回?你能回显并告诉我吗?@JFinder另外,你能告诉我你是如何实际访问addUser.php
?以我看到的形式转到quick.php
。不幸的是,updateUser()根本没有返回,这就是我被卡住的地方。其余信息已添加到原始帖子中。@JFinder表示未设置$user
,表示$\u GET['user']
无效。