我正在尝试“预填充”(不确定是否存在技术术语)表单字段,其中包含用户先前在数据库中输入的值。对于这个例子,它是一个城市和州。当用户加载页面以编辑选项时,这些值(它们先前输入的值)将自动出现在文本框中。
<tr><td>City</td><td><input type="text" name="city" value="<? $city = "usercity"; echo $formValue->location('$city'); ?>"></td>
<td>State</td><td><input type="text" name="state" value="<? $state = "userstate"; echo $formValue->location('$state'); ?>"></td>
有没有办法根据输入设置一个值(从上面的方框中)?如果它像function location($input)
那样我会知道怎么做,但当括号中没有任何内容时,是否有任何设置值的方法?
function location(){
$userid = $_SESSION['userid'];
$server = 'localhost';
$user = 'root';
$password = '';
$connection = mysql_connect($server, $user, $password) or die(mysql_error());
mysql_select_db(testdb, $connection) or die(mysql_error());
$result = mysql_query("SELECT '$location' FROM userinfo WHERE userid = '$userid'");
$user_data = mysql_fetch_array($result);
if($location =='usercity'){
$userlocation = $user_data['usercity'];
return $userlocation;
}
else
$userlocation = $user_data['userstate'];
return $userlocation;
}
答案 0 :(得分:0)
不要从全球视角考虑这个问题,而是考虑其背景下的问题。
您的起点(从服务器角度来看)是HTTP GET请求来自此页面的客户端,或者客户端在POST请求之后返回此页面。在任何一种情况下,服务器都找到了应该处理此请求的“资源”(PHP脚本),并通过使用脚本文件加载PHP解释器来调度它。
此时的上下文位于脚本的第一行;在解释器刚刚完成解析并开始执行的时刻。问问自己:当前请求是否包含活动会话标识符?如果它确实有一个活动会话,那么检查客户端之前是否已填写此表单,如果已填写,则替换他们之前提交的默认表单值作为普通表单默认值。如果客户端没有活动会话或之前没有使用过该表单,则会根据需要显示一个带有默认值的空白表单。
提示:考虑使用此技术来调试代码。在代码中选择一行,并在该位置放置一个心理“断点”。问问自己:此时此脚本的上下文是什么?定义了哪些变量?什么是服务器状态?客户期待什么?一旦你对这些问题有了答案,编写代码很简单。
答案 1 :(得分:0)
从我在代码中看到的内容中,您可以使用单引号中的变量:
$city = "usercity"; echo $formValue->location('$city');
删除单引号,因为它会按原样传递'$ city',而不是$ city的值。尝试
$city = "usercity"; echo $formValue->location($city);
使其更清晰:
$city = "usercity";
print ('$city'); // will print $city
print ($city); // will print usercity
答案 2 :(得分:-1)
我的最后几个项目到处都有表格,并告诉php每次填写表格都是痛苦的。
对于我当前的项目,我保持输入名称与mysql字段名称相同。使提交和填充更容易。
在填充表单时,我使用了一些ajax(jQuery在整个项目中使用,所以使用jquery的ajax()函数;
FORM
<form>
<input name="field_one" type = "text" >
<input name="field_two" type = "text" >
<input type="button" value="Send">
</form>
我在doc的顶部放置了条件语句:
<?php if($_POST['update']){
$query=mysql_query("SELECT * FROM table WHERE unique_id='$id' LIMIT 1");
echo json_encode(mysql_fetch_assoc($query));
exit;
} ?>
假设您有一个项目列表,您希望能够单击并编辑(使用相应的数据填充表单)。我为它分配了一个data-
属性,并用它的唯一ID填充它,通常是AI PRIMARYKEY,例如:
while($r=mysql_fetch_assoc($data)){
echo "<li data-unique_id=\"\">$r[name]<span class="edit">edit</span></li>";
?>
$('.edit').click(function(){
var toget = $(this).parent().data('unique_id');
$.ajax({
url:'here so it sends to itself',
data:'update='+toget,
success:function(data){
for (var key in data) {
if (data.hasOwnProperty(key)) {
$('input[name="'+key+'"]').each(function(){
$(this).val(data[key]);
});
}
}
}
});
<select>, <textarea>, checkboxes
需要做更多的工作,但同样的一般想法适用,(我投入了几个if语句,但它可能会更好地处理)
我可能会更好地解释这一点,但我希望你能得到这个想法,我已经得到了一些帮助。
FYI
我的插页就像......
foreach($_POST as $k=>$v){
$v=mysql_real_escape_string($v);
$fields.=" `$k`,";
$vals.=" '$v',";
}
$fields=substr($fields,0,strlen($fields)-1);//to get rid of the comma :)
$vals=substr($vals,0,strlen($vals)-1);//and again
mysql_query("INSERT INTO ($fields) VALUES ($vals)");