###前提・実現したいこと
現在練習のためにBBSを作っているのですがうまくいきません。
getで送られてくるactionとedidの値を用いて
まずactionで場合分けをしてeditなら更新するフォームに値を送り、それが書き換えられて送信されたらその値をデータベースに更新するようにしたいです。
###発生している問題・エラーメッセージ
フォームに送るのは大丈夫なのですが、その値を送信するとデータベースに新しく登録されて、もとのidの場所を変更することができません。
UPDATEのところでなにか問題があると思うのですが…。
###該当のソースコード
php
1 if(!empty($_GET['action'])){//actionの取得 2 $act=$_GET['action']; 3 } 4 else{ 5 $act=null; 6 } 7 switch ($act){//actionのcheck 8 case 'edit'://action edit 変更 9 // データ取得 10 $sql = 'SELECT * FROM `posts` WHERE `id` = ?'; 11 $ed[]=$_GET['id']; 12 $stmt = $dbh->prepare($sql); 13 $stmt->execute($ed); 14 $rec = $stmt->fetch(PDO::FETCH_ASSOC); 15 // 取得した値の格納 16 $edname=$rec['nickname']; 17 $edcomment=htmlspecialchars_decode($rec['comment']); 18 $edid=$_GET['id']; 19 $edbutton='更新する'; 20 $CUDsw=1; 21 break; 22 23 default://action null 登録 24 $edname=""; 25 $edcomment=""; 26 $edbutton='つぶやく'; 27 $CUDsw=0; 28 break; 29 30 case 'delete'://action delete 削除 31 $edid=$_GET['id']; 32 $CUDsw=2; 33 $edname=""; 34 $edcomment=""; 35 $edbutton='つぶやく'; 36 break; 37 } 38 $ownurl=$_SERVER["PHP_SELF"];//このphpのurl取得 39 40 if(!empty($_POST)){//DB登録 変更 削除 41 $nickname=htmlspecialchars($_POST['nickname']); 42 $comment=htmlspecialchars($_POST['comment']); 43 switch($CUDsw){ 44 case 0://登録 45 $sql='INSERT INTO posts (nickname,comment) VALUES(?,?)'; 46 $data[] = $nickname; 47 $data[] = $comment; 48 break; 49 case 1://変更 50 $sql = 'UPDATE `posts` SET `nickname`=?,`comment`=? WHERE `id` = ?'; 51 $data[] = $nickname; 52 $data[] = $comment; 53 $data[] = $edid; 54 break; 55 case 2://削除 56 $sql='DELETE FROM posts WHERE `id`= ?'; 57 $data['id'] = $edid; 58 break; 59 } 60 $stmt = $dbh->prepare($sql); 61 $stmt ->execute($data); 62 header('Location:'.$ownurl); 63 exit(); 64 }
###試したこと
if(!empty($_POST))の真下に$CUDsw=1を入れたり$dataを直接指定してもいけませんでした。
まとめる前の編集機能だけの時はうまくいきました。
###補足情報(言語/FW/ツール等のバージョンなど)
XAMPPを使っています。
###追記
html のフォーム周辺です。
html
1<div class="col-md-4 content-margin-top"> 2 <!-- form部分 --> 3 <form id="formmo" action= 4 <?= $ownurl; ?> method="post"> 5 <!-- nickname --> 6 <div class="form-group"> 7 <div class="input-group"> 8 <input type="text" name="nickname" class="form-control" id="validate-text" <?= 'value="'.$edname.'"' ?> placeholder="nickname" required> 9 <span class="input-group-addon danger"><span class="glyphicon glyphicon-remove"></span></span> 10 </div> 11 </div> 12 <!-- comment --> 13 <div class="form-group"> 14 <div class="input-group" data-validate="length" data-length="4"> 15 <textarea type="text" class="form-control" name="comment" id="validate-length" placeholder="comment" required><?php echo htmlspecialchars_decode($edcomment); ?></textarea> 16 <span class="input-group-addon danger"><span class="glyphicon glyphicon-remove"></span></span> 17 </div> 18 </div> 19 <!-- つぶやくボタン --> 20 <button type="submit" class="btn btn-primary col-xs-12" disabled><?= $edbutton ?></button> 21 </form> 22 </div>
指摘があったので今から直しますがeditのボタン周辺
html
1<?php foreach ($data as $d): 2 $id=$d['id']; ?> 3 <a href=<?= $ownurl."?action=edit&id=".$id ?> class="timeline-icon bg-success" > 4 <i class="entypo-feather"></i> 5 <i class="fa fa-cogs"></i> 6 </a> 7 <div class="timeline-label"> 8 <?php 9 echo '<h2><a href="#" id="id'.$id.'">'.$id.':'.$d['nickname']; ?></a> 10 <?php 11 $created = strtotime($d['created']); 12 $created = date('Y年m月d日 H時i分s秒',$created); 13 echo '<span>'.$created.'</span>'; 14 ?> 15 </h2> 16 <p><?php echo $d['comment'] ?></p> 17 </div> 18 <?php endforeach; ?>
回答4件
あなたの回答
tips
プレビュー