我最近教过数组系统来缩短我在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
答案 0 :(得分:1)
在PHP中,您无法创建名称基于变量的函数。
此外,在这个例子中你不会获得太多收益,我认为使用起来要清楚得多:
function user_get_field($fieldname)
现在,如果您需要多个字段,这将导致执行多个查询,因此最好检索所有内容并对其进行缓存。
嘿,您甚至可以在会话中存储与用户相关的所有内容,并在更改自己的设置时对其进行更新。这是每个会话只有一个查询。
答案 1 :(得分: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
是一个数组,我希望它能正常工作。
答案 2 :(得分: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);
答案 3 :(得分:0)
嗯,我不确定整体方法,但只是为了好玩....你可以使用variable variables来触发anonymous functions,如下所示:
<?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()
答案 4 :(得分:0)
我知道它的旧,但仍然是这个作品......
function test_one(){
print "one";
}
function test_two(){
print "two";
}
$var = "test_two";
$var();
答案 5 :(得分:-4)
您可以使用php的fwrite,并像往常一样将函数写入文件。即fwrite($handle,'<?php function '.$function_name.' { //function contents here } ?>');
我不推荐这个,但它是可行的。