function.phpとindex.phpを使用しています。
function.phpで定義した関数でDBから取得した値を変数に格納し、index.phpで呼びだし、foreachで繰り返し処理をしたいのですが、
Warning: Invalid argument supplied for foreach() in ****
というエラーが出力され、配列がうまく返されません。
どのようにすればindex.phpで$columnsという配列を出力することができるでしょうか。
ご教授いただけますと幸いです。
【環境】
PHP:5.6
MySQL:5.5
【function.php】
lang
1// DBに登録されている値を取得 2function getColums($table) { 3 $dbh = connectDb(); 4 $columns = array(); 5 $sql = "select * from $table order by created desc"; 6 foreach ($dbh->query($sql) as $row) { 7 array_push($columns, $row); 8 } 9 10 // ここで配列が出力されるのは確認済みです。 11 // foreach ($columns as $colum) { 12 // var_dump($colum); 13 // } 14}
【index.php】
lang
1 <!-- このforeachでエラーが出力されます --> 2 <?php foreach ($columns as $column) : ?> 3 <? var_dump($column); ?> 4 <input type="radio" name="lens_name" value="<?php echo h($column['lens_name']); ?>" id="idnumber<?php echo h($idnumber); ?>"> 5 <label for="idnumber<?php echo h($idnumber); ?>"><?php echo h($column['lens_name']); ?></label> 6 <?php $idnumber++; ?> 7 <?php endforeach; ?>
・追記
【test.php】を作成し、1つのファイルにまとめました。
lang
1 2<?php 3ini_set('display_errors', 1); 4 5require 'config.php'; 6 7// DBコネクト 8function connectDb() { 9 try { 10 return new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD); 11 } catch (PDOException $e) { 12 echo $e->getMessage(); 13 exit; 14 } 15} 16 17// クロスサイトスクリプティング対策 18function h($s) { 19 return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); 20} 21 22 23// DBに登録されている値を取得 24function getColums($table) { 25 $dbh = connectDb(); 26 $columns = array(); 27 $sql = "select * from $table order by created desc"; 28 foreach ($dbh->query($sql) as $row) { 29 $columns[] = $row; 30 } 31 32 //出力される 33 var_dump($columns); 34} 35?> 36 37<!DOCTYPE html> 38<html lang="ja"> 39<head> 40 <meta charset="utf-8"> 41 <title>Image Uploader</title> 42</head> 43<body> 44 <form action="" method="post" enctype="multipart/form-data"> 45 <ul> 46 <li> 47 <?php 48 getColums("post"); 49 $idnumber = 1; 50 // 出力されない 51 var_dump($columns); 52 ?> 53 <?php foreach ($columns as $column) : ?> 54 <input type="radio" name="lens_name" value="<?php echo h($column['lens_name']); ?>" id="idnumber<?php echo h($idnumber); ?>"> 55 <label for="idnumber<?php echo h($idnumber); ?>"><?php echo h($column['lens_name']); ?></label> 56 <?php $idnumber++; ?> 57 <?php endforeach; ?> 58 </li> 59 </ul> 60 </form> 61 62</body> 63</html>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/12 04:00
退会済みユーザー
2015/11/12 04:05
2015/11/12 06:15 編集
2015/11/12 06:39
退会済みユーザー
2015/11/12 06:43
2015/11/12 08:08