2011-08-02 31 views
0
include("connect.php"); 
    $username = mysql_real_escape_string($_REQUEST[username]); 


    function updateData($key){ 
    $field = "$$key"; 
    if($field == "") { 
    } else { 
    $sql= "UPDATE users SET $key = '$field' WHERE username ='$username'"; 
    mysql_query ($sql , $conexion); 
    } 
    } 

    updateData('password'); 
    updateData('firstname'); 

我想要做的是这个PHP文件识别字段的自动方法,如果输入字段值为空,则不保存它们。是否可以使用此结构运行MySQL请求?

如果我手动将该字段的名称放在$key空格上,它可以工作,但是一旦我将它变成函数并运行它,它就不起作用。

回答

3

上不要写你这样的代码。

  • 对于初学者来说,它不是可读的 - 它使不管是谁维护的代码要去找这个函数找出正在使用的数据,其中的来源。其次,您将遇到变量范围的问题 - 在函数内部,除非您使用关键字global来引用它们,否则将不会定义任何变量以将其引入范围。

相反,写你的函数是这样的:

function updateData($username, $key, $value){ 
    if($key != "" && $value != "") { 
     $sql = "UPDATE users SET $key = '$value' WHERE username ='$username'"; 
     mysql_query($sql, $conexion); 
    } 
} 

,并传递相关的值;这就是函数参数的设计目的。在插入参数之前,您可能还想考虑转义参数的内容。

+0

哇,谢谢!这真的很有用,解决了我的问题。 –

0

我认为这个问题,它的变量$username$sql$conexion不在此功能认识

看看这个链接variables scope

+0

我已经定义了'$ username','$ sql'和'$ conexion'变量,但我认为将它们包含在我的问题代码中并不相关。但我现在添加了它们。谢谢:) –

+0

是的,但函数具有不同的变量*作用域*,因此,如果要将外部变量引入其中,为什么必须使用'global'关键字。为什么不把你的函数写成这样的呢? 'updateData('password',$ password);' – Amber

+0

AH!我想我明白你的意思了!谢谢!我会尝试并回到你身边。 –

相关问题