teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

コード修正

2020/06/07 07:36

投稿

chimo
chimo

スコア55

title CHANGED
File without changes
body CHANGED
@@ -276,4 +276,38 @@
276
276
  ```
277
277
  結果://間違い探しの内容(値)が表示されず、「パスワードまたは削除番号が間違っています」のみ表示された
278
278
 
279
+ 【追記】回答をうけて削除部分を以下のように書きなおしました
280
+ ```php
281
+ //----------------【DELETEで指定した番号のメッセージを削除】--------------------
282
+
283
+ $deleteNo=$_POST['deleteNo'];
284
+ $delete_pass=$_POST['pass'];
285
+
286
+ //SELECTで削除番号とパスワードが一致するデータを取得
287
+ $sql="SELECT * FROM $tb_name WHERE number=:number,password=:password";
288
+ $stmt=$pdo->prepare($sql);
289
+ $stmt->bindValue(':number',$deleteNo,PDO::PARAM_INT);
290
+ $stmt->bindValue(':password',$delete_pass,PDO::PARAM_STR);
291
+
292
+ $delete=$stmt->execute();
293
+
294
+ if($delete){
295
+ $sql="DELETE FROM $tb_name WHERE $deleteNo";
296
+ $stmt->$pdo->prepare($sql);
297
+ $stmt->execute();
298
+ echo "メッセージを削除しました";
299
+ }else{
300
+ echo "パスワードまたは削除番号が間違っています";
301
+ }
302
+
303
+ ```
304
+ セレクトでパスワードと削除番号と一致するデータを取得しその結果をif文に渡し、trueの場合削除を行うという意図でコードを書きました。実行した結果以下のようなエラーが出てしまいました。
305
+ ```
306
+ Notice: Undefined index: deleteNo in /home/co-19-208.99sv-coco.com/public_html/kadai_2.php/kadai_2_advanced/kadai_2_advanced.php on line 173
307
+
308
+ Notice: Undefined index: pass in /home/co-19-208.99sv-coco.com/public_html/kadai_2.php/kadai_2_advanced/kadai_2_advanced.php on line 174
309
+ SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'password=?' at line 1
310
+ ```
311
+ しかし、該当箇所を見てみてもおかしい部分は見つかりません。
312
+
279
313
  他になにかデバッグ方法や解決策あれば教えていただきたいです!

1

デバッグ方法追加

2020/06/07 07:36

投稿

chimo
chimo

スコア55

title CHANGED
File without changes
body CHANGED
@@ -238,7 +238,7 @@
238
238
  エラーが出ているわけではありませんが、削除ボタンをおして、パスワードと削除したいメッセージの投稿番号(削除番号)を入力しても、あっているはずなのに「パスワードまたは削除番号が間違っています」と表示されてしまいます
239
239
 
240
240
  【デバッグ】
241
- 本当にパスワードと削除番号が一致しているか確かめるために以下のコードで確かめました
241
+ 本当にパスワードと削除番号が一致しているか確かめるために以下のコードで確かめました
242
242
  ```php
243
243
  //間違い探し
244
244
  /*---------------------------------------------------------------
@@ -252,4 +252,28 @@
252
252
  ```
253
253
  結果:一致していました。
254
254
 
255
+ ➁そもそもif文の中が機能しているのか以下のコードで確かめた
256
+ ```php
257
+ foreach($stmt as $loop){
258
+ if(($deleteNo==$loop['number'])&&($delete_pass==$loop['password'])){
259
+ //間違い探し
260
+ echo $deleteNo."<br>";
261
+ echo $loop['number']."<br>";
262
+ echo $delete_pass."<br>";
263
+ echo $loop['password']."<br>";
264
+
265
+ //DELETEの処理
266
+ $sql="DELETE FROM $tb_name WHERE number=:number";
267
+ $stmt=$pdo->prepare($sql);
268
+ $stmt->bindValue(':number',$deleteNo,PDO::PARAM_INT);
269
+ $stmt->execute();
270
+ echo "メッセージを削除しました";
271
+ }else{
272
+ echo "パスワードまたは削除番号が間違っています";
273
+ exit();
274
+ }
275
+ }
276
+ ```
277
+ 結果://間違い探しの内容(値)が表示されず、「パスワードまたは削除番号が間違っています」のみ表示された
278
+
255
279
  他になにかデバッグ方法や解決策あれば教えていただきたいです!