0

データベースクエリから取得した配列に対して foreach を実行しようとしていますが、何らかの理由で機能しません。これは単純な構文エラーですか、それとも何か他のものですか?

  global $user
  $ras = db_query("SELECT * FROM {table} WHERE id='%s'", $user->name); 
  $sas = db_fetch_array($ras);  
  $arr = array("one",2,3,"four",5);

  $form['questionnaire'] = array (
    '#type'=>'fieldset', 
    '#title'=> 'test', );

  foreach ($arr as $id => $value){ 
  $form['questionnaire']['fill'.$id] = array(
    '#type'=>'textfield',
    '#title'=> $value,
  );
  }

ただし、次の場合は機能しません。

  foreach ($sas as $id => $value){ 
  $form['questionnaire']['fill'.$id] = array(
    '#type'=>'textfield',
    '#title'=> $value,
  );
  }
4

2 に答える 2

1

クエリが単一の結果を返さない限り、結果の配列を期待しているので疑わしいですが、構文に何かが欠けています。db_fetch_array1行のみをフェッチします。だからあなたはこのようなことをする必要があります。

$form['questionnaire'] = array(
  '#type' => 'fieldset',
  '#title' => 'test',
);

global $user;
$result = db_query("SELECT * FROM {table} WHERE id='%s'", $user->name);

// Remember that $row is an array where the key names map the column names in your table
// So if you have a column 'id' and another one 'value' you can access the
// value for one row like this $row['id] and $row['value']
while ($row = db_fetch_array($result)) {
  $form['questionnaire']['fill' . $row['id']] = array(
    '#type' => 'textfield',
    '#title' => $row['column_name'],
  );
}

2013年2月7日更新foreach()代わりにループを使用while()

foreach (db_fetch_array ($row) as $row) {
    echo $row['name'];
}
于 2013-02-05T13:07:54.057 に答える
0

構文は正しいように見えますが、明らかな答えは、クエリがデータを返していないということです。グローバル $user を忘れてしまった可能性はありますか? これには、Developer モジュールが役立ちます。

于 2013-01-31T15:15:00.587 に答える