• 締切済み

UPDATEできない

PHP初心者です。 先日より、PHPプログラムを勉強しており、「参照」、「追加」、「修正」、「削除」の一連の流れを理解しました。 スタッフ登録をするという仮定で、上記流れをPHPでできるようになり、データベースの更新もできるようになりました。 登録 → 表示 や、一覧を表示して、ラジオボタンで選んだスタッフの情報修正などです。 現在、上記流れの延長として、商品の登録から、修正、削除に挑戦していますが、情報修正時、ページはスタッフ登録と同じように最後までエラー無く進みますが、データベースが更新されません。 何故初心者の為、解決策の探し方すら判らない為困っています。 どなたかお解りになる方、恐れ入りますがご教授頂ければ幸いです。 データを修正するソースです <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>どっとこむ</title> </head> <body> <?php try { $pro_code = $_POST['code']; $pro_name = $_POST['name']; $pro_price = $_POST['price']; $pro_code = htmlspecialchars($pro_code); $pro_name = htmlspecialchars($pro_name); $pro_pass = htmlspecialchars($pro_price); $dsn = 'mysql:dbname=xxxx;host=xxxxx'; $user = 'userid'; $password = 'password'; $dbh = new PDO($dsn,$user, $password); $dbh->query('SET NAMES utf8'); $sql = 'UPDATE mst_productSET name=?,price=? WHERE code=?'; $stmt = $dbh->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $data[] = $pro_code; $stmt->execute($data); $dbh = null; print 'を追加しました。<br />'; } catch (Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> <a href="pro_list.php">戻る</a> </body> </html> 上記表示される前のページ(修正する情報を入力するページ)から、上記ページまではデータが渡っている状態です。 <?php print $pro_name; ?> のようにすると、渡された文字列が表示されます。 わかり難い説明で恐縮です。 宜しくお願い致します。

  • PHP
  • 回答数4
  • ありがとう数1

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.4

ツッコミどころ満載ですが、それについてはすでに指摘がありますね 根本的な問題として、 >$sql = 'UPDATE mst_productSET name=?,price=? WHERE code=?'; $sql = 'UPDATE mst_product SET name=?,price=? WHERE code=?'; でないとマズイのでは?

noname#244856
noname#244856
回答No.3

訂正 PDO::ATTR_USE_BUFFERED_QUERY => true ↓ PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true

noname#244856
noname#244856
回答No.2

下の記事をよくお読みください。 PHPでデータベースに接続するときのまとめ http://qiita.com/mpyw/items/b00b72c5c95aac573b71 念のためダメ出しを書いておきます。 > $pro_code = $_POST['code']; > $pro_name = $_POST['name']; > $pro_price = $_POST['price']; スクリプトに直接アクセスされた場合に備え、issetによるチェックを最低限行ってください。未定義であった場合はRuntimeExceptionなどの例外をスローさせましょう。issetに加えてis_stringで文字列であるか(!is_arrayで配列でないか)チェックする処理もはさむとベターです。 > $pro_code = htmlspecialchars($pro_code); > $pro_name = htmlspecialchars($pro_name); > $pro_pass = htmlspecialchars($pro_price); データベースに挿入する文字列に対してHTML特殊文字をエスケープする処理は行わないでください。データベース用のエスケープ処理はPDOのプリペアドステートメントが担う役割なので、あなたは何も考える必要はありません。HTML特殊文字をエスケープする処理は実際にechoする直前に行ってください。 > $dsn = 'mysql:dbname=xxxx;host=xxxxx'; charset指定も行ってください。 > $dbh = new PDO($dsn,$user, $password); 第4引数の連想配列オプションで最低限 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION は渡してください。今回のようにUPDATEに失敗したときなどにも例外がスローされるようになります。加えて、MySQLの自動的な型変換、例えばDATEカラムに「あいうえお」という文字列が「0000-00-00」に変換されて無理矢理挿入されるのを避け、例外を発生させて処理を中断したい場合は PDO::MYSQL_ATTR_INIT_COMMAND => "SET SESSION sql_mode='TRADITIONAL'" も入れてください。今回は関係ありませんが、追加で PDO::ATTR_USE_BUFFERED_QUERY => true PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC を入れておくとSELECTを扱う際に使い勝手がよくなります。 > $dbh->query('SET NAMES utf8'); $dsnで指定し、SET NAMESは使わないでください。 > $data[] = $pro_name; > $data[] = $pro_price; > $data[] = $pro_code; > $stmt->execute($data); $pro_priceと$pro_codeは文字列じゃなくて整数のカラムですよね?もしそうであればこのままだとMySQL側で発生する文字列型から整数型への変換でパフォーマンスが低下してしまうので、 $stmt->bindValue(1, $pro_name, PDO::PARAM_STR); $stmt->bindValue(2, $pro_price, PDO::PARAM_INT); $stmt->bindValue(3, $pro_code, PDO::PARAM_INT); $stmt->excecute(); の方がベターです。executeを使っても全く問題ないのは、渡すパラメータが全て「文字列」カラムに対応するときだけです。 > $dbh = null; これは(好みですが)書かなくてもいいです。後ろに続く処理が文字列を少量出力するだけなので、ここでデータベースと切断しても、最後にデータベースと切断しても全く差がありません。

takeaway2000
質問者

お礼

貴重なお時間をありがとうございます。 ご教授頂いたURL先、アドバイス頂いた内容を読み返しましたが、いまいち当方では理解できない内容でした。 折角ご回答頂いたのに申し訳ありません。 ただ、なんとなく現状のプログラムでは、問題があることはわかりました(^^; ありがとうございます。

  • rootPC
  • ベストアンサー率53% (8/15)
回答No.1

php,mysqlは使ったことが無いので間違っているかもしれないけど、comiitはいらないのかな?

関連するQ&A

  • php ログインについて

    php ログインについて phpでログイン画面を作っているのですがログインできません。エラー等々もでず、「スタッフコードかパスワードが違います」になります。ちなみにDBにはスタッフのデータはしっかり存在します。 コードとパスワードを正しく入力しているにもかかわらずログインできません。 ソースはこちらです [staff_login.php] <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>ログイン</title> </head> <body> スタッフログイン<br/> <br/> <form method="post" action="staff_login_check.php"> スタッフコード<br/> <input type="text" name="code"><br/> パスワード<br/> <input type="password" name="pass"><br/> <br/> <input type="submit" value="ログイン"> </form> </body> </html> [staff_login_check.php] <?php try { $staff_code=$_POST['code']; $staff_pass=$_POST['pass']; $staff_code=htmlspecialchars($staff_code); $staff_pass=htmlspecialchars($staff_pass); $staff_pass=md5($staff_pass); $dsn='mysql:dbname=*****;host=********'; $user='*********'; $password='********'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT name FROM mst_staff WHERE code=? AND password=?'; $stmt=$dbh->prepare($sql); $data[]=$staff_code; $data[]=$staff_pass; $stmt->execute($data); $dbh = null; $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { print'スタッフコードかパスワードが違います<br/>'; print'<a href="staff_login.html">戻る</a>'; } else { header('Location: staff_top.php'); } } catch(Exception $e) { print'エラーが発生しました'; exit(); } ?> 解決方法、ご指摘ございましたら教えていただきたいです。

    • ベストアンサー
    • PHP
  • mysql 接続について

    こんにちわ カートを作っていてつまづいたのでお力かしていただきたいです。 <!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> <?php try{ require_once('../common/common.php'); $post=sanitize($_POST); $pro_name=$post['name']; $pro_namecode=$post['namecode']; $pro_kg=$post['kg']; $pro_price=$post['price']; $pro_gazou_name=$_POST['gazou_name']; $pro_gazou_name2=$_POST['gazou_name2']; $dsn='mysql:dbname=LAA******-******;host=mysql***.phy.lolipop.lan'; $user='LAA******'; $password='********'; $dbh=new PDO($dsn,$user,$password); $pdo=new PDO("mysql:host=mysq***.phy.lolipop.lan;dbname=LAA*****-*******;charset=utf8",'LAA*****','********←パスワード'); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);                                                 $sql='INSERT INTO mst_product(namecode,name,kg,price,gazou,gazou2) VALUES(?,?,?,?,?,?)'; $stmt=$dbh->prepare($sql); $data[]=$pro_namecode; $data[]=$pro_name; $data[]=$pro_kg; $data[]=$pro_price; $data[]=$pro_gazou_name; $data[]=$pro_gazou_name2; $stmt->execute($data); $dbh=null; print$pro_name; print'を追加しました。<br/>'; } catch(Exception $e) { print'ただいま障害により大変ご迷惑をおかけします。<br/>'; exit(); } ?> <a href="pro_list.php">戻る</a> </body> </html> 一応エラーもでないで最後のprint$pro_name;print'を追加しました。<br/>'; までいくんですがデータベースを見ても商品は追加されていません。 エラーもでないで最後まで行くということは一応接続は出来ているということ なんでしょうか? どうしたらきちんと商品登録でしますか? レンタルサーバーはロりポップです。 必要かは分からないんですが phpバージョンは5.3 データベースバージョン5.6 よろしくおねがいします。

    • ベストアンサー
    • MySQL
  • phpプリペアードステートメントについて質問です。

    phpの練習で、以下のようなhtmlファイルとphpファイルを作り XAMPで作業をおこなっています。 以下にあるhtml.phpファイルでのやり取りはうまくいっているのですが、 このphpをプリペアードステートメントにする所で躓いています。 いろいろ調べてやってはみたものの、どうしても%を使った あいまい検索のところがわかりません。 ---------------------------------------------------------------- 以下、プリペアードステートメントにする前の ページ内容です。こちらではうまくいっています。 html <form method="post" action="kensaku.php"> ご意見コードを入力してください。<br /> <input name="code" type="text" style="width:100px"><br /> <br /> <input type="submit" value="送信"> </form> php <?php $code=$_POST['code']; $dsn = 'mysql:dbname=phpkiso;host=localhost'; $user = 'root'; $password =''; $dbh = new PDO($dsn,$user,$password); $dbh->query('SET NAMES UTF-8'); $sql = "select * from `anketo` where `goiken` like '%{$code}%' "; $stmt = $dbh->prepare($sql); $stmt-> execute(); while(1) { $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { break; } print $rec['code']; print $rec['nickname']; print $rec['email']; print $rec['goiken']; print '<br />'; } $dbh = null; ?> ---------------------------------------------------------------- 以上のphpの中の以下の分を $sql = "select * from `anketo` where `goiken` like '%{$code}%' "; $stmt = $dbh->prepare($sql); $stmt-> execute(); ↓ $sql ="SELECT*FROM anketo WHERE goiken like ?"; $stmt = $dbh->prepare($sql); $data[] = $code; $stmt->execute(array("%$_GET[$data]%")); こんな風に直しては見たのですが、なんだか うまくい行かずです。 よろしければ教えてください。 宜しくお願い致します。

    • 締切済み
    • PHP
  • MySQLについての質問です

    毎回お世話になっています。 今回も知恵を頂けたらありがたいです。よろしくお願い致します。 下記のようなプログラムを組んだところ、ページを開いたらすぐ全データがが出てくる状態になっています。ページを開いても何もデータが出てこない状態にして検索してからデータが出てくるようにするにはどのように書き換えれば良いのでしょうか? <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>リーグデータ</title> <link rel="stylesheet" type="text/css" href="../common/style.css"/> </head> <?php error_reporting( E_ALL ^ E_NOTICE ); ?> <body id="list"> <div id="main"> <form name="search_form" action="player_list.php" method="post"> <input type="hidden" name="cmd" value="search" /> <table> <tr> <th class="th_top">選手名</th> <td class="td_top"> <input type="text" name="name" size="30" value="<?php echo $_POST['name'] ?>"> </td> </tr> <tr> <th>チーム名</th> <td> <input type="checkbox" name="team_id[]" value="1" <?php if (isset($_REQUEST['team_id']) and in_array('1',$_REQUEST['team_id'])) print 'checked'; ?>/> 名古屋 <input type="checkbox" name="team_id[]" value="2" <?php if (isset($_REQUEST['team_id']) and in_array('2',$_REQUEST['team_id'])) print 'checked'; ?>/> 徳島 <input type="checkbox" name="team_id[]" value="3" <?php if (isset($_REQUEST['team_id']) and in_array('3',$_REQUEST['team_id'])) print 'checked'; ?>/> 千葉 <input type="checkbox" name="team_id[]" value="4" <?php if (isset($_REQUEST['team_id']) and in_array('4',$_REQUEST['team_id'])) print 'checked'; ?>/> 浦和 <input type="checkbox" name="team_id[]" value="5" <?php if (isset($_REQUEST['team_id']) and in_array('5',$_REQUEST['team_id'])) print 'checked'; ?>/> 磐田<br /> </td> </tr> <tr> <th class="th_middle"> ポジション </th> <td class="td_middle"> FW MF DF GK </td> </tr> </table> <p> <input type="submit" value="検索"> <input type="reset" value="リセット"> </p> </form> <?php try { $dsn = 'mysql:dbname=xxxxx;host=localhost'; $user = 'xxxxx'; $password = 'xxxxxx'; $dbh = new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql = 'SELECT code,name,team_name,price,position,gazou FROM mst_player_market WHERE 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); $dbh = null; if(isset($_POST['name'])) { $name = htmlspecialchars($_POST['name']); print($name); } if(isset($_POST['name'])) { if(!$_POST['name']==true){print ''; }else{ $sqlN ='code IN (SELECT code FROM mst_player_market where name LIKE ("%'.$_POST['name'].'%"))'; $sql.=' and ('.$sqlN.')'; } } if(isset($_POST['team_id'])and is_array($_POST['team_id'])){ $ary = array_filter($_POST['team_id'], function($v) {return is_numeric($v);}); $sqlA = 'code IN (SELECT playerid FROM team WHERE team_id IN ('.implode(',', $ary).'))'; }else{ print ''; $sqlA = ' 1 '; $flag=false; } $sql.=' and ('.$sqlA.')'; if($flag) $sql.="AND 0 ";; //参考 print $sql."<br>"; //実行 $pdo = new PDO($dsn,$user,$password); $stmt = $pdo->prepare($sql); $stmt->execute(); //画像処理 $rows=array(); while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ $rows[]=$row; }; //参考SQL文表示 print_r($rows); print'選手一覧<br /><br />'; print'</form>'; } catch(Exception $e) { print'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> <?php foreach((array) $rows as $row ){ ?> <tr> <td><img src="../player/<?php print( htmlspecialchars( $row["gazou"], ENT_QUOTES )); ?>" /></td> <td><?php print( htmlspecialchars( $row["team_name"], ENT_QUOTES )); ?></td> <td>\<?php print( htmlspecialchars( number_format( $row["price"] ),ENT_QUOTES ) ); ?></td> <td> <?php print( htmlspecialchars( $row["name"], ENT_QUOTES ) ); ?> </td> <td> <?php print( htmlspecialchars( $row["position"], ENT_QUOTES ) ); ?> </td> </tr> <?php } ?> </table> </div> <!------------mainのdiv--------------> </body> </html>

    • ベストアンサー
    • MySQL
  • 前のidをコピーするSQL文

    MySQLを使って管理画面を作っております。 $sql='INSERT INTO players(name,price,position_id) VALUES(?,?,?)'; という文で使ったidをコピーしてから次のINSERTの文でそのidの番号を使って別テーブルのカラムにその番号をINSERTするしくみを作りたいのですがなかなか上手くいきません。 var_dump($last_id);では番号がコピーされているのですが、INSERTができません。 いつもお世話になってしまい大変恐縮なのですが、どなたかご教授いただけないでしょうか?よろしくお願い致します。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="../../xxxxx/team.css"/> <title>選手追加完了</title> </head> <body> <div id="main"> <?php $pro_name=$_POST['name']; $pro_price=$_POST['price']; $pro_position_id=$_POST['position_id']; $pro_team=$_POST['team_name']; $pro_name=htmlspecialchars($pro_name); $pro_price=htmlspecialchars($pro_price); $pro_position_id=htmlspecialchars($pro_position_id); $pro_team=htmlspecialchars($pro_team); $dns = "mysql:host=localhost; dbname=player;charset=utf8"; $dns_id = "xxxxx"; $dns_pw = "xxxxxxx"; try { $conn = new PDO($dns, $dns_id, $dns_pw, array(PDO::ATTR_EMULATE_PREPARES => false)); } catch (Exception $e) { echo 'ERROR: ' . $e->getMessage(); die(); } try { //トランザクションを開始する。オートコミットがオフになる $conn->beginTransaction(); //処理その(1) $sql='INSERT INTO players(name,price,position_id) VALUES(?,?,?)'; $stmt=$conn->prepare($sql); $data[]=$pro_name; $data[]=$pro_price; $data[]=$pro_position_id; $stmt->execute($data); //直近id取得 $last_id_sql = "SELECT LAST_INSERT_ID() as id"; $stmt = $conn->prepare($last_id_sql); $stmt->execute(); $last_id = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); //確認var_dump($last_id); //処理その(2) $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql2='INSERT INTO team(team_id,team_name) VALUES(?,?)'; $stmt=$conn->prepare($sql2); $data2[]=$pro_team; $data2[]=$last_id; $stmt->execute(array($last_id,$pro_team)); $stmt->closeCursor(); //確認var_dump($last_id); //変更をコミットする $conn->commit(); } catch(PDOException $e){ //変更をロールバックする $conn->rollBack(); echo 'ERROR:' . $e->getMessage(); } // 切断 $conn = null; print $pro_name; print'を追加しました。<br />'; ?> <a href="xxxxx">戻る</a> </div><!--main--> </body> </html>

    • ベストアンサー
    • MySQL
  • 特定のレコードだけを表示させるためのコード

    ●質問の主旨 kensaku.htmlから数字(データベースのコード番号)を入力・検索して、 PHPMyAdminにあるデータベースから、特定のレコードを取り出したいのですが、 データベースにあるすべてのデータが返されます。 検索窓に入力した特定のレコードの内容だけを 返すためには、下記のichiran.phpをどのように直せばよいでしょうか? ●プログラムの流れ 1.kensaku.htmlの検索窓に番号を入力・送信 2.PHPMyAdminにあるデータベース(aketo)にアクセス 3.ichiran.phpで検索結果を表示 ●プログラムコード (kensaku.html) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPの基礎</title> </head> <body> <form method="post" action="kensaku.php"> ご意見コードを入力してください。<br/> <input name="code" type="text" style="width:100px"><br/> <br/> <input type="submit" value="送信"><br/> </body> </html> (ichiran.php) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPの基礎</title> </head> <body> <?php $code=$_POST['code']; $dsn = 'mysql:dbname=phpkiso2;host=localhost'; $user = 'root'; $password = ''; $dbh = new PDO($dsn,$user,$password); $dbh->query('SET NAMES UTF-8'); $sql = 'SELECT * FROM anketo WHERE code='.$code; $stmt = $dbh->prepare($sql); $stmt->execute(); $stmt->execute(); while(1) { $rec = $stmt->fetch(PDO::FETCH_ASSOC); if($rec == false) { break; } print$rec['code']; print$rec['nickname']; print$rec['email']; print$rec['goiken']; print'<br/>'; } $dbh = null; ?> </body> </html> ●開発環境 windows8 xammp1.8.1 MySQL(PHPMyAdmin)

    • ベストアンサー
    • MySQL
  • PDOでLIKE検索

    LIKE検索でつまづいでいます。 こまめにチェックしながら進めており、エラーが表示されるわけではないのですが、うまくキーが引き渡せていないのが原因だとは思うのですが、どう対策すればいいかというところでつまづいています。 文字コードの指定、直接パラメーターを使わない、プレースホルダの使い方、キーの渡し方等アドバイスをいただけないでしょうか。 ※全件表示だと動作します。また、$keyの中身はきちんと渡っているのは確認できましたが、select文の部分に反映されていないような状態。。。 【検索フォーム】 <form name="" method="POST" action="result.php"> <button type="submit" name="area" value="新宿">新宿</button> </form> 【検索結果】 define('DB_HOST', 'localhost'); define('DB_USER', 'ユーザー名'); define('DB_PASSWORD', 'DBパスワード'); define('DB_NAME', 'DB名'); try { $dbh = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASSWORD, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET 'utf8'") ); } catch (PDOException $e) { echo $e->getMessage(); exit; } $key = "%".$_POST['area']."%"; $stmt = $dbh->prepare('SELECT * FROM salon WHERE area LIKE :area'); $stmt->bindParam(':area', $key, PDO::PARAM_STR); $stmt->execute(); ?> <body> <?php foreach ($stmt as $row) : ?> <?php echo htmlspecialchars($row['name'],ENT_QUOTES,'UTF-8'); ?> <?php echo htmlspecialchars($row['area'],ENT_QUOTES,'UTF-8'); ?> <?php endoforeach; ?> </body> アドバイスをいただければ幸いです。

    • ベストアンサー
    • PHP
  • HTML+PHPのリストボックス表示について

    現在HTML+PHPで勉強しながらアプリを作成しています。 MySQLからデータをよみ、その値からリストボックスを作成し表示させていますが、そのリストボックスがテーブル内に表示されず、位置がずれて表示されます。どうすればうまくテーブル内に表示されるのか教えてください。よろしくお願いします。(PHPというよりHTMLの質問かもしれませんが) <?php //データベース接続設定 $dbtype="mysql"; $sv="localhost"; $dbname="hogehoge"; $user="root"; $pass="abcdefg"; //データベースに接続 $dsn = "$dbtype:dbname=$dbname;host=$sv"; $conn = new PDO($dsn,$user,$pass); //---------------------------------------- // ■ POST時 //---------------------------------------- if ($_SERVER["REQUEST_METHOD"]=="POST"){ // □ 新規追加 if (isset($_POST["submit_add"])){ $new_code = htmlspecialchars($_POST["new_code"], ENT_QUOTES); //追加コード $new_kbncod = htmlspecialchars($_POST["new_kbncod"], ENT_QUOTES); //追加項目 $sql = "INSERT INTO kekka VALUES(null,'$new_code','$new_kbncod')"; $stmt = $conn->prepare($sql); $stmt->execute(); } // □ 変更 if (isset($_POST["submit_upd"])){ $id = key($_POST["submit_upd"]); //押下したボタン番号を取得 //-------------------------------- // □ POSTされたデータを取得 //-------------------------------- $upd_kbncod = htmlspecialchars($_POST["kbn_code"][$id], ENT_QUOTES); //変更項目 $upd_code = htmlspecialchars($_POST["code"][$id], ENT_QUOTES); //変更コード $sql = "UPDATE kekka SET code = $upd_code, kbn_code = $upd_kbncod WHERE id=$id"; $stmt = $conn->prepare($sql); $stmt->execute(); } // □ 削除 if (isset($_POST["submit_del"])){ $id = key($_POST["submit_del"]); //押下したボタン番号を取得 //テーブルからデータを削除 $sql = "DELETE FROM kekka WHERE (id = $id)"; $stmt = $conn->prepare($sql); $stmt->execute(); } } //===================================================================== // ■ H T M L //===================================================================== ?> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>テスト</title> </head> <body> <h1>テスト中</h1> <form action="<?=$_SERVER['SCRIPT_NAME']?>" method="POST"> <table border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#666666"> <tr bgcolor="#eee8aa"> <td align="center"><font size="2">項目名(リスト)</font></td> <td align="center"><font size="2">コード:数字4桁</font></td> <td align="center"><font size="2">ボタン</font></td> </tr> <?php //---------------------------------------- // □:テーブルからデータを読む //---------------------------------------- $sql = "SELECT * FROM kekka ORDER BY id"; $stmt = $conn->prepare($sql); $stmt->execute(); while($row = $stmt->fetch()){ $id = $row["id"]; $code = $row["code"]; $kbncod = $row["kbn_code"]; echo "<td>".disp_list($conn,"code_hyo", "KBN_CODE", "KBN_NAME", $kbncod, "kbn_code[$id]")."</td>"; echo "<td><input type=text name=code[$id] value=$code size=10></td>"; echo "<td><input type=submit name=submit_upd[$id] value='変更' size=4>"; echo "<input type=submit name=submit_del[$id] value='削除' size=4></td>"; echo "</tr>"; } //追加リスト表示用に、変数の初期化を行う。(ゴミデータ除去) $kbncod=""; $code=""; $new_kbncod=""; $new_code=""; ?> <tr> <td><?php echo disp_list($conn,"code_hyo", "KBN_CODE", "KBN_NAME", $new_kbncod, "new_kbncod"); ?></td> <td><input type="text" name="new_code" value="<?=$new_code ?>" size="15"></td> <td><input type="submit" name="submit_add" value="追加" size="4"></td> </tr> </table> </form> </body> </html> <?php // パラメータ:接続/テーブル名/リスト値/表示値/選択値/リスト名称 function disp_list( $conn2,$table, $value, $text,$selected_value, $m_name) { // DBから項目情報を取り出す $sql2 = "SELECT * FROM " . $table . " ORDER BY " . $value; $stmt2 = $conn2->prepare($sql2); $stmt2->execute(); // 取り出した項目情報をプルダウンリストに表示する echo "<select name=\"" . $m_name . "\">"; while ($row2 = $stmt2->fetch()){ echo "<option "; if ($selected_value == $row2[$value]) { echo " selected "; } echo " value=\"".$row2[$value]."\">"; echo $row2[$text]."</option>"; } echo "</select>"; } ?>

    • ベストアンサー
    • PHP
  • ショッピングカートで$_SESSIONへデータを格納する方法

    $syohin_code = $_POST['syohin_code']; $syohin_name = $_POST['syohin_name']; $sale_price = $_POST['sale_price']; $kazu = $_POST['kazu']; $_SESSION['cart']['$syohin_code'] = array ("syohin_code" => $syohin_code , "syohin_name" => $syohin_name, "sale_price" => $sale_price , "kazu" => $kazu ); foreach ($_SESSION['cart']['$syohin_code'] as $key => $value){ echo $key . $value;} データベースより一覧表示した商品を「カートに入れる」ボタンを使いPOSTした値を上記のcart.phpへ飛ばし、配列としてセッション変数に格納しました。ひとつの値は上記より取得できるのですが、複数の商品を格納する方法がどうしても分かりません。それともどこかに保存されているのでしょうか? この取得したデータを元に、購入商品全てを一覧表示させたいのですが、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • データベース接続 ログインフォーム

    PHPにてログインフォームを作成しています。 PHPは初心者のため、ご教授いただけたらと思います。 下記の記述方法はPHP逆引きレシピという参考書を元に作成しています。 <?php //DB設定 $DB_HOST = 'localhost'; $DB_USER = 'root'; $DB_PASS = '0000; $DB_NAME = 'members'; if (count($_POST) == 0) { echo <<< EOL <form method="post" action="./main.php"> ユーザーID: <input name="id" /> PASSWORD: <input name="password" type="password" /> <input type="submit" value="ログイン" /> </form> EOL; } else { $link = mysqli_connect($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); if (mysqli_connect_errno()) { die('データベースエラー'); } // クエリを準備 $sql = 'SELECT * FROM members WHERE id=? AND password=?'; $msg = '認証NG'; if ($stmt = mysqli_prepare($link, $sql)) { mysqli_stmt_bind_param($stmt, 'ss', $_POST['id'], $_POST['password']); mysqli_stmt_execute($stmt); mysqli_stmt_store_result($stmt); $count = mysqli_stmt_num_rows($stmt); mysqli_stmt_close($stmt); if ($count == 1) { $msg = '認証OK' ; } } echo $msg; } ?> という記述ですが、IDとPASSWORDがあっていれば「認証OK」と表示されます。 文字の表示ではなく次のページ(main.php)が表示されません。 どこを編集、記述したらmain.phpが表示されるのでしょうか? また、間違っていたら「認証NG」と表示されるのですが、 この文言のみの表示でフォームが表示されません。 間違っていたらフォームの上に表示させたいのですが、どのように編集、記述したらよろしいでしょうか? 例↓ *ここに間違っていたら認証NGと表示させる <form method="post" action="./main.php"> ユーザーID: <input name="id" /> PASSWORD: <input name="password" type="password" /> <input type="submit" value="ログイン" /> </form> 質問ばかりで申し訳ありません。 本やネットなどで色々としらべたのですが、自分の求めているサイトや記述方法が見つかりませんでした。 大変申し訳ないのですが、参考記述または参考サイトなどがありましたらご教授ください。 宜しくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう