Codeigniterでのviewへの受け渡し

このQ&Aのポイント
  • Codeigniterを使用してデータベースからデータを取得し、viewに受け渡す方法が分からない。
  • データベースへの接続は成功しているが、viewにデータが受け渡せずエラーが発生している。
  • controllerとviewのコードを確認し、データの受け渡しに問題があることが分かった。
回答を見る
  • ベストアンサー

Codeigniterでのviewへの受け渡し

Codeigniterを使用しています。 databaseからデータを取得するまでは出来るのですが、 viewへの受け渡しと表示がうまくいきません。 データベースへの接続は出来ていますので、単にソースの不備 と思いますが、どこが悪いのかよく分かりません。ご教授頂きたく お願いいたします。 現在の仕様 【controllers/tel2.php】 <?php class Tel2 extends CI_Controller{ function index() { // データベースを初期化(データの取得:ActiveRecord) $this->load->database(); // SQLの実行 $this->db->select('id, prefecture_name,prefecture_name_en'); $query = $this->db->get('prefectures'); // 結果を表示 foreach( $query->result() as $row ){ $data['prefectures'] = array('id, prefecture_name,prefecture_name_en'); $this->load->view('tel2_view', $data); } } } ?> 【views/tel2_view.php】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>tel2</title> </head> <body> <table width="700" border="1" cellspacing="2" cellpadding="2"> <tr> <th scope="col">id</th> <th scope="col">県名</th> <th scope="col">en</th> </tr> <tr> <td><?=$row['id']?></td> <td><?=$row['prefecture_name']?></td> <td><?=$row['prefecture_name_en']?></td> </tr> </table> </body> </html> としてみました。 フレームは表示され、データの数だけ繰り返されているのですが、 肝心なデータの内容が下記のようになります。 【id欄】 A PHP Error was encountered Severity: Notice Message: Undefined variable: row Filename: views/tel2_view.php Line Number: 18 【prefecture_name欄】 Severity: Notice Message: Undefined variable: row Filename: views/tel2_view.php Line Number: 19 【prefecture_name_en欄】 Severity: Notice Message: Undefined variable: row Filename: views/tel2_view.php Line Number: 20 上記がデータの数だけ繰り返されます。(内容に変化なし) database接続は下記となります。 (xamppのためパスワードは設定していません) $active_group = 'default'; $active_record = TRUE; $db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'root'; $db['default']['password'] = ''; $db['default']['database'] = 'tel'; $db['default']['dbdriver'] = 'mysql'; $db['default']['dbprefix'] = ''; $db['default']['pconnect'] = FALSE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ''; $db['default']['char_set'] = 'utf8'; $db['default']['dbcollat'] = 'utf8_general_ci'; $db['default']['swap_pre'] = ''; $db['default']['autoinit'] = TRUE; $db['default']['stricton'] = FALSE; いろいろ弄ってみたのですが、うまくいきません。 controllerを下記のようにするとデータが表示されますので、データの取得までは 出来ているようです。 viewへの受け渡しでミスがあるのだと思います。 <? class Tel2 extends CI_Controller{ function index() { // データベースを初期化(データの取得:ActiveRecord) $this->load->database(); // SQLの実行 $this->db->select('id, prefecture_name,prefecture_name_en'); $query = $this->db->get('prefectures'); // 結果を表示 foreach( $query->result() as $row ){ echo $row->id; echo $row->prefecture_name; echo $row->prefecture_name_en; } } } いろいろ試してみたのですがうまくいきません。 お手数ですがどこに間違いがあるのかご教授願います。 環境は以下のとおりです。 xampp for windowsXP codeigniter2.0.3 Apache/2.2.21 (Win32) PHP/5.3.8 mysql5.5.16

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは。 View側で、$rowを参照していますが、 foreach( $query->result() as $row ){ $data['prefectures'] = array('id, prefecture_name,prefecture_name_en'); $this->load->view('tel2_view', $data); } なので、読み捨てられていますよ? Viewに渡しているのは、$dataです。

tajix14
質問者

お礼

ご回答頂き有難う御座います。 そのままではうまくいきませんでしたが、試行錯誤の後 下記の方法でうまくいきました。 お忙しいところご対応頂き有難う御座いました。 【Contrller】 <? class Tel5 extends CI_Controller{ function index() { // データベースを初期化(データの取得:ActiveRecord) $this->load->database(); // SQLの実行 $this->db->select('id, prefecture_name,prefecture_name_en'); $data['query'] = $this->db->get('prefectures'); // 結果を表示 $data['prefectures'] = array('id', 'prefecture_name','prefecture_name_en'); $this->load->view('tel5_view', $data); } } ?> 【view】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無題ドキュメント</title> </head> <body> <table width="700" border="1" cellspacing="2" cellpadding="2"> <tr> <th scope="col">id</th> <th scope="col">県名</th> <th scope="col">en</th> </tr> <?php foreach ($query->result() as $row):?> <tr> <td><?=$row->id?></td> <td><?=$row->prefecture_name?></td> <td><?=$row->prefecture_name_en?></td> </tr> <?php endforeach;?> </table> </body> </html>

tajix14
質問者

補足

早速のご回答有難うございます。 >なので、読み捨てられていますよ? 申し訳ございません。 いろいろWEBで調べてこのような記述が正と思っており、 ご指摘いただいたことにたいする修正をする知識を持っておりません。 大変お手数で恐縮ですがソースを修正いただけますと幸いです。 (当方趣味でやっており、プロではありません。大変お恥ずかしいお願いで恐縮です。よろしくお願いいたします。)

その他の回答 (1)

回答No.2

こんにちは。 Codeigniterを使った事がないのでアレなんですが・・・。 foreach( $query->result() as $row ){ $data['prefectures'] = array('id, prefecture_name,prefecture_name_en'); $this->load->view('tel2_view', $data); } を foreach( $query->result() as $row ){ $data['prefectures'][] = array('id' => $row['id'], 'prefecture_name' => $row['prefecture_name'], 'prefecture_name_en' => $row['prefecture_name_en']); $this->load->view('tel2_view', $data); } して、 <tr> <td><?=$row['id']?></td> <td><?=$row['prefecture_name']?></td> <td><?=$row['prefecture_name_en']?></td> </tr> を <?php foreach ($prefectures as $row):?> <tr> <td><?=$row['id']?></td> <td><?=$row['prefecture_name']?></td> <td><?=$row['prefecture_name_en']?></td> </tr> <?php endforeach;?> とかってすれば、出力されそうな気が・・・ムニャムニャ。 勝手にキーが変数になるのはどうなんかねぇ・・・? 独り言。

関連するQ&A

  • ブラウザにテーブルのレコードが表示されません

    初めまして。 PHP初心者のものです。 CodeIgniterを使用して、MySQLのテーブルの一覧をブラウザ上で表示させていと思っています。ですが、画面は表示されるのですが、レコードの部分がまったく表示されず困っています。 よろしければご教授のほど、よろしくお願いいたします。 #controllers/helo.php <?php class Helo extends CI_Controller { function Helo() { parent::__construct(); } public function index () { $data = array ('head_title' => 'index', 'content' => 'index'); $data['records'] = $this->db->get('blogs')->result_array(); $this->load->view('layout/mylayout', $data); } } #views/index.php <h1>Blog一覧</h1> <p>テーブルの一覧です</p> <table> <tr> <th>ID</th> <th>DATE</th> <th>TITLE</th> <th>CONTENT</th> </tr> <?php foreach($records as $row): ?> <?= "<tr><td> {$row['id']} </td>" ?> <?= "<td>" . date ('Y/m/d', $row['timestamp']) . "</td>" ?> <?= "<td> {$row['title']} </td>" ?> <?= "<td> {$row['content']} </td></tr>" ?> <?php endforeach; ?> </table> #views/layout/mylayout.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title><?= $head_title ?></title> <link rel="stylesheet" type="text/css" href="/igniterapp/css/mylayout.css" /> </head> <body> <table class="content_table"> <tr><td> <?php $this->load->view('layout/header.php'); ?> </td></tr> <tr><td> <?php $this->load->view($content); ?> </td></tr> <tr><td> <?php $this->load->view('layout/footer.php'); ?> </td></tr> </table> </body> </html> #views/layout/footer.php <p class="footer">this is Footer.</p> #views/layout/header.php <p class="header"> this is header.</p> #config/database.php $active_group = 'default'; $active_record = TRUE; $db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'mysql'; $db['default']['password'] = 'password'; $db['default']['database'] = 'igniter_db'; $db['default']['dbdriver'] = 'mysql'; $db['default']['dbprefix'] = ''; $db['default']['port'] = '3306'; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = FALSE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ''; $db['default']['char_set'] = 'utf8'; $db['default']['dbcollat'] = 'utf8_general_ci'; $db['default']['swap_pre'] = ''; $db['default']['autoinit'] = TRUE; $db['default']['stricton'] = FALSE; ■環境 ・osはCentOS6.2です。 ・CodeIgniterのバージョンは2.1.2です。 ・PHPのバージョンは5.3.3です。 ・MySQLのバージョンは5.5.25です。 個人的には「$this->db->get('blogs')->result_array();」 の部分でテーブルの情報が取得されていないので、後のforeach文が実行されず終了しているのだと思うのですが、対処法がわからない状態です。(見当違いでしたら申し訳ございません) 分かりにくい文章で申し訳ございませんが、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • jquery codeigniterからデータ取得し表示する

    こんばんは。jquery初心者ですので、説明不足があればご指示ください。 codeigniterとjqueryを利用しています。 下記、class="name1"とclass="email1"のデータを、test/test2に渡し、 aaaで値を受け取っています。 受取る値が、Arrayと出ますが、それを表にする場合、どのようにすればいいのでしょうか? 【希望する表示】*例えばtableにする場合 <table> <tr> <td>担当者</td><td>名前</td><td>会社名</td> </tr> ~ここからデータ分ループ?~ <tr> <td>tantosha</td><td>name_jp</td><td>kaishamei</td> </tr> ~ここまでデータ分ループ?~ </table> 【jquery側】 $(".test").click(function(){ var serial = $('.name1').serialize() + '&' + $('.email1').serialize(); $.post("test/test2", serial, function(aaa){ alert(aaa);→分からないので、今はこうしてます^^ }); }); 【codeigniter側】 function test2(){ $a_name = $this->input->post('name1'); $email1 = $this->input->post('email1'); $this->db->select('tantosha'); $this->db->select('name_jp'); $this->db->select('kaishamei'); $this->db->from('テーブル名'); $where = "name_en like '%".$a_name."%' || email1 = '".$email1."'"; $this->db->where($where); $query = $this->db->get(); echo $query->result();

  • php + mysql でフォーム作成時のエラー

    データベースから取り出したデータをラジオボタンで選択し、それをデータベース(別のテーブル)に追加させる機能を作りたいです。 非常に初歩的なことだとは思うのですがご教授ください。 MySQL 4.0.27 PHP 5.2.11 <FORM ACTION="cone3.php" METHOD="post"> <?php $srv = ""; // サーバー名 $id = ""; // ユーザーID $passwd = "; // パスワード $dbn = ""; // データベース名 $sql = "SELECT code, lname, lecturer, kind, gradetype FROM Lecture"; // SQL文 // データベースに接続する $db = mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs = mysql_query($sql,$db); //--- テーブルのレイアウト --- 開始 -----------------------> print("<TABLE><TR>"); print("<TR><th> </th><th>講義名</th><th>教員</th><th>科目区分</th><th>配当学年</th></tr>"); while($row = mysql_fetch_array($rs)) { print '<tr><td><input type="radio" name="regist" value="$row['code']"></td>'; print '<td>' . $row['lname'] . '</td>'; print '<td>' . $row['lecturer'] . '</td>'; print '<td>' . $row['kind'] . '</td>'; print '<td>' . $row['gradetype'] . '</td>'; print '</tr>'; print ("</TR>"); } print("</TABLE>"); print_r($_POST); echo "<br />\n"; mysql_free_result($rs); mysql_close($db); //--- 終了 ---> ?> <input type="submit" name="submit" value="送信"> </form> 以上のようなソースでラジオボタンで配列の$row[code]の値を送りたいんですがうまくいきません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 集計表が作れない

    集計表が作れない お世話になります あるレンタルサーバーでウェブページを作成しています 環境はWin vista PHP5 apache2.2 mysqlです。レンタルサーバーの都合によりViewが作成できませんので PHPで集計表を作成しようと思っています。一覧のcolumn列の総数を求めようというものです。 下記のコードのようにしたのですがうまく表示できません。よろしくご教示願います。 これより上省略ーーーーーーーーーーー <table border=1> <tr> <th>合計</th> </tr> <?php while($row = mysql_fetch_assoc($result)) { $mino = $row['suu']; $goukei = $row['kei']; $row['kei'] = sum($mino);//←ここがうまく書けていない? $data_id = $row['id']; echo '<tr>'; echo '<td><input type="radio" name="select" value='.$data_id.'></td>'; echo '<td>'.$data_id.'</td>'; echo '<td>'.$row['kei'].' </td>'; echo '</tr>'; } ?> </table> <input type="submit" value="詳細を見る"> </form> <?php

  • phpからdbへアクセスし、レコードを削除したい

    mysql・php初心者です。 現在、mysqlを使ってデータベースの構築をしています。 レコードの登録、検索に関しては出来たのですが、 何故かレコードの修正と削除が出来ません。 教えてください。 プライマリーキーはshop_id($shop_id)で、任意で数字を付けれるようにしてあります。 登録したデータベース側の表示は extract($_POST); $db = mysql_connect("localhost","********","********") or error_func(); mysql_select_db("******") or error_func(); mysql_query("set names utf8"); $result = mysql_query("select * from mobile_shop_entry where shop_name = '$shop_name'"); echo "<h3 class='message'>" . $shop_name . "の店舗情報を表示</h3>\n"; while($row = mysql_fetch_array($result)){ echo "<table id='table_02'><tr><th colspan='2' align='left' >" . $row['shop_name'] . "</th></tr>\n"; echo "<tr><th>会社名</th><td>" . $row['shop_name'] . "</td></tr>\n"; echo "<tr><th>住所</th><td>" . $row['shop_area'] . $row['shop_address'] . "</td></tr>\n"; echo "<tr><th>電話番号</th><td>" . $row['shop_tel'] . "</td></tr>\n"; echo "<tr><th>E-mail</th><td>" . $row['shop_mail'] . "</td></tr>\n"; echo "<tr><th>営業時間</th><td>" . $row['shop_time_am'] . "~" . $row['shop_time_pm'] . "</td></tr>\n"; echo "<tr><th>定休日</th><td>" . $row['shop_holiday'] . "</td></tr>\n"; echo "<tr><th>ID</th><td>" . $row['shop_id'] . "</td></tr>\n"; echo "<tr><td colspan='2' align='right'>\n"; echo "<img src='../images/edit-page-blue.gif'> <a href='shop_syuusei.php?shop_id="; echo $row['shop_id']; echo "'>ショップ情報を修正</a>\n"; echo " <img src='../images/delete-page-red.gif'> <a href='shop_sakujyo.php?shop_id="; echo $row['shop_id']; echo "'>ショップ情報を削除</a>\n"; echo " <img src='../images/edit-yellow.gif'> <a href='car_entry.php?car_id=\n"; echo $row['shop_id']; echo "'>在庫情報を登録</a></td></tr>\n"; } echo "</table>\n"; mysql_close($db) exit(); } ?> と記述しました。 このレコードを削除するには、上記のリンク部分 <a href='shop_sakujyo.php?shop_id="; echo $row['shop_id']; から、shop_sakujyo.phpという名前のファイルに <?php extract($_POST); extract($_GET); mysql_connect("localhost","*****","*****"); mysql_select_db("*******"); mysql_query("set names utf8"); //情報を削除 if($kakunin=="確認"){ $sql = "delete from mobile_shop_entry where shop_id = $shop_id "; mysql_query($sql); echo "<h1 class='message_red'>レコードの削除が完了しました。</h1>\n"; exit; } ?> 表示は削除が完了しました。と表示されるのですが、実際のデータは削除されていません。 どこが間違っているのかご存じのかたはいらっしゃいますでしょうか。。。 phpは5.0を使っています。

    • ベストアンサー
    • MySQL
  • PHPでレコード一覧から詳細へのリンク方法

    MySQLでデータベースを構築し、PHPで表示しています。 レコードを一覧で並べるのはうまく行きましたが…一覧から詳細へリンクさせるのがうまく行きません。 detail.phpというファイルを作成してリンクさせようと思っていますが… (1)formタグを使って、GETでSUBMITする形にする場合はどうしたらいいでしょうか? (2)普通にaタグを使って、detail.php?id=xxxxx という形にする方法でもいいのですが、リンクを教えてdetail.phpに移った時点で"?"以下が消えてしまいます。 (1)の方法がやり易いかと思い、色々調べて自分なりにやってみましたが、"detail.php?id=%BE%DC%BA%D9&id=1&id=4&id=3&id=5&id=6&id=7&id=9&id=10&id=11" という形になり、なんでか全てのIDを並べている形になっています… 理想はdetail.php?id=xxxxxとなって欲しいのですが… ちなみにコードは以下の通りです。 <? php echo "<table>"; echo "<tr>"; echo "<th>ID</th>"; echo "<th>名前</th>"; echo "<th>所在地</th>"; echo "<th>詳細</th>"; echo "</tr>"; while( $row = mysql_fetch_array($result) ) { echo "<form method=\"GET\" action=\"detail.php?id=".$row["id"]."\">"; echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".$row["name"]."</td>"; echo "<td>".$row["addr"]."</td>"; echo "<td><input type=\"submit\" value=\"詳細\" name=\"id\"></td>"; echo "<input type=\"hidden\" value=\"".$row["id"]."\" name=\"id\">"; echo "</tr>"; } echo "</table>"; ?>

    • ベストアンサー
    • MySQL
  • MySQL 5 PHP 5 データの受け渡しについて 困ってます。。

    MySQL 5 PHP 5 データの受け渡しについて 困ってます。。 下記内容で困ってます。機能としては (1)プロダクトテーブルからデータを読み込み表示。 ※プロダクトテーブルには商品データが8件登録されています。 (2)注文ボタンが押されたら受注テーブルにデータをカキコミ。 なんですが。。。 プロダクトテーブルから読み込んだデータを受注テーブルに書き込むと $product_id がいつも8(受注テーブルデータの一番最後の数字) $product_name  同じ $product_price 同じ ・・・ になってしまいます。 whileループしているので変数に代入するのも繰り返されて一番最後のデータが いつも格納されている状態だと思うのですが、この解決策を教えて下さい! 最近始めたばかりで良く理解出来ないので噛み砕いて教えてくれる方お願いします>< <?php //---------------------------------------- // □:テーブルからデータを読む //---------------------------------------- $mysql->query("SELECT * FROM products ORDER BY product_id") or die(mysql_error()); while($row = $mysql->fetch()){ $product_id = $row["product_id"]; $product_name = $row["product_name"]; $product_price = $row["product_price"]; echo <<<EOT <tr> <td align="center">$product_id<input name="product_id" type="hidden" value="$product_id" size="10" /></td> <td align="center">$product_name<input name="product_name[$product_id]" type="hidden" value="$new_product_name" size="10" /></td> <td align="right">$product_price<input name="product_price[$product_id]" type="hidden" value="$new_product_price" size="10" /></td> <td><input name="new_use_date[$product_id]" type="text" value="$new_use_date" size="20" /></td> <td><input name="new_use_time[$product_id]" type="text" value="$new_use_time" size="20" /></td> <td><input name="remarks[$product_id]" type="text" value="$new_remarks" size="40" /></td> <td><input name="submit_add" type="submit" value="注文する" /></td> </tr> EOT; } //ここまでwhileループ[終了の閉じカッコ] ?>

    • ベストアンサー
    • MySQL
  • PHPでセッションを使った受け渡しについて

    PHPでECサイトのカート機能を作っています。 まず商品一覧画面(index.php)にデータベースから読み取ったidとNAME、そして個数、サイズ、包装の有無のセレクトボックスを表示します。 それぞれの商品の追加ボタンを押すとカートのphp(t_cart.php)に飛んで上記の情報を全て表示できるようにしたいのですが、idとNAMEと個数の情報は受け渡せるのですが、サイズや包装の有無は別の商品を追加すると全ての商品の情報が上書きされてしまいます。 コードの一部を記載しておきます。 まだPHPを始めたばかりで初歩的な事がわからないのですが、ぜひ御知恵をお貸しいただければとおもいます。 よろしくお願いします。 ・index.php <table> <?php foreach ($Menu as $g) { ?> <tr> <td> <p class="Menu"><?php echo $g['id'] ?></p> </td> <td> <p><?php echo $g['NAME'] ?></p> </td> <form action="t_cart.php" method="post"> <td> <a>個数:</a> <select name="num"> <?php for ($i = 1; $i <= 10; $i++) { echo "<option>$i</option>"; } ?> </select> </td> <td> <a>サイズ:</a> <select name="size"> <option>S</option><option>M</option><option>L</option> </select> </td> <td> <a>包装:</a> <select name="deco"> <option>有</option><option>無</option> </select> </td> <td> <input type="text" name="id" value="<?php echo $g['id'] ?>"> <input type="submit" name="submit" value="go to cart"> </td> </form> </tr> <?php } ?> </table> ・t_cart.php <?php require 'common.php'; $rows = array(); $sum = 0; $pdo = connect(); if (!isset($_SESSION['cart'])){ $_SESSION['cart'] = array(); } if (@$_POST['submit']) { @$_SESSION['cart'][$_POST['id']] += $_POST['num']; } foreach($_SESSION['cart'] as $id => $num) { $st = $pdo->prepare("SELECT * FROM Menu WHERE id=?"); $st->execute(array($id)); $row = $st->fetch(); $st->closeCursor(); $row['num'] = strip_tags($num); $row['size'] = $_POST['size']; $row['deco'] = $_POST['dough']; $rows[] = $row; } ?>

    • 締切済み
    • PHP
  • データの受け渡し(表内に収めたいのですが)

    phpで表から表へデータを飛ばし表示させようとしています。 例 ___________________ |_A___|__B___|___C__| |_____|______|_______| ↓ ___________________ |_A___|__B___|___C__| |_____|______|_______| 例えば、下記のようなソースsample.php→sample4.php を作りました。 データは飛ばすことが出来ますが、表内に収める場合 どのようにすればよいですか? ちなみに、YPHPSampleは、ソースがおいてあるディレクトリです。 (1)sample.php <html> <head> <title>サンプル</title> <head> <body> <table border="2"> <tr bgcolor="#AAAAAA"> <td><th>都市名</th></td> <td><th>最高気温</th></td> <td><th>最低気温</th></td> </tr> <tr bgcolor="#AAAAAA"> <td><th> <form action="http://localhost/YPHPSample/sample4.php" method="post"> <input type="text" name="aut"/> </th></td> <td><th> <form action="http://localhost/YPHPSample/sample4.php" method="post"> <input type="text" name="soft"/> </th></td> <td><th> <form action="http://localhost/YPHPSample/sample4.php" method="post"> <input type="text" name="hard"/> </th></td> </tr> </table> <input type="submit" value="送信"/> </form> </body> </html> (2)sample4.php <html> <head> <title>サンプル</title> </head> <body> <table border="2"> <tr bgcolor="#AAAAAA"> <td><th>都市名</th></td> <td><th>最高気温</th></td> <td><th>最低気温</th></td> </tr> </table> <?php if($_POST["aut"]) print"{$_POST["aut"]}<br/>\n"; if($_POST["soft"]) print"{$_POST["soft"]}<br/>\n"; if($_POST["hard"]) print"{$_POST["hard"]}<br/>\n"; ?> </body> </html>

    • 締切済み
    • PHP
  • PDOでDB

    PDOでDBを表示させ修正ボタンを押し別ウインドウが開き選んだデータの修正を行いたいのですがupdate2.phpでエラ-メッセージが出ます。どうやったら直りますか 下記のメッセージです Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\WWW\test\htdoes\update2.php on line 4 レコードを修正しました。 ちなみに 番号 int プライマリ-キ- 氏名 varchar 住所 varcharです 下記はソースです 一覧画面 <HTML> <HEAD> <TITLE>一覧画面</TITLE> </HEAD> <BODY> <table border="1"> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> <th>操作</th> </tr> <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->query("SELECT * FROM tbl_test"); while ($row = $st->fetch()) { $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); echo "<tr><td>$ID</td><td>$NAME</td><td>$ADDR</td><td><a href='update.php?番号=$ID'>修正</a></td></tr>"; } ?> </table> </BODY> </HTML> アップデートの入力フォーム update.php <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> 氏名<br> <input type="text" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデートの処理 update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 番号=?,氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 アップデートの処理 update2.phpで 最初のエラーが出ます