php - 从数据库值填写表单字段

时间:2012-01-07 22:05:35

标签: php mysql forms

我正在尝试“预填充”(不确定是否存在技术术语)表单字段,其中包含用户先前在数据库中输入的值。对于这个例子,它是一个城市和州。当用户加载页面以编辑选项时,这些值(它们先前输入的值)将自动出现在文本框中。

<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;
    }

3 个答案:

答案 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)");