回答編集履歴

1

更新処理部分を追記

2019/08/27 04:52

投稿

45_Shingo
45_Shingo

スコア177

test CHANGED
@@ -142,7 +142,7 @@
142
142
 
143
143
  foreach($editline as $ccc){
144
144
 
145
- $data3 = explode(" ",$ccc);
145
+ $data3 = explode("<>",$ccc);
146
146
 
147
147
  if($data3[0] == $edit){
148
148
 
@@ -401,3 +401,89 @@
401
401
 
402
402
 
403
403
  ※全体的にPHP部分を1か所にまとめ、フォーム中にセットする値は$name等の変数のセットしておいて、それをHTML中に埋め込む方が可読性も上がるので良いと思います。
404
+
405
+
406
+
407
+ ---
408
+
409
+
410
+
411
+ すみません、1行だけ変更する方法…って質問でしたね。肝心なその部分の処理を書いてませんでしたので追記です。
412
+
413
+
414
+
415
+ 単純に、データを取得する時と同じ処理の途中で、numberと一致しているかどうかをチェックし、そこだけ書き出し方を変えています。
416
+
417
+ なお、勉強用の簡易掲示板という事ですのでロック処理等はあえて書いてないですが、実際に掲示板として機能させようとした場合には、排他ロック等の処理が必要になりますので、一旦予定していた動作確認が取れたらそういった処理を追加していけばよいと思います。
418
+
419
+
420
+
421
+ ```PHP
422
+
423
+ $date = date("Y/m/d H:i:s");
424
+
425
+ $delimiter = "<>";
426
+
427
+
428
+
429
+ if(!empty($_POST["name"]) && !empty($_POST["comment"])){
430
+
431
+ $namae = $_POST["name"];
432
+
433
+ $message = $_POST["comment"];
434
+
435
+
436
+
437
+ if(!empty($_POST["number"]){
438
+
439
+ $lines = file($filename);
440
+
441
+ $number = $_POST["number"];
442
+
443
+
444
+
445
+ $fp = fopen($filename, "w" );
446
+
447
+
448
+
449
+ foreach($lines as $current_line){
450
+
451
+ $posted_data = explode(" ",$current_line);
452
+
453
+
454
+
455
+ if($posted_data[0] == $number){
456
+
457
+ $update_line = implode( $delimiter, array( $number, $name, $message, $date) );
458
+
459
+ fwrite( $fp, "$update_line\r\n");
460
+
461
+ } else{
462
+
463
+ fwrite( $fp, "$current_line\r\n");
464
+
465
+ }
466
+
467
+ }
468
+
469
+
470
+
471
+ fclose($fp);
472
+
473
+ } else{
474
+
475
+ // 新規追加処理
476
+
477
+ }
478
+
479
+ }
480
+
481
+
482
+
483
+ ```
484
+
485
+
486
+
487
+ あと、あちこちからコピペして作られてるのかと思いますが、データファイルに保存時にデータを連結しているデリミタと、explodeしているときのデリミタが異なっているので多分データが正しく保存されていません。
488
+
489
+ できれば、今回のデリミタ等、プログラム中で何度も出てくる文字列は定数(変数)として最初に定義しておいてそれを使う方がバグが出にくくなります。