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

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

ただいまの
回答率

91.78%

  • PHP

    13275questions

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

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

解決済

回答 4

投稿 2016/09/11 02:09 ・編集 2016/09/11 16:20

  • 評価
  • クリップ 0
  • VIEW 1,248

u835113b

score 5

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

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
</head>
<body>
<?php 

/********* ファイル書き込み************/
    $dataFile = "keiji_2.txt";
    if(isset($_POST['make'])&& empty($_POST['hidden1']))
    {
    $str = (sizeof(file($dataFile))+1) . '<>' . $_POST['name'] . '<>' . $_POST['comment'] . '<>' . date('m/d/H:i') . '<>' .$_POST['password'] . "\n";
    $fp = fopen('keiji_2.txt','a');
    fwrite($fp, $str);
    fclose($fp);
    }
/********* ファイル消去************/
    if (isset($_POST['del']))
    {
        $file_make = file("keiji_2.txt");
        for($k = 0;$k <count($file_make); ++$k){
        $delData = explode("<>",$file_make[$k]);
        if(($delData[0] == $_POST['name2']) and ($delData[4] == $_POST['pass']))
        {
        array_splice($file_make, $k, 1);
        file_put_contents($dataFile, implode("", $file_make));
        echo ($_POST['pass']);echo ($delData[4]);
        }
        }            

    }
/********* ファイル編集 入力フォーム表示************/
   if (isset($_GET['edit'])) 
    {
        $file_edit = file("keiji_2.txt");
        for($l = 0;$l <count($file_edit); ++$l){
        $editData = explode("<>",$file_edit[$l]);
        if($editData[0] == ($_GET['name3'])) {
         $simEdit = $editData;
         }
      }

    }

/********* ファイル編集 ファイル書き込み************/
    if (isset($_POST['make']) && isset($_POST['hidden1'])) {

    $file_edit = file("keiji_2.txt");
        for($m = 0;$m <count($file_edit); ++$m){
        $editData2 = explode("<>",$file_edit[$m]);
        if($editData2[0] == ($_POST['hidden1'])){
            $n = $_POST['hidden1']; 
        $editData2[1] = $_POST['name'];
        $editData2[2] = $_POST['comment'];
        $file_edit[$m] = implode("<>", $editData2);
        file_put_contents($dataFile,implode("", $file_edit));
        }
        }#echo"hello";echo($_POST['hidden1']);
        }

?>

<form action="keiji_2.php" . "" method="post">
 name:<br/>
<input type="hidden" name="hidden1" value="<?php echo($_GET['name3']);?>">
 <input type="text" name="name" size="30" value="<?php echo($simEdit[1]);?>" /><br >
 password:<br/>
 <input type="text" name="password" size="30" value=""/><br />
 comment:<br/>
<input type="text" name="comment" size="30" value="<?php echo($simEdit[2]);?> "/><br />

<br />
 <input type="submit" name="make">
</form>

<form action="keiji_2.php" . "" method="post">
 deleate number:<br/>
 <input type="text" name="name2" size="30" value=""/><br />
 password:<br><br/>
 <input type="text" name="pass" size ="30" value="fill in password"/><br/>
 <input type="submit" name="del">
 </form>


<form action="keiji_2.php" . "" method="get">
<input type="hidden" name="hidden" value="<?php echo($_GET['name3']);?>">
 edit number:<br/><br/>
 <input type="text" name="name3" size="30" value="<?php echo($_GET['name3']);?> "/><br />
 <input type="submit" name="edit">

 </form>


<?php

/********* txtの最終出力************/
    $data_File = "keiji_2.txt";
    $ret_array = file($data_File);
    for($i = 0;$i <count($ret_array); ++$i){
        $piece = explode("<>", $ret_array[$i]);
                    for($j = 0; $j < 4; ++$j){
            echo ($piece[$j]);
            }
        echo "<br />\n";    
    }
?>

</body></html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/09/11 02:11

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

    キャンセル

  • kei344

    2016/09/11 03:11

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

    キャンセル

回答 4

+3

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

イメージ説明

Syntax エラーあります。

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

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

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

投稿 2016/09/11 18:13

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/09/12 10:46

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

    キャンセル

  • 2016/09/12 11:06

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

    キャンセル

+2

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

投稿 2016/09/11 15:05

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/09/11 15:42

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

    キャンセル

  • 2016/09/11 15:58

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

    キャンセル

  • 2016/09/11 16:24

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

    キャンセル

  • 2016/09/11 17:47

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

    キャンセル

checkベストアンサー

+1

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

<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]じゃない?

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

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

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
</head>
<body>
    <?php

    /***** ファイル書き込み********/
    $dataFile = "keiji_2.txt";
    if(isset($_POST['make']))
    {
        $str = (sizeof(file($dataFile))+1) . '<>' . $_POST['name'] . '<>' . $_POST['comment'] . '<>' . date('m/d/H:i') . '<>' .$_POST['password'] . "\n";
        $fp = fopen('keiji_2.txt','a');
        fwrite($fp, $str);
        fclose($fp);
    }
    /***** ファイル消去********/
    if (isset($_POST['del']))
    {
        $file_make = file("keiji_2.txt");
        for($k = 0;$k <count($file_make); ++$k){
            $delData = preg_split("/<>/", $file_make[$k]);
            if(($delData[0] == $_POST['name2']) and ($delData[1] == $_POST['pass']))
            {
                echo 'in<hr>';
                array_splice($file_make, $k, 1);
                file_put_contents($dataFile, implode("", $file_make));
                echo ($_POST['pass']);echo ($delData[4]);
            }
        }

    }
    /***** ファイル編集 入力フォーム表示********/
    if (isset($_GET['edit']))
    {
        $file_edit = file("keiji_2.txt");
        for($l = 0;$l <count($file_edit); ++$l){
            $editData = explode("<>",$file_edit[$l]);
            if($editData[0] == ($_GET['name3'])) {
                $simEdit = $editData;
            }
        }

    }

    /***** ファイル編集 ファイル書き込み********/
    if (isset($_POST['make']) && isset($_POST['hidden1'])) {

        $file_edit = file("keiji_2.txt");
        for($m = 0;$m <count($file_edit); ++$m){
            $editData2 = explode("<>",$file_edit[$m]);
            if($editData2[0] == ($_POST['hidden1'])){
                $n = $_POST['hidden1'];
                $editData2[1] = $_POST['name'];
                $editData2[2] = $_POST['comment'];
                $file_edit[$m] = implode("<>", $editData2);
                file_put_contents($dataFile,implode("", $file_edit));
            }
        }#echo"hello";echo($_POST['hidden1']);
    }

    ?>

    <!-- 書き込み用フォーム -->
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        name:<br/>
        <input type="text" name="name" size="30" value="" /><br >
        password:<br/>
        <input type="text" name="password" size="30" value=""/><br />
        comment:<br/>
        <input type="text" name="comment" size="30" value=""/><br />

        <br />
        <input type="submit" name="make">
    </form>

    <!-- 削除用フォーム -->
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        deleate number:<br/>
        <input type="text" name="name2" size="30" value=""/><br />
        password:<br><br/>
        <input type="text" name="pass" size ="30" placeholder="fill in password"/><br/>
        <input type="submit" name="del">
    </form>

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
        <input type="hidden" name="hidden" value="<?php echo($_GET['name3']);?>">
        edit number:<br/><br/>
        <input type="text" name="name3" size="30" value="<?php echo($_GET['name3']);?> "/><br />
        <input type="submit" name="edit">

    </form>

    <?php

    /***** txtの最終出力********/
    $data_File = "keiji_2.txt";
    $ret_array = file($data_File);
    for($i = 0;$i <count($ret_array); ++$i){
        $piece = explode("<>", $ret_array[$i]);
        for($j = 0; $j < 4; ++$j){
            echo ($piece[$j]);
        }
        echo "<br />\n";
    }
    ?>

</body></html>

 修正版

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
</head>
<body>
    <?php

    /***** ファイル書き込み********/
    $dataFile = "keiji_2.txt";

    if(isset($_POST['make']))
    {
        $str = (sizeof(file($dataFile))+1) . '<>' . $_POST['name'] . '<>' . $_POST['comment'] . '<>' . date('m/d/H:i') . '<>' .$_POST['password'] . "\n";
        $fp = fopen('keiji_2.txt','a');
        fwrite($fp, $str);
        fclose($fp);
    }
    /***** ファイル消去********/
    if (isset($_POST['del']))
    {
        $file_make = file("keiji_2.txt");
        for($k = 0;$k <count($file_make); ++$k){
            $file_make[$k] = preg_replace("/\n/", "", $file_make[$k]);

            echo "fn: ".$file_make[$k]."<hr>";

            $delData = preg_split("/<>/", $file_make[$k]);

            echo "del: ".$delData[4]."<hr>";

            if(($delData[0] == $_POST['name2']) and ($delData[4] == $_POST['pass']))
            {
                echo 'in<hr>';
                array_splice($file_make, $k, 1);
                file_put_contents($dataFile, implode("", $file_make));
                echo ($_POST['pass']);echo ($delData[4]);
            }
        }

    }
    /***** ファイル編集 入力フォーム表示********/
    if (isset($_GET['edit']))
    {
        $file_edit = file("keiji_2.txt");
        for($l = 0;$l <count($file_edit); ++$l){
            $editData = explode("<>",$file_edit[$l]);
            if($editData[0] == ($_GET['name3'])) {
                $simEdit = $editData;
            }
        }

    }

    /***** ファイル編集 ファイル書き込み********/
    if (isset($_POST['make']) && isset($_POST['hidden1'])) {

        $file_edit = file("keiji_2.txt");
        for($m = 0;$m <count($file_edit); ++$m){
            $editData2 = explode("<>",$file_edit[$m]);
            if($editData2[0] == ($_POST['hidden1'])){
                $n = $_POST['hidden1'];
                $editData2[1] = $_POST['name'];
                $editData2[2] = $_POST['comment'];
                $file_edit[$m] = implode("<>", $editData2);
                file_put_contents($dataFile,implode("", $file_edit));
            }
        }#echo"hello";echo($_POST['hidden1']);
    }

    ?>

    <!-- 書き込み用フォーム -->
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        name:<br/>
        <input type="text" name="name" size="30" value="" /><br >
        password:<br/>
        <input type="text" name="password" size="30" value=""/><br />
        comment:<br/>
        <input type="text" name="comment" size="30" value=""/><br />

        <br />
        <input type="submit" name="make">
    </form>

    <!-- 削除用フォーム -->
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        deleate number:<br/>
        <input type="text" name="name2" size="30" value=""/><br />
        password:<br><br/>
        <input type="text" name="pass" size ="30" placeholder="fill in password"/><br/>
        <input type="submit" name="del">
    </form>

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
        <input type="hidden" name="hidden" value="<?php echo($_GET['name3']);?>">
        edit number:<br/><br/>
        <input type="text" name="name3" size="30" value="<?php echo($_GET['name3']);?> "/><br />
        <input type="submit" name="edit">

    </form>

    <?php

    /***** txtの最終出力********/
    $data_File = "keiji_2.txt";
    $ret_array = file($data_File);
    for($i = 0;$i <count($ret_array); ++$i){
        $piece = explode("<>", $ret_array[$i]);
        for($j = 0; $j < 4; ++$j){
            echo ($piece[$j]);
        }
        echo "<br />\n";
    }
    ?>

</body></html>

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

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

いや、失礼しました。

投稿 2016/09/11 02:45

編集 2016/09/12 11:35

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/09/11 15:39

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

    キャンセル

  • 2016/09/12 03:00

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

    キャンセル

  • 2016/09/12 10:39

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

    キャンセル

  • 2016/09/12 11:32

    ごめんなさい、本当だ!
    名前とパスワード一緒で試してました……

    修正版あげときます。

    キャンセル

  • 2016/09/15 18:35

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

    キャンセル

0

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

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


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

投稿 2016/09/12 09:36

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2016/09/12 10:07

    andと&&って優先順位の違いだけじゃなかったでしたっけ?http://php.net/manual/ja/language.operators.logical.php

    キャンセル

  • 2016/09/12 10:10

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

    キャンセル

  • 2016/09/12 10:41

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

    キャンセル

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

ただいまの回答率

91.78%

関連した質問

  • 解決済

    php 掲示板の消去機能

    ```php コード <?php ini_set('display_errors', 1); error_reporting(E_ALL); date_defa

  • 解決済

    php 簡易掲示板の編集

    実現したいこと 簡易掲示板について。 テキストと送信ボタンがある掲示版を扱います。 フォームを送信すると、別に用意したテキストファイルに内容が保存され、そこから読みだされた内

  • 解決済

    掲示板の作成においてリロードしたら同じ投稿がされるのを防ぎたい

    名前、タイトル、本文を投稿することができる掲示板を作成しました。投稿に関してはなんの問題もありません。しかし、投稿が成功したあとに更新ボタンをおすとおなじ投稿が投稿されてしまいます

  • 解決済

    掲示板の削除機能をつけたい

    簡易な掲示板を作成しました。タイトルや名前などをつけて投稿ができるようになっています。このコードを応用してできるだけ簡単に投稿した内容を削除する機能をつけたいです。アイデアが思い浮

同じタグがついた質問を見る

  • PHP

    13275questions

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

閲覧数の多いPHPの質問