0

"Welcome back, <name>."ログインし直したときにブログにを表示しようとしています。phpを使用してデータベースにアクセスし、現在使用しているユーザー名の名前と名前を取得して$_SESSION['username']、インデックスに出力し直しています。

したがって、データベースをクエリする関数は次のとおりです。

 function get_full_name($username){

    $real = array();

    $query = mysql_query("SELECT `name`, `last` FROM `users` WHERE `user` = `{$username}`");

    $row = mysql_num_rows($query);

    foreach($row as $k => $v)
    {
        $real[$k] = $v;
    }

       return $real;
  }

次に、上記の関数を呼び出すhtmlの部分:

<div id="menu">
    <?php 
            $temp = $_SESSION['username'];
            $real[] = get_full_name($temp);
            if(isset($_SESSION['username']))
            {
                echo '<br />'.'Welcome back, '. $real['name'] . '.';
            }
    ?>
    </div>

上記のコードの出力は次のとおりです。

 Welcome back, .

var_dump($ real)は以下を提供します:

array(1) { [0]=> array(0) { } } 

mysql_fectch_assocに変更した後のvar_dump($ real):

array(0) { }
  • 修正:エラーが一重引用符を使用していなかった'{$ username}'

それらを変えることによって、それは魅力のように働きました、みんなに乾杯!

4

5 に答える 5

2

不思議なことmysql_num_rowsに、クエリの結果を取得するために使用しています。これは行数のみを返します。mysql_fetch_assoc結果の連想配列を取得するために使用する方が良いでしょう。

また、クエリ内でバッククォートを一重引用符に変更する必要があり{$username}ます。

何かのようなもの:

function get_full_name($username){

    $real = array();

    $query = mysql_query("SELECT `name`, `last` FROM `users` WHERE `user` = '{$username}'");

    $row = mysql_fetch_assoc($query);

    foreach($row as $k => $v)
    {
        $real[$k] = $v;
    }

    return $real;
}
于 2012-06-12T10:59:25.637 に答える
1

関数get_full_name()は次のようになります。

function get_full_name($username) {
   $real  = array();
   $query = mysql_query("SELECT `name`, `last` 
                         FROM `users` 
                         WHERE `user` = '{$username}'");
   if (mysql_num_rows($query)) {
     $real = mysql_fetch_assoc($query);
   }

   return $real;
}

ノート:

  • 変数には一重引用符を使用します:'{$username}'の代わりに`{$username}`
  • mysql_num_rows()結果が空でないかどうかを確認するために使用します。
  • mysql_fetch_assoc()行を取得するために使用します。

関数の呼び出し:

$temp = $_SESSION['username'];
$real = get_full_name($temp);
if (isset($temp) && count($real)) {
   echo '<br />Welcome back, '. $real['name'] . '.';
}

ノート:

  • $realの代わりに使用してください$real[]
  • $realで空かどうかを確認しcount()ます。
于 2012-06-12T11:16:17.140 に答える
0

この行を変更します$row = mysql_fetch_array($query);

于 2012-06-12T10:59:03.453 に答える
0

私が見る2つの問題。

1)mysql_num_rowsデータベースからデータの配列をフェッチするのではなく、を使用しています。

function get_full_name($username){

    $real = array();

    $query = mysql_query("SELECT `name`, `last` FROM `users` WHERE `user` = `{$username}`");

    $row = mysql_fetch_assoc($query);

    foreach($row as $k => $v)
    {
        $real[$k] = $v;
    }

    return $real;
}

$real2)コード内の多次元配列のように見えます。代わりにこれを試してください:

<div id="menu">
    <?php 
            $temp = $_SESSION['username'];
            $real = get_full_name($temp);
            if(isset($_SESSION['username']))
            {
                echo '<br />'.'Welcome back, '. $real['name'] . '.';
            }
    ?>
    </div>

[]の最後にあるを削除したことに注意してください$real

于 2012-06-12T11:01:52.713 に答える
0

mysql_query()を使用してクエリの実行結果を取得してから、mysql_fetch_assoc()を使用して個々の行を取得します。

$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result))
{
   var_dump($row);
}

mysql_num_rows($ result)は、指定された結果の行数を返すことに注意してください。

于 2012-06-12T11:02:36.340 に答える