0

我最近学习了数组系统来缩短我在 Javascript 上的代码。

        var fields = ['username', 'password', 'password_confirm', 'type', 'firstname', 'lastname', 'bdate_month', 'bdate_day', 'bdate_year', 'email', 'country', 'state', 'city', 'payment_email'];
        var length = fields.length;
        for (var i=0; i<length; i++) {
        if ($('#' + fields[i]).val() == "") {
        $('#' + fields[i] + '_error').show();
        $('#' + fields[i] + '_error').fadeOut(4000, function() {});
        $('#' + fields[i]).focus();
        return false;
        }
        }

这是我生成的代码,用于创建一系列验证提交表单内容的条件。

现在我想在 PHP 中使用同样的原理来生成一系列函数,这些函数将从 MySQL 数据库中查询登录用户的数据。

我是 PHP 的新手,我知道下面的代码可能只是一堆废话。但也许您可以了解我在这里要完成的工作。

include("connect.php");

$fields = ('id', 'username', 'password', 'password_confirm', 'type', 'firstname', 'lastname', 'bdate_month', 'bdate_day', 'bdate_year', 'email', 'country', 'state', 'city', 'payment_email');
$username = mysql_real_escape_string($_SESSION['username']);

for ($i=0; $i<15; $i++) {
function $fields($i)() {
    $username = mysql_real_escape_string($_SESSION['username']);
    $sql="SELECT * FROM users WHERE username='$username'";
    $resultado=mysql_query("$sql");
    $row=mysql_fetch_array($resultado);
    if($row!=NULL)
    {
        echo ($row['$fields($i)']);
    } else {

        echo (" No ".$fields($i)." inserted!");
    }
}
}

============================================ 编辑:

我想出了一个更容易和更简单的方法。

function in_user($key) { 
$username = mysql_real_escape_string($_SESSION['username']);
$sql="SELECT * FROM users WHERE username='$username'"; 
$resultado=mysql_query("$sql"); 
$row=mysql_fetch_array($resultado); 
if($row!=NULL){ 
echo ($row[$key]); 
} else { 
echo ("No {$key}!"); 
} 
}

由于我只需要更改要咨询的字段,因此我认为有参数的函数会更容易和更简单。

<?php in_user('email');?>会输出stored.email@database.com

4

6 回答 6

1

在 PHP 中,您不能创建名称基于变量的函数。

此外,在这个例子中你不会获得太多,我认为使用起来更清晰:

function user_get_field($fieldname)

现在,如果您需要多个字段,这将导致执行多个查询,因此最好检索所有内容并将其缓存。

嘿,您甚至可以在会话中存储与用户相关的所有内容,并在他更改自己的设置时对其进行更新。每个会话只有一个查询。

于 2011-07-31T21:59:19.720 回答
0

好吧,我不确定整体方法,但只是为了好玩....您可以使用变量变量来触发匿名函数,如下所示:

<?php
$fields = array('id', 'username' ...
foreach($fields as $index => $one_field) {
    $$one_field = function() use ($one_field, $index) { ... };
}

请注意 的使用use,因此我可以访问 和 的实例,这些实例$one_field在函数中创建$index每个实例时都是当前$$one_field的......创建一个真正的闭包。

现在您可以访问这些功能之一,例如$username()

这是一个快速的说明性示例。

于 2011-07-31T22:52:44.393 回答
0
function fields($i) {
    $username = mysql_real_escape_string($_SESSION['username']);
    $sql="SELECT * FROM users WHERE username='$username'";
    $resultado=mysql_query($sql);
    $row=mysql_num_rows($resultado);
    if($row != 0) {
        echo ($row['$fields($i)']);
    } else {
        echo (" No ".$fields($i)." inserted!");
    }
}
for ($i=0; $i<15; $i++) {
    fields($i);
}  

该函数必须存在并且$fields是一个数组,我希望它可以工作。

于 2011-07-31T21:49:09.413 回答
0

你到底想完成什么?比如最终结果应该怎么做?您是否只是想检查是否填写了一行中的字段?对我来说,看起来你的生活比你需要的更复杂。

编辑:

这就是我将如何做到的。把它放在你的 connect.php 中:

$user = array();
$username = mysql_real_escape_string($_SESSION['username']);
$query = "SELECT * FROM users WHERE username='{$username}'";
$rs = mysql_query($query);
$row = mysql_fetch_array($rs);

foreach($row as $key => $value) {
    $user[$key] = $value;
}

有了这个,您应该能够通过 $user['id'] 或 $user['password'] 访问任何用户字段,前提是包含 connect.php。

我希望这可以帮到你。

编辑2:

更简单:

$username = mysql_real_escape_string($_SESSION['username']);
$query = "SELECT * FROM users WHERE username='{$username}'";
$rs = mysql_query($query);
$user = mysql_fetch_array($rs);
于 2011-07-31T21:58:31.547 回答
0

我知道它很旧,但是,这仍然有效......

function test_one(){
print "one";
}
function test_two(){
print "two";
}
$var = "test_two";
$var();
于 2017-03-05T01:19:31.967 回答
-4

您可以只使用 php 的fwrite,然后像往常一样将函数写入文件。即fwrite($handle,'<?php function '.$function_name.' { //function contents here } ?>');我不会推荐这个,但它是可行的。

于 2011-07-31T21:46:55.337 回答