質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

785閲覧

PHPでDBを使わずにそれぞれのログインユーザのユーザ情報を編集する

nuya

総合スコア7

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2020/09/18 13:02

ユーザには1,附番ID,2,ユーザーID、3,ユーザの名前、4,パスワードが割り振られています。
附番はユーザが変えられないIDです
ユーザIDはほかのユーザーが使用していたら同じものを使用できないという条件です。
ですが下のコードで編集をしたら 他のユーザと一緒なIDでも編集できてしまうことが問題です。
ループ処理が続いているのが原因なのでしょうか?
またどうやってループを抜ければよろしいでしょうか?

php

1<?php 2$e = ""; 3$t = ""; 4session_start(); 5if (!isset($_SESSION['id'])) { 6 header('Location: login.php'); //ログインしていなければログインページへリダイレクト 7 exit; 8} 9// print_r($_SESSION['id']); 10// print_r($_SESSION['name']); 11$user = fopen("csv/user.csv", "r"); 12$value = array(); 13$userid = ""; 14$name = ""; 15$password = ""; 16while ($line = fgets($user)) { 17 $users = explode(",", $line); 18 if ($_SESSION['id'] == $users[0]) { 19 $userid = trim($users[1]); 20 $name = trim($users[2]); 21 $password = trim($users[3]); 22 } 23} 24print_r($userid); 25// print_r($name); 26// print_r($password); 27// fclose($user); 28if (!empty($_POST['userid2']) && !empty($_POST['name2']) && !empty($_POST['password2'])) { 29 $id = $_SESSION['id']; 30 $userid = $_POST['userid2']; 31 $name = $_POST['name2']; 32 $password = $_POST['password2']; 33 // var_dump($id); 34 // var_dump($userid); 35 // var_dump($name); 36 // var_dump($password); 37 // print_r($_POST); 38 $user = fopen("csv/user.csv", "r"); 39 $value = array(); 40 while ($line = fgets($user)) { 41 $lines = explode(",", $line); 42 if ($lines[0] != $id && trim($lines[1]) == $userid) { 43 44 print_r($lines[0]); 45 $e = "IDがすでに使われています"; 46 // break; 47 } 48 if ($lines[0] != $id && trim($line[1]) != $userid) { 49 $value[] = $line; 50 // print_r($lines[0]); 51 } 52 53 if ($lines[0] == $id) { 54 // print_r($lines); 55 // print_r($value); 56 $textcontent = implode(",", array($id, $userid, $name, $password . "\n")); 57 // $textcontent =$id.",". $userid.",".$name.",".$password."/n"; 58 // $n = nl2br('/n'); 59 $value[] = $textcontent; 60 } 61 } 62 fclose($user); 63 print_r($value); 64 65 $handle = fopen("csv/user.csv", "w"); 66 67 foreach ($value as $val) { 68 fwrite($handle, $val); 69 } 70 fclose($handle); 71 $_SESSION['name'] = $name; 72 $t = "内容を編集しました"; 73} 74 75 76?> 77 78 79 80<!DOCTYPE html> 81<html lang="ja"> 82 83<head> 84 <meta charset="UTF-8"> 85 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 86 <title>テキストテーブル</title> 87</head> 88 89<body> 90 <p style="color:red"><?php echo $e; ?></p> 91 <p style="color:blue"><?php echo $t; ?></p> 92 <form action="edit.php" method="post"> 93 <p><?php echo $_SESSION['name'] . "さんのユーザ編集画面"; ?></p> 94 <lavel>ID</lavel><br> 95 <input type="text" name="userid2" value="<?php echo $userid; ?>"> 96 <br> 97 <lavel>名前</lavel> 98 </lavel><br> 99 <input type="text" name="name2" value="<?php echo $name; ?>"> 100 <br> 101 <lavel>パスワード</lavel><br> 102 <input type="password" name="password2" value="<?php echo $password ?>"> 103 104 <br><input type="submit" value="編集"> 105 <br><input type="reset"> 106 </form> 107 <a href="top.php">トップページ</a> 108 <a href="delete.php">退会処理</a>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

本題ではありませんが、CSVファイルへ排他制御もせずに読み書きすると、同時アクセスで簡単にデータが壊れてしまいます。

何らかの事情でCSVファイルへの保管が必須だというなら話は別ですが、それが要件ではないなら何かしらのデータベースを使うことをおすすめします。PHPであれば、DBサーバを用意しなくてもSQLiteが利用可能です。

投稿2020/09/18 13:13

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nuya

2020/09/18 13:18

たしかにそうなのですが 附番もデータベースなら勝手につけてくれます でも今回の本題ははCSVファイル形式で すべてcsvファイルへの保管を条件にしています。
maisumakun

2020/09/18 13:27

「実用性もデータの安全性も全く無視して、とにかくCSVをデータ保存形式に使うこと」が要件だと解釈して間違いないでしょうか?
nuya

2020/09/18 13:57

そうです。
guest

0

自己解決

まだまだわかりませんが自分で解決します

投稿2020/09/22 22:34

nuya

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ご認識の通り// braekが原因のようです。
チェックをかけても、処理を継続しているのが原因のようです。

投稿2020/09/21 23:45

Kaiser

総合スコア295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問