我有一个小表单连接到我的数据库中的可选字段。它不是以任何方式要求的。
如果您访问该页面,输入字段中没有任何内容,它会给我$ gamername undefined。在访问页面时,当我甚至没有单击表单按钮时,它会自动显示“GameName Updated”的echo语句。如果我在表单中添加了一些内容,它会将它的日期更新到它应该的数据库..但它也不会回显该字段,除非我刷新页面然后它再次提交它。
<?php
if(isset($_SESSION['uid'])) {
$user_id = $_SESSION['uid'];
$sql = "SELECT * FROM users WHERE uid = '{$user_id}' ";
$result = query($sql);
while (($row = mysqli_fetch_assoc($result)) != false) {
$user_id = $row['uid'];
$gamename = $row['gamename'];
}
}
?>
<?php
function update_game_name(){
$user_id = $_SESSION['uid'];
$gamename = escape($_POST['gamename']);
$sql ="UPDATE users SET gamename='$gamename' WHERE uid='$user_id'";
$result = query($sql);
echo ('GameName Updated.');
}
?>
<div class="container no-scope-wrap">
<div class="row">
<div class="col-md-12">
<?php update_game_name(); ?>
<div class="no-scope-border">
<h2 class="form-field-title">Game Name</h2>
<form role="form" action="<?php $_SERVER['PHP_SELF'];?>" method="post">
<div class="form-group">
<label class="form-field-label">GameName</label>
<input class="form-control input-lg" id="name" name="gamename" type="text" placeholder="GameName" value="<?php echo $gamename;?>">
</div>
<button type="submit" name="update_game_name" id="btn" class="btn btn-default btn-lg">Update GameName</button>
</form>
</div>
</div>
</div>
</div>
答案 0 :(得分:1)
在您的函数中,您需要在进行更新后检查是否有帖子数据:
function update_game_name(){
if ($_SERVER["REQUEST_METHOD"]!="POST") return;
$user_id = $_SESSION['uid'];
$gamename = escape($_POST['gamename']);
$sql ="UPDATE users SET gamename='$gamename' WHERE uid='$user_id'";
$result = query($sql);
echo ('GameName Updated.');
}
请注意,每次加载页面时都会调用此函数。显示警告消息是因为在没有发布数据的情况下调用了该函数。
答案 1 :(得分:1)
正如@FIgor已经说过的,每次加载页面时都会运行您的函数,而不会检查发布的数据。并且您也不会在发布后用新数据填充变量“$ gamename”。有两种选择可以达到你想要的效果。
使用您已有的功能,但仅在提交表单时以及从数据库中检索用户数据之前,请确保从数据库中读取新的更新数据:
if(isset($ _ SESSION ['uid'])){
$ user_id = $ _SESSION ['uid'];
if(isset($_POST['gamename']) && $_POST['gamename'] != '')
update_game_name();
$sql = "SELECT * FROM users WHERE uid = '{$user_id}' ";
$result = query($sql);
while (($row = mysqli_fetch_assoc($result)) != false) {
$user_id = $row['uid'];
$gamename = $row['gamename'];
}
}
?&GT;`
你不再在你的html部分调用你的函数了。
或
检查您的函数内部的已发布数据,如FIgor建议的那样,但让它返回新的更新值。
function update_game_name(){
if ($_SERVER["REQUEST_METHOD"]!="POST") return;
$user_id = $_SESSION['uid'];
$gamename = escape($_POST['gamename']);
$sql ="UPDATE users SET gamename='$gamename' WHERE uid='$user_id'";
$result = query($sql);
echo ('GameName Updated.');
return $gamename;
}
然后调用这个函数:
$gamename = update_game_name();