掲示板の記事の削除

このQ&Aのポイント
  • 掲示板の記事が削除されない原因がわからず困っている。回答や具体的な手順を教えてほしい。
  • 掲示板の記事削除のソースコードの問題について質問。記事が削除されない原因を知りたい。
  • 掲示板の記事削除の覧でのソースについて質問。記事削除が正しく機能していない。
回答を見る
  • ベストアンサー

掲示板の記事の削除

データの削除の覧でのソースについての質問です。 記事が削除されません。原因がわからないので困ってます。 答えをズバリ書いてくれたり、一からでもいいのでこっちのほうが簡単にできるよってのでも良いです。よろしくお願いします <HTML> <HEAD> <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=sjis"> <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" > <TITLE>削除操作</TITLE> </HEAD> <BODY> <BR> <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST"> <INPUT TYPE ="text" NAME="comment" SIZE="40"><BR> 削除キー<INPUT TYPE="password" NAME="pass" SIZE="10"><BR> <INPUT TYPE ="submit" NAME="regist" VALUE="ボタン"><BR> </FORM> <BR><BR> </CENTER> </BODY> </HTML> <? $data_file = "test01.txt"; if(!isset($code)) { $code = $_POST['code']; } if(!isset($comment)) { $comment = $_POST['comment']; } if(!isset($regit)) { $regist = $_POST['regist']; } if(!isset($delete)) { $delete = $_POST['delete']; } if(!isset($delcode)) { $delcode = $_POST['delcode']; } if(!isset($password)){ $password = $_POST['password']; } if(!isset($pass)) { $pass = $_POST['pass']; } //データの削除 if($delete){ if(($delcode != "") && ($password != "")){ $delfile = file($data_file); $fp = fopen($data_file, "w"); for($i=0; $i<count($delfile); $i++){ list($dcode,$dcomment,$dpass) = split( ",", $delfile[$i]); if ($password == $dpass){ if ($delcode == $dcode) { $delfile[$i] = ""; } } } fputs($fp,$delfile[$i]); fclose($fp); } unset($delfile); } //データの書き込み if($regist){ if(($pass != "") && ($comment != "")){ $code = time(); //アクセス時の秒数 $imput_msg = ( $code .','. $comment .','.$pass); //ファイル操作 $fp = fopen($data_file,"a+"); rewind($fp); fputs($fp,"$imput_msg\n"); fclose($fp); } } //出力処理 $msg = file($data_file); for($i = 0; $i < count($msg); $i++){ list($code2,$comment2,$pass2) = split( ",", $msg[$i]); print "<form method=\"POST\" action=\"$PHP_SELF\">"; print "<input type=\"checkbox\" name=\"delcode\" value=\"$code2\"><br>\n"; print "code2: $code2<br>"; print "comment:$comment2<br>"; print "pass: $pass2<br>"; print " 削除用パスワード:<input type=password size=10 name=password>"; print " <input type=\"submit\" name=\"delete\" value=\"削除\">\n"; print "</form>\n"; } unset($msg); ?>

  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>trim()はスペースを無くすという意味ですが何かのバグの問題処理なんです >か?使う用途を教えていただけると嬉しいです trim()をリファレンスで確認すればわかりますが、スペースだけではありません。改行コードも落とします。 先の回答でも書きましたが、file()で配列にいれた場合には、各文字列の最後に改行コードが付いたままです。explodeで分割しても3つめのパスワード項目の後ろに改行が付いたまま切り出されますので、POSTされた(改行コードなしの)文字列とは一致しません。 (蛇足) いちいちtrimが面倒なので保存時に行末にダミーのカンマを付加しておく・・ということもしますね。そのときは list($dcode, $dcomment, $dpass, $dummy)とかで切り出します($dummyには「改行のみ」が入ってきます)。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>ここに書いてあります。 なので前半のHTMLが何のためにあるのかわからなかったのです(汗 閑話休題。   list($dcode,$dcomment,$dpass) = split( ",", trim($delfile[$i]));  もしくは   if ($password == trim($dpass)){ に書き替えてもダメでしょうか?file()で読み込んでいれば、最後に改行がくっ付いたままなので$dpassは改行コード込みの内容になっていると思います。trim()を通してからチェックしてみてください。

melon3q
質問者

お礼

//データの削除 if($delete){ if(($delcode != "") && ($password != "")){ $delfile = file($data_file); $fp = fopen($data_file, "w"); for($i=0; $i<count($delfile); $i++){ list($dcode,$dcomment,$dpass) = split( ",", $delfile[$i]); ここにビックリマークを入れて処理方法を逆にしてみたら任意の記事を削除してくれました。 if ($password !== $dpass){ if ($delcode !== $dcode) { fputs($fp, $delfile[$i]); }else{ $delfile[$i] = ""; fputs($fp, $delfile[$i]); } } } fclose($fp); } unset($delfile); }

melon3q
質問者

補足

えーっとこの上にtrim()を付けても問題なく動きました。 trim()はスペースを無くすという意味ですが何かのバグの問題処理なんですか?使う用途を教えていただけると嬉しいです

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

phpから出力するHTMLと、最初に提示されているHTMLが違うのですが・・   <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST">   <INPUT TYPE ="text" NAME="comment" SIZE="40"><BR>   削除キー<INPUT TYPE="password" NAME="pass" SIZE="10"><BR>   <INPUT TYPE ="submit" NAME="regist" VALUE="ボタン"><BR>   </FORM> この中にはname="delete"というものが存在していませんよね? とりあえずスクリプトに print_r($_POST) などを追加して、期待する値がPOSTされているのかの確認から始めてみてください。

melon3q
質問者

お礼

>この中にはname="delete"というものが存在していませんよね? //出力処理の中に print " 削除用パスワード:<input type=password size=10 name=password>"; print " <input type=\"submit\" name=\"delete\" value=\"削除\">\n"; ここに書いてあります。値はprintでコード、コメント、パスワード、出力した時、入ってました。 削除の指示の際、指定した記事の削除が行われないバグが出ました。

関連するQ&A

  • PHPで作る掲示板について

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか?環境はWin7でサーバは用意されたものを使用しているので 設定等の必要はありません。 画像は上が送信前、下が送信後です <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP
  • PHPで作る掲示板のプログラムについて

    これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると 例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません どうすれば解決できますか? <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • 締切済み
    • PHP
  • 他ページの入力内容を出力するには

    PHPあまり詳しくないです。 会員登録ページなるものを作っています。 register.phpというページで入力した会員情報をconfirm.phpというページで最終確認させたいのですが、その際に入力した情報がconfirm.phpに反映されません。 regiser.php <?php $a = (!empty($_POST['name'])); $b = (!empty($_POST['email'])); $c = (!empty($_POST['password'])); $d = (!strlen($_POST['password']) < 4); if (isset($_POST['check'])) { if ($a && $b && $c && $d) { header('Location: confirm.php'); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> </head> <body> <h3>新規登録</h3> <form method="POST" action=""> <div class="container"> <label for="name">ユーザ名(20文字以内)</label> <br /> <input type="text" id="name" name="name" maxlength="20" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['name'])) { print('※ユーザ名を入力してください'); } } ?> <br /><br /> <div class="container"> <label for="email">メールアドレス(100文字以内)</label> <br /> <input type="text" id="email" name="email" maxlength="100" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['email'])) { print('※メールアドレスを入力してください'); } } ?> <br /><br /> <div class="container"> <label for="password">パスワード(4文字以上20文字以内)</label> <br /> <input type="password" id="password" name="password" maxlength="20"/> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['password'])) { print('※パスワードを入力してください'); } elseif (strlen($_POST['password']) < 4) { print('※パスワードは4文字以上で入力してください'); } } ?> <br /><br /> <input type="submit" name="check" value="確認する" /> </form> </body> </html> confirm.php <?php $a = (!empty($_POST['name'])); $b = (!empty($_POST['email'])); $c = (!empty($_POST['password'])); $d = (!strlen($_POST['password']) < 4); if (isset($_POST['check'])) { if ($a && $b && $c && $d) { header('Location: confirm.php'); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> </head> <body> <h3>新規登録</h3> <form method="POST" action=""> <div class="container"> <label for="name">ユーザ名(20文字以内)</label> <br /> <input type="text" id="name" name="name" maxlength="20" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['name'])) { print('※ユーザ名を入力してください'); } } ?> <br /><br /> <div class="container"> <label for="email">メールアドレス(100文字以内)</label> <br /> <input type="text" id="email" name="email" maxlength="100" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['email'])) { print('※メールアドレスを入力してください'); } } ?> <br /><br /> <div class="container"> <label for="password">パスワード(4文字以上20文字以内)</label> <br /> <input type="password" id="password" name="password" maxlength="20"/> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['password'])) { print('※パスワードを入力してください'); } elseif (strlen($_POST['password']) < 4) { print('※パスワードは4文字以上で入力してください'); } } ?> <br /><br /> <input type="submit" name="check" value="確認する" /> </form> </body> </html> できればあまりこの形は変えたくありません…。 action部分をconfirm.phpに変えると、入力値が空だったりするエラー時にconfirm.phpに飛ばないようにする方法が分かりません。 回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで作る掲示板について

    以前にも質問しましたがフォームから日本語を送信すると文字化けが発生します info.phpでPHPのマルチバイト系の設定を確認したとこを下のようになっていました。 サーバは借りているのでphp.iniで設定変更できないため.htaccessで対処しようと したのですがうまくいきませんでした。解決策をお願いします 環境はWin7でPHPのバージョンは 5.3.10です mbstring.detect_order auto mbstring.encoding_translation On mbstring.func_overload 0 mbstring.http_input auto mbstring.http_output UTF-8 mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml) mbstring.internal_encoding UTF-8 mbstring.language Japanese Japanese mbstring.script_encoding no value mbstring.strict_detection Off mbstring.substitute_character no value //プログラム <?php $lines = file('bbs2.txt'); if ($_POST['write']) { $items = explode("\t", $lines[0]); $no = $items[0] + 1; $name = htmlspecialchars($_POST['name']); if (!$name) $name = "名無しさん"; $mail = htmlspecialchars($_POST['mail']); $title = htmlspecialchars($_POST['title']); if (!$title) $title = "無題"; $contents = htmlspecialchars($_POST['contents']); $contents = str_replace("\r\n", "<br>", $contents); $contents = str_replace("\r", "<br>", $contents); $contents = str_replace("\n", "<br>", $contents); $delkey = htmlspecialchars($_POST['delkey']); $time = date("Y/m/d H:i:s"); $expire = time() + 3600 * 24 * 30; setcookie("name", $name, $expire); setcookie("mail", $mail, $expire); setcookie("delkey", $delkey, $expire); $data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n"; array_unshift($lines, $data); } else { $name = $_COOKIE['name']; $mail = $_COOKIE['mail']; $delkey = $_COOKIE['delkey']; } if ($_POST['delete']) { for ($i = 0; $i < count($lines); $i++) { $items = explode("\t", $lines[$i]); if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) { array_splice($lines, $i, 1); } } } if ($_POST['write'] || $_POST['delete']) { $fp = fopen('bbs2.txt', 'w'); foreach($lines as $line) fputs($fp, $line); fclose($fp); } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>掲示板2</title> </head> <body> <form method="post" action="bbs2.php"> お名前:<input type="text" name="name" value="<?php print $name ?>"><br> メール:<input type="text" name="mail" value="<?php print $mail ?>"><br> 題 名:<input type="text" name="title"><br> 削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br> <textarea name="contents" cols="60" rows="5"></textarea><br> <input type="submit" name="write" value="送信"> <hr> 記事番号:<input type="text" name="delno">  削除キー: <input type="password" name="delkey2">  <input type="submit" name="delete" value="記事削除"> </form> <hr> <?php foreach($lines as $line) { $line = rtrim($line); $items = explode("\t", $line); print "No.{$items[0]} "; print "<b>{$items[3]}</b> 投稿者:"; if ($items[2]) print "<a href='mailto:{$items[2]}'>"; print $items[1]; if ($items[2]) print "</a>"; print " 投稿時間:{$items[6]}"; print "<p>{$items[4]}</p><hr>\n"; } ?> </body> </html>

    • ベストアンサー
    • PHP
  • <?php

    <?php if(isset($_POST['name'])){ $name = htmlspecialchars($_POST['name']); if (empty($name)) { $message = '未入力があります'; } } if(isset($_POST['regist'])) { $regist = htmlspecialchars($_POST['regist']); if($message) { header('Location:regist2.php'); } } ?> <html> <form action="regist2.php" name="form" method="post"> <div align=left> 名前<input type="text" name="name" maxlength="16" istyle="1" format="M" mode="hiragana" style="-wap-input-format:&quot;*&lt;ja:h&gt;&quot;; -wap-input-format:*M;" /><br /> <input type="submit" name="regist" value="送信" /> </form> と携帯サイトを作成してるのですが、空白でもそのままregist2にいってしまい困っております。 空白の場合はsubmit押してもエラーを表示させたいのです 問題がなければ、そのままregist2.phpへいかせる方法はないでしょうか? ご教授お願い致します。

    • 締切済み
    • PHP
  • 掲示板ログの削除方法が分かりません

    XAMPP for Windows Version 1.5.4a   PHP: 5.1.6 掲示板に削除ナンバーと削除キーが合えば記事削除したいのですが行き詰ってます、教えてください。 01.phpが本体01.txtが保存ファイル 01.txtへの書き込みは、タブ区切り 8 名前 タイトル コメント 投稿時間 メールアドレス URL 削除キー $ireru=file("01.txt"); if($_POST["write"]){ $nosyori=explode("\t",$ireru[0]); $no=$nosyori[0]+1; ~タグ処理・改行対策・エラーチェック記述~ $data="$no\t$name\t$title\t$comment\t$time\t$mail\t$url\t$sakujyokey\n"; array_unshift($ireru, $data); } //削除処理// ここが問題・・・ //再構築// if($_POST['write'] || $_POST['delete']){ $fp=fopen("01.txt","w"); foreach($ireru as $dasu) fputs($fp,$dasu); fclose($fp);} 番号<input type="text" name="delno">削除キー<input type="password" name="sakujyokey2" value=""> <input type="submit" name="delete" value="記事削除"> ------------------------------------------ 下記を実行すると記事分だけ(9記事あれば削除できませんが9回出る)削除できませんが返ってきます。 if($_POST['delete']){ for($i=0; $i<count($ireru); $i++){ $nosyori=explode("\t",$ireru[$i]); if($nosyori[0] == $_POST['delno'] && $nosyori[7] == $_POST['sakujyokey2']){ array_splice($ireru,$i,1); echo"該当記事を削除しました"; }else{echo"削除できません";} } よろしくお願いします

    • 締切済み
    • PHP
  • 掲示板で更新処理をすると、なぜか書込みされてしまいます。

    掲示板で更新処理をすると、なぜか書込みされてしまいます。 どなたかわかる方教えて下さい、宜しくお願いします。 <HTML> <?php $data_file = "test.log"; //データファイル名 if(!isset($PHP_SELF)){ $PHP_SELF = $_SERVER["PHP_SELF"]; } if(!isset($action)){ $action = $_POST['action']; } if(!isset($tenki)){ $tenki = $_POST['tenki']; } if(!isset($comment)){ $comment = $_POST['comment']; } if(!isset($upfile)){ $upfile = $_POST['upfile']; } ?> <HEAD> <meta http-equiv="pragma" content="no-cache" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="expires" content="0" /> <meta http-equiv="content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> </HEAD> <BODY ALIGN="LEFT" BGCOLOR="#000000" TEXT="#FFFFFF" > ■TEST<br><br> <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" ENCTYPE="multipart/form-data" style="margin: 0px;"> <P><INPUT TYPE="HIDDEN" NAME="action" VALUE="regist"></P> <SELECT NAME="tenki" SIZE="1"> <OPTION VALUE="不明">未</OPTION> <OPTION VALUE="☆快晴">☆快晴</OPTION> <OPTION VALUE="○晴">○晴</OPTION> <OPTION VALUE="○晴曇">○晴曇</OPTION> <OPTION VALUE="△曇">△曇</OPTION> <OPTION VALUE="▼雨">▼雨</OPTION> </select> <br> コメント<br> <TEXTAREA NAME="comment" ROWS="5" COLS="28" style="font-size:10pt; color:#000000"></TEXTAREA><BR> <?php print "<INPUT TYPE='SUBMIT' VALUE=' 書込み/更新 '> <INPUT TYPE='RESET' VALUE='リセット'>\n"; ?> </FORM> <?php //===============データの書き込み================= if ($action == "regist") { $fp = fopen($data_file, "r+"); // ファイル開く $comment0 = fgets( $fp); //値読み取り $comment=$tenki."\\".$comment."\\".$action."<br>".$comment0; fputs($fp, $comment); fclose($fp); echo"<font size=1 color='white'>"; echo $comment; echo"<br>"; echo"$comment0"; echo"</font>"; unset($action); unset($tenki); unset($comment); unset($comment0); } ?> </body> </html>

    • ベストアンサー
    • PHP
  • 他ページの内容を出力するには

    PHPあまり詳しくないです。 会員登録ページなるものを作っています。 register.phpというページで入力した会員情報をconfirm.phpというページで最終確認させたいのですが、その際に入力した情報がconfirm.phpに反映されません。 regiser.php <?php $a = (!empty($_POST['name'])); $b = (!empty($_POST['email'])); $c = (!empty($_POST['password'])); $d = (!strlen($_POST['password']) < 4); if (isset($_POST['check'])) { if ($a && $b && $c && $d) { header('Location: confirm.php'); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> </head> <body> <h3>新規登録</h3> <form method="POST" action=""> <div class="container"> <label for="name">ユーザ名(20文字以内)</label> <br /> <input type="text" id="name" name="name" maxlength="20" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['name'])) { print('※ユーザ名を入力してください'); } } ?> <br /><br /> <div class="container"> <label for="email">メールアドレス(100文字以内)</label> <br /> <input type="text" id="email" name="email" maxlength="100" /> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['email'])) { print('※メールアドレスを入力してください'); } } ?> <br /><br /> <div class="container"> <label for="password">パスワード(4文字以上20文字以内)</label> <br /> <input type="password" id="password" name="password" maxlength="20"/> </div> <?php if (isset($_POST['check'])) { if (empty($_POST['password'])) { print('※パスワードを入力してください'); } elseif (strlen($_POST['password']) < 4) { print('※パスワードは4文字以上で入力してください'); } } ?> <br /><br /> <input type="submit" name="check" value="確認する" /> </form> </body> </html> confirm.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>確認画面</title> </head> <body> <h3>入力内容を確認してください</h3> <form method="POST" action=""> <br /><br /> <p>ユーザ名</p> <br /> <?php print htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?> <br /> <p>メールアドレス</p> <?php print htmlspecialchars($_POST['email'], ENT_QUOTES, 'UTF-8'); ?> <br /> <p>パスワード</p> <?php print htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8'); ?> <br /><br /><br /> <?php print('この内容でよろしければ下の登録ボタンを押してください'); ?> <br /> <form method="POST" action="dbconnect.php"> <input type="submit" name="completion" value="登録する" /> </form> <br /><br /> <?php print('変更がある場合は下の戻るボタンを押してください'); ?> <br /> <form method="POST" action="register.php"> <input type="submit" value="戻る" /> </form> </body> </html> できればあまりこの形は変えたくありません…。 action部分をconfirm.phpに変えると、入力値が空だったりするエラー時にconfirm.phpに飛ばないようにする方法が分かりません。 回答よろしくお願いします。 色々と間違えていたのであげ直させていただきました。

    • 締切済み
    • PHP
  • php ログインについて

    php ログインについて phpでログイン画面を作っているのですがログインできません。エラー等々もでず、「スタッフコードかパスワードが違います」になります。ちなみにDBにはスタッフのデータはしっかり存在します。 コードとパスワードを正しく入力しているにもかかわらずログインできません。 ソースはこちらです [staff_login.php] <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>ログイン</title> </head> <body> スタッフログイン<br/> <br/> <form method="post" action="staff_login_check.php"> スタッフコード<br/> <input type="text" name="code"><br/> パスワード<br/> <input type="password" name="pass"><br/> <br/> <input type="submit" value="ログイン"> </form> </body> </html> [staff_login_check.php] <?php try { $staff_code=$_POST['code']; $staff_pass=$_POST['pass']; $staff_code=htmlspecialchars($staff_code); $staff_pass=htmlspecialchars($staff_pass); $staff_pass=md5($staff_pass); $dsn='mysql:dbname=*****;host=********'; $user='*********'; $password='********'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT name FROM mst_staff WHERE code=? AND password=?'; $stmt=$dbh->prepare($sql); $data[]=$staff_code; $data[]=$staff_pass; $stmt->execute($data); $dbh = null; $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { print'スタッフコードかパスワードが違います<br/>'; print'<a href="staff_login.html">戻る</a>'; } else { header('Location: staff_top.php'); } } catch(Exception $e) { print'エラーが発生しました'; exit(); } ?> 解決方法、ご指摘ございましたら教えていただきたいです。

    • ベストアンサー
    • PHP
  • 変数の比較

    <FORM action="<?php echo $PHP_SELF; ?>" method="POST" enctype="application/x-www-form-urlencoded"> <INPUT TYPE="HIDDEN" NAME="action" VALUE="post"> ユーザーID<INPUT TYPE="TEXT" NAME="u_id" SIZE="12"> パスワード<INPUT TYPE=password NAME="passwd" SIZE="12"> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="認証スタート"> <?php $DBSERVER ="hogehoge"; $DBUSER ="hogehoge"; $DBNAME ="hogehoge"; $DBPASSWORD ="hogehoge"; $con = mysql_connect( $DBSERVER , $DBUSER, $DBPASSWORD ); $selectdb = mysql_select_db($DBNAME,$con); if( $_POST['action'] == "post" ) { $id = $_POST['u_id']; $pass = $_POST['passwd']; $rst = mysql_query( "select * from UserInfo where name = '$id'", $con); print "<BR>"; print $id."<BR>"; print $pass."<BR>"; while( $col = mysql_fetch_row($rst) ) { print "<BR>"; print $col[0]."<BR>"; print $col[1]."<BR>"; print $col[2]."<BR>"; } } if( $pass == $col[2] ) { print "<BR>"; print "パスの一致<BR>"; }else{ print "パスが違います<BR>"; } ?> </FORM> 未だに判りません。 if( $pass == $col[2] )で 値が一緒でも、そうじゃなくても "パスの一致"が表示されます。 $pass = $_POST['passwd']; ちゃんと↑ので値は取得出来ているのは確認できており print $col[2]."<BR>"; で$passと違う文字列が入っていることも確認しましたが、パスの一致が表示されます。 再度の質問ですが、かなり困っています。 御教授お願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう