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)

複数のフィールドが必要な場合は、複数のクエリを実行することになるため、すべてを取得してキャッシュすることをお勧めします。

ユーザーに関連するすべてのものをセッションに保存し、ユーザーが自分の設定を変更したときにそれを更新することもできます。これは、セッションごとに 1 つのクエリのみです。

于 2011-07-31T21:59:19.720 に答える
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

まあ、全体的なアプローチについてはわかりませんが、楽しみのために....可変変数を使用して、次のような無名関数をトリガーできます。

<?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

正確に何を達成しようとしていますか?最終結果はどうするべきですか?行のフィールドが入力されているかどうかを確認しようとしていますか? 私には、あなたは必要以上に人生を複雑にしているように見えます。

編集:

これが私がそれを行う方法です。これを 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;
}

これにより、connect.php が含まれている場合、$user['id'] または $user['password'] に移動することで、任意のユーザー フィールドにアクセスできるようになります。

これがお役に立てば幸いです。

編集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 に答える
-4

phpのfwriteを使用して、通常どおりに関数をファイルに書き込むことができます。つまりfwrite($handle,'<?php function '.$function_name.' { //function contents here } ?>');、これはお勧めしませんが、実行可能です。

于 2011-07-31T21:46:55.337 に答える