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

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

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

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

Q&A

解決済

4回答

14133閲覧

PHP:パスワードが一致したときのみ、投稿の削除をする簡易掲示板

u835113b

総合スコア13

PHP

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

0グッド

0クリップ

投稿2016/09/10 17:09

編集2016/09/11 07:20

パスワードが一致したときの条件式をプログラムに書いても反応しません。/ファイル消去/ブロックの6行目あたりにあるif文のandの右側の条件式です。この式で使われている$delData[4]と$_POST['pass']は同じ値だとecho関数で確認はしました。どうぞ、よろしくお願いします。

php

1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4<title></title> 5</head> 6<body> 7<?php 8 9/********* ファイル書き込み************/ 10 $dataFile = "keiji_2.txt"; 11 if(isset($_POST['make'])&& empty($_POST['hidden1'])) 12 { 13 $str = (sizeof(file($dataFile))+1) . '<>' . $_POST['name'] . '<>' . $_POST['comment'] . '<>' . date('m/d/H:i') . '<>' .$_POST['password'] . "\n"; 14 $fp = fopen('keiji_2.txt','a'); 15 fwrite($fp, $str); 16 fclose($fp); 17 } 18/********* ファイル消去************/ 19 if (isset($_POST['del'])) 20 { 21 $file_make = file("keiji_2.txt"); 22 for($k = 0;$k <count($file_make); ++$k){ 23 $delData = explode("<>",$file_make[$k]); 24 if(($delData[0] == $_POST['name2']) and ($delData[4] == $_POST['pass'])) 25 { 26 array_splice($file_make, $k, 1); 27 file_put_contents($dataFile, implode("", $file_make)); 28 echo ($_POST['pass']);echo ($delData[4]); 29 } 30 } 31 32 } 33/********* ファイル編集 入力フォーム表示************/ 34 if (isset($_GET['edit'])) 35 { 36 $file_edit = file("keiji_2.txt"); 37 for($l = 0;$l <count($file_edit); ++$l){ 38 $editData = explode("<>",$file_edit[$l]); 39 if($editData[0] == ($_GET['name3'])) { 40 $simEdit = $editData; 41 } 42 } 43 44 } 45 46/********* ファイル編集 ファイル書き込み************/ 47 if (isset($_POST['make']) && isset($_POST['hidden1'])) { 48 49 $file_edit = file("keiji_2.txt"); 50 for($m = 0;$m <count($file_edit); ++$m){ 51 $editData2 = explode("<>",$file_edit[$m]); 52 if($editData2[0] == ($_POST['hidden1'])){ 53 $n = $_POST['hidden1']; 54 $editData2[1] = $_POST['name']; 55 $editData2[2] = $_POST['comment']; 56 $file_edit[$m] = implode("<>", $editData2); 57 file_put_contents($dataFile,implode("", $file_edit)); 58 } 59 }#echo"hello";echo($_POST['hidden1']); 60 } 61 62?> 63 64<form action="keiji_2.php" . "" method="post"> 65 name:<br/> 66<input type="hidden" name="hidden1" value="<?php echo($_GET['name3']);?>"> 67 <input type="text" name="name" size="30" value="<?php echo($simEdit[1]);?>" /><br > 68 password:<br/> 69 <input type="text" name="password" size="30" value=""/><br /> 70 comment:<br/> 71<input type="text" name="comment" size="30" value="<?php echo($simEdit[2]);?> "/><br /> 72 73<br /> 74 <input type="submit" name="make"> 75</form> 76 77<form action="keiji_2.php" . "" method="post"> 78 deleate number:<br/> 79 <input type="text" name="name2" size="30" value=""/><br /> 80 password:<br><br/> 81 <input type="text" name="pass" size ="30" value="fill in password"/><br/> 82 <input type="submit" name="del"> 83 </form> 84 85 86<form action="keiji_2.php" . "" method="get"> 87<input type="hidden" name="hidden" value="<?php echo($_GET['name3']);?>"> 88 edit number:<br/><br/> 89 <input type="text" name="name3" size="30" value="<?php echo($_GET['name3']);?> "/><br /> 90 <input type="submit" name="edit"> 91 92 </form> 93 94 95<?php 96 97/********* txtの最終出力************/ 98 $data_File = "keiji_2.txt"; 99 $ret_array = file($data_File); 100 for($i = 0;$i <count($ret_array); ++$i){ 101 $piece = explode("<>", $ret_array[$i]); 102 for($j = 0; $j < 4; ++$j){ 103 echo ($piece[$j]); 104 } 105 echo "<br />\n"; 106 } 107?> 108 109</body></html>

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

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

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

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

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

kei344

2016/09/10 17:11

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
kei344

2016/09/10 18:11

最後の部分は「'''(カンマ3つ)」ではなく「 ```(バッククオート3つ)」です。記入エリアの右部分あたりにリアルタイムに結果が表示されていると思うので、そこを見ながら調整してください。
guest

回答4

0

IDE(Netbeans)に提示されたソースを貼ってみました↓

イメージ説明

Syntax エラーあります。

開発中はPHPファイルの先頭に

php

1<?php 2ini_set('display_errors', 1); 3error_reporting(E_ALL);

を記述しましょう。エラーが表示されない環境では適切なデバッグはできません。

投稿2016/09/11 09:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

u835113b

2016/09/12 01:46

返信ありがとうございます。追加で質問したいのですが、 if(($delData[0] == $_POST['name2']) and ($delData[4] == $_POST['pass'])) if文中のdelData[4] == $ POST['pass']がうまく機能しません。怪しいと思われた点でもよいのでご指摘お願いします。
退会済みユーザー

退会済みユーザー

2016/09/12 02:06

var_dump() で一つ一つ、意図した値が入っているかどうかを確認しましょう。
guest

0

これ起動させました?エラーが多く掲示板としてなりたってないので、とりあえず消す機能はほっといて簡易掲示板を作ってから消す機能を追加のほうがいいかもしれませんね。

投稿2016/09/11 06:05

toutou

総合スコア2050

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

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

u835113b

2016/09/11 06:42

簡易掲示板は起動できています。/**ファイル消去**/のなかにある if(($delData[0] == $_POST['name2']) and ($delData[4] == $_POST['pass'])) のandの右側を入れたら、投稿の削除ができなくなりました。入れる前までは おもい通りに動いていました。
toutou

2016/09/11 06:58

こちらで確認したところ Undefined variable: simEdit inのエラーが61と65にでています。またファイル消去のところを消してやってみたときもこれが直らなかったので出来てないと判断させてもらいました。keiさんの言ってたコードブロックもお願いできますでしょうか
u835113b

2016/09/11 07:24

ブラウザで開いて、消去以外のところは動いているのですが、これはエラーがあっても動くものなんですか? あと、なぜ消去ができないかが僕にはわからないです。結構考えたのですが、間違っていそうな部分さえもわかりません。どこか怪しい文のところはありますでしょうか? よろしくお願いします。
toutou

2016/09/11 08:47

定義が出来てないというエラーのはずなので定義がいずれかできればなくなるので動きます。こっちは動いてないですがね。消去できない理由としては、自分が妖しいと思ったのがファイルに書き込んでないように見えます。書き込んだときしか開いてなく消したときにファイルに書き込んでないので、そのまま残っているのかと思われます。
guest

0

ベストアンサー

う~ん……質問内容とプログラムの説明が薄いので、なんと回答しようか悩みましたが……
ケチつけていきます。

<input type="hidden" name="hidden1" value="<?php echo($_GET['name3']);?>">
なんで、method="POST"指定してるのに、$_GET!?
他のページから飛んで来ること前提?

$simEditとは……?
パッと見、if文のスコープ内宣言っぽいのでグローバル変数じゃないし……?

if(($delData[0] == $_POST['name2']) and ($delData[4] == $_POST['pass']))
$delData[4] == $_POST['pass']→$delData[1]じゃない?

エラーやワーニング出てたものは、申し訳ないですが全部消しました。

とりあえず、動かせたもの

lang

1<html> 2<head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title></title> 5</head> 6<body> 7 <?php 8 9 /***** ファイル書き込み********/ 10 $dataFile = "keiji_2.txt"; 11 if(isset($_POST['make'])) 12 { 13 $str = (sizeof(file($dataFile))+1) . '<>' . $_POST['name'] . '<>' . $_POST['comment'] . '<>' . date('m/d/H:i') . '<>' .$_POST['password'] . "\n"; 14 $fp = fopen('keiji_2.txt','a'); 15 fwrite($fp, $str); 16 fclose($fp); 17 } 18 /***** ファイル消去********/ 19 if (isset($_POST['del'])) 20 { 21 $file_make = file("keiji_2.txt"); 22 for($k = 0;$k <count($file_make); ++$k){ 23 $delData = preg_split("/<>/", $file_make[$k]); 24 if(($delData[0] == $_POST['name2']) and ($delData[1] == $_POST['pass'])) 25 { 26 echo 'in<hr>'; 27 array_splice($file_make, $k, 1); 28 file_put_contents($dataFile, implode("", $file_make)); 29 echo ($_POST['pass']);echo ($delData[4]); 30 } 31 } 32 33 } 34 /***** ファイル編集 入力フォーム表示********/ 35 if (isset($_GET['edit'])) 36 { 37 $file_edit = file("keiji_2.txt"); 38 for($l = 0;$l <count($file_edit); ++$l){ 39 $editData = explode("<>",$file_edit[$l]); 40 if($editData[0] == ($_GET['name3'])) { 41 $simEdit = $editData; 42 } 43 } 44 45 } 46 47 /***** ファイル編集 ファイル書き込み********/ 48 if (isset($_POST['make']) && isset($_POST['hidden1'])) { 49 50 $file_edit = file("keiji_2.txt"); 51 for($m = 0;$m <count($file_edit); ++$m){ 52 $editData2 = explode("<>",$file_edit[$m]); 53 if($editData2[0] == ($_POST['hidden1'])){ 54 $n = $_POST['hidden1']; 55 $editData2[1] = $_POST['name']; 56 $editData2[2] = $_POST['comment']; 57 $file_edit[$m] = implode("<>", $editData2); 58 file_put_contents($dataFile,implode("", $file_edit)); 59 } 60 }#echo"hello";echo($_POST['hidden1']); 61 } 62 63 ?> 64 65 <!-- 書き込み用フォーム --> 66 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 67 name:<br/> 68 <input type="text" name="name" size="30" value="" /><br > 69 password:<br/> 70 <input type="text" name="password" size="30" value=""/><br /> 71 comment:<br/> 72 <input type="text" name="comment" size="30" value=""/><br /> 73 74 <br /> 75 <input type="submit" name="make"> 76 </form> 77 78 <!-- 削除用フォーム --> 79 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 80 deleate number:<br/> 81 <input type="text" name="name2" size="30" value=""/><br /> 82 password:<br><br/> 83 <input type="text" name="pass" size ="30" placeholder="fill in password"/><br/> 84 <input type="submit" name="del"> 85 </form> 86 87 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get"> 88 <input type="hidden" name="hidden" value="<?php echo($_GET['name3']);?>"> 89 edit number:<br/><br/> 90 <input type="text" name="name3" size="30" value="<?php echo($_GET['name3']);?> "/><br /> 91 <input type="submit" name="edit"> 92 93 </form> 94 95 <?php 96 97 /***** txtの最終出力********/ 98 $data_File = "keiji_2.txt"; 99 $ret_array = file($data_File); 100 for($i = 0;$i <count($ret_array); ++$i){ 101 $piece = explode("<>", $ret_array[$i]); 102 for($j = 0; $j < 4; ++$j){ 103 echo ($piece[$j]); 104 } 105 echo "<br />\n"; 106 } 107 ?> 108 109</body></html> 110

修正版

lang

1<html> 2<head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 <title></title> 5</head> 6<body> 7 <?php 8 9 /***** ファイル書き込み********/ 10 $dataFile = "keiji_2.txt"; 11 12 if(isset($_POST['make'])) 13 { 14 $str = (sizeof(file($dataFile))+1) . '<>' . $_POST['name'] . '<>' . $_POST['comment'] . '<>' . date('m/d/H:i') . '<>' .$_POST['password'] . "\n"; 15 $fp = fopen('keiji_2.txt','a'); 16 fwrite($fp, $str); 17 fclose($fp); 18 } 19 /***** ファイル消去********/ 20 if (isset($_POST['del'])) 21 { 22 $file_make = file("keiji_2.txt"); 23 for($k = 0;$k <count($file_make); ++$k){ 24 $file_make[$k] = preg_replace("/\n/", "", $file_make[$k]); 25 26 echo "fn: ".$file_make[$k]."<hr>"; 27 28 $delData = preg_split("/<>/", $file_make[$k]); 29 30 echo "del: ".$delData[4]."<hr>"; 31 32 if(($delData[0] == $_POST['name2']) and ($delData[4] == $_POST['pass'])) 33 { 34 echo 'in<hr>'; 35 array_splice($file_make, $k, 1); 36 file_put_contents($dataFile, implode("", $file_make)); 37 echo ($_POST['pass']);echo ($delData[4]); 38 } 39 } 40 41 } 42 /***** ファイル編集 入力フォーム表示********/ 43 if (isset($_GET['edit'])) 44 { 45 $file_edit = file("keiji_2.txt"); 46 for($l = 0;$l <count($file_edit); ++$l){ 47 $editData = explode("<>",$file_edit[$l]); 48 if($editData[0] == ($_GET['name3'])) { 49 $simEdit = $editData; 50 } 51 } 52 53 } 54 55 /***** ファイル編集 ファイル書き込み********/ 56 if (isset($_POST['make']) && isset($_POST['hidden1'])) { 57 58 $file_edit = file("keiji_2.txt"); 59 for($m = 0;$m <count($file_edit); ++$m){ 60 $editData2 = explode("<>",$file_edit[$m]); 61 if($editData2[0] == ($_POST['hidden1'])){ 62 $n = $_POST['hidden1']; 63 $editData2[1] = $_POST['name']; 64 $editData2[2] = $_POST['comment']; 65 $file_edit[$m] = implode("<>", $editData2); 66 file_put_contents($dataFile,implode("", $file_edit)); 67 } 68 }#echo"hello";echo($_POST['hidden1']); 69 } 70 71 ?> 72 73 <!-- 書き込み用フォーム --> 74 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 75 name:<br/> 76 <input type="text" name="name" size="30" value="" /><br > 77 password:<br/> 78 <input type="text" name="password" size="30" value=""/><br /> 79 comment:<br/> 80 <input type="text" name="comment" size="30" value=""/><br /> 81 82 <br /> 83 <input type="submit" name="make"> 84 </form> 85 86 <!-- 削除用フォーム --> 87 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 88 deleate number:<br/> 89 <input type="text" name="name2" size="30" value=""/><br /> 90 password:<br><br/> 91 <input type="text" name="pass" size ="30" placeholder="fill in password"/><br/> 92 <input type="submit" name="del"> 93 </form> 94 95 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get"> 96 <input type="hidden" name="hidden" value="<?php echo($_GET['name3']);?>"> 97 edit number:<br/><br/> 98 <input type="text" name="name3" size="30" value="<?php echo($_GET['name3']);?> "/><br /> 99 <input type="submit" name="edit"> 100 101 </form> 102 103 <?php 104 105 /***** txtの最終出力********/ 106 $data_File = "keiji_2.txt"; 107 $ret_array = file($data_File); 108 for($i = 0;$i <count($ret_array); ++$i){ 109 $piece = explode("<>", $ret_array[$i]); 110 for($j = 0; $j < 4; ++$j){ 111 echo ($piece[$j]); 112 } 113 echo "<br />\n"; 114 } 115 ?> 116 117</body></html> 118

解説。
ファイルに書きだした時に、パスワードを最後にくっつけてるんですね…

ファイル番号<>名前<>コメント<>日時<>パスワード\n
一行読み込んだ時に、改行コード「\n」が一緒にくっついてくるのでそれを除去します。
例えば、$file_make[$k] = preg_replace("/\n/", "", $file_make[$k]);みたいに。

いや、失礼しました。

投稿2016/09/10 17:45

編集2016/09/12 02:35
nnahito

総合スコア2004

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

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

u835113b

2016/09/11 06:39

返信ありがとうございます。 ・同じページでform関数を飛ばしています。 ・$delData[4]はあっていると思うのですが....
nnahito

2016/09/11 18:00

>・$delData[4]はあっていると思うのですが.... 何を根拠にこうおっしゃっているのかは分かりませんが、私の実行環境で、私の投稿したコードを実行したところ、きっちりと削除が確認できました。 せっかく訂正し、貼っているので実行くらいはして欲しかったです…
u835113b

2016/09/12 01:39

delData[1]は投稿者の名前で、delData[4]をpasswordにしています。delData[1]のときは名前をpasswordのフォームに入力すると消えましたが、delData[4]にした時が消えません。
nnahito

2016/09/12 02:32

ごめんなさい、本当だ! 名前とパスワード一緒で試してました…… 修正版あげときます。
u835113b

2016/09/15 09:35

返信遅くなってしまい申し訳ありません。プログラムありがとうございます。 修正版のプログラムを少しいじるとできました。 このままのプログラムですと、"/n"を抜いたテキストが出力ファイルに書き込まれてしまい、投稿ごとに改行されないという問題が起きました。
guest

0

PHPのAND条件は、ANDではなく&&です。

PHP

1if(($delData[0] == $_POST['name2']) and ($delData[4] == $_POST['pass'])) 23if(($delData[0] == $_POST['name2']) && ($delData[4] == $_POST['pass']))

これで直るかはわかりませんが…。

投稿2016/09/12 00:36

ttyp03

総合スコア16996

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

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

ttyp03

2016/09/12 01:10

意図して書いているのなら別にいいんですけど、そうではなさそう(他のif文は&&)だったので書いたまでです。
u835113b

2016/09/12 01:41

どちらとも試してみようと思って、変えていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問