【发布时间】:2018-07-05 02:07:20
【问题描述】:
我正在做一个测验,最后要求用户提供人口统计信息,但我在用我收集的信息正确填充表格时遇到了一些问题。
以下代码是我的 databaseAdapator.php 文件的一部分。第一个是 initUser(),在我的数据库中设置一个用户条目并将所有内容初始化为 0 - 这正在发生/我可以在 MySQL 中看到这些值。
udpateUser() 是我遇到问题的地方。调用它的页面 (addUser.php) 具有该函数所需的所有信息,但是当我调用它时,数据库中没有任何变化。
本质上,我想执行以下命令:
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>
这里是人口统计.php,其中包括为 addUser.php 收集信息的表单。进入 quiz.php 的第一个表单向用户询问一系列问题,当他们到达末尾时,它会将它们发送到这里。查看数据库,他们的答案被记录下来,初始化似乎“正确”发生。我唯一没有做的事情是在测验的末尾更新用户信息。
<?php
require_once("./databaseAdaptor.php");
$page = '0';
if( isset($_GET["user"])) {
$user = $_GET["user"];
} else {
echo "error";
$page = '1';
}
?>
<!DOCTYPE HTML5>
<html lang="en">
<body bgcolor="#0000">
<font color="white">
<meta charset="UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>FOOD CALORIES</title>
<link rel="stylesheet" href="css/style.css"/>
<body>
<div>
<h4><a href="index.html">Calorie4Food</a></h4>
</div>
<br></br>
<br></br>
<center>
<form method="post" action="./addUser.php?user=<?php echo $user?>" onsubmit="checkform()">
<h6>
<!-- Age Button -->
<fieldset id="Age" >
Please Select Age: <br>
<input type="radio" value="10" name="Age" > 10<br>
<input type="radio" value="20" name="Age"> 11 - 20<br>
<input type="radio" value="30" name="Age"> 21 - 30<br>
<input type="radio" value="40" name="Age"> 31 - 40<br>
<input type="radio" value="50" name="Age"> 41 - 50<br>
<input type="radio" value="60" name="Age"> 51 - 60<br>
<input type="radio" value="60" name="Age"> > 60<br>
</fieldset>
<!-- Gender Button -->
<fieldset id="Gender" >
Please Select Gender: <br>
<input type="radio" value="Male" name="Gender" > Male <br>
<input type="radio" value="Female" name="Gender"> Female <br>
<input type="radio" value="Other" name="Gender"> Other <br>
</fieldset>
<fieldset id="HeightWeight">
Please provide your height and weight so that we may calculate your bmi: <br></br>
<div id="calculator">
<!-- Button for Metric/Standard conversion -->
<input id="toUS" type="button" class="btnsml" value="US" onclick="metrictous();" style="display:none;">
<input id="tometric" type="button" class="btnsml" value="metric" onclick="ustometric();" style="display:inline;">
<p id="height"></p>
<div id="usheight" style="display:inline;">
<c>Height:</c>
<input type="text" name="ft" id="ft" size="1" maxlength="1" onkeyup="updateBMI();" value="0">
<c>ft</c> <br></br>
<input type="text" name="in" id="in" size="2" maxlength="2" onkeyup="updateBMI();" value="0">
<c>in</c>
</div>
<div id="metricheight" style="display:none;">
<c>Height:</c>
<input type="text" name="cm" id="cm" size="3" maxlength="3" onkeyup="updateBMI();" value="0">
<c>cm</c>
</div>
<br></br>
<p id="weight"></p>
<div id="usweight" style="display:inline;">
<label for="lbs"><c>Weight:</c></label>
<input type="text" name="lbs" id="lbs" size="3" maxlength="3" onkeyup="updateBMI();" value="0">
<c>lbs</c>
</div>
<div id="metricweight" style="display:none;">
<label for="kg"><c>Weight:</c></label>
<input type="text" name="kg" id="kg" size="3" maxlength="3" onkeyup="updateBMI();" value="0">
<c>kg</c>
</div>
<br></br>
<p></p>
</div>
</div>
<br></br> Thank you!
</fieldset>
<br></br>
<input type="hidden" value="<?=$user?>" name="user"/>
<input type="submit" value="Submit" name="submit"/>
</form>
</h6>
</body>
</html>
所以一般流程是:initUser.php(调用databaseAdaptor)、quiz.php、statistical.php、addUser.php(调用databaseAdaptor)。数据库中直到 addUser.php 的所有信息似乎都是正确的。
【问题讨论】:
-
尝试检查PDO errors
-
你能告诉我们你调用
initUser()的代码吗? -
好的,我会把它扔进主帖
-
有些事情正在发生......发现你的错误可能有助于阐明那是什么。
标签: php mysql sql database web