前提・実現したいこと
プログラミング初心者、独学です。
PHP/MySQLを使用して、手探りで掲示板を作成しています。
現在、フォームに書き込んだ文字列をDBに記録、出力する所まで作ることができました。
荒らし対策として、アカウント機能やアカウントに対するBAN機能を追加したいと考えているのですが、
具体的な導入方法がわかりません。
クライアントが登録した情報を認証する方法(メールアドレス認証や電話番号認証)
クライアントが登録した情報と書き込みを紐付ける方法
おおまかにでも教えて頂けないでしょうか。
また、足りてなさそうな知識や参考文献などもございましたら、教えて頂けると幸いです。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
php
1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Example</title> 6 <link rel="stylesheet" href="SAMPLE.css"> 7 8 </head> 9 <body> 10 11 <p>掲示板</p> 12 13 <form method="POST" action=""> 14 <input type="text" name="name"> *ハンドルネーム<?php echo $err_msg1; ?><br><br><br> 15 <textarea name="content" rows="8" cols="40"></textarea> *内容<?php echo $err_msg2; ?><br> 16 <br><br> 17 <input type="submit" value="投稿する" name="send"> 18 </form> 19 20 21<?php 22 23$created = date('Y-m-d H:i:s'); 24 25 26 27 28 29try { 30 31 /* リクエストから得たスーパーグローバル変数をチェックするなどの処理 */ 32 33 // データベースに接続 34 $pdo = new PDO( 35 'mysql:dbname=;host=localhost;charset=utf8mb4', 36 '', 37 '', 38 [ 39 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 40 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 41 ] 42 ); 43 44 /* データベースから値を取ってきたり, データを挿入したりする処理 */ 45 46 if ( isset( $_POST['send'] ) === true ) { 47 48 $name = $_POST['name'] ; 49 $content = $_POST['content']; 50 $content = nl2br($content); 51 52 if ( $name !== '' && $content !== '' ) { 53 54 $stmt = $pdo -> prepare("INSERT INTO contents (name, message,created) VALUES ('$name', '$content','$created')"); 55 $stmt->bindParam('$name', $NM, PDO::PARAM_STR); 56 $stmt->bindParam('$content', $CT, PDO::PARAM_STR); 57 $stmt->bindParam('$created', $CD, PDO::PARAM_STR); 58 $stmt->execute(); 59 } 60 61 } 62 63 64 65 } catch (PDOException $e) { 66 67 // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了する 68 // - もし手抜きしたくない場合は普通にHTMLの表示を継続する 69 // - ここではエラー内容を表示しているが, 実際の商用環境ではログファイルに記録して, Webブラウザには出さないほうが望ましい 70 header('Content-Type: text/plain; charset=UTF-8', true, 500); 71 exit($e->getMessage()); 72 73 74 75 // Webブラウザにこれから表示するものがUTF-8で書かれたHTMLであることを伝える 76 // (これか <meta charset="utf-8"> の最低限どちらか1つがあればいい. 両方あっても良い.) 77 header('Content-Type: text/html; charset=utf-8'); 78 } 79 80?> 81<?php 82 83// 変数の初期化 84$sql2 = null; 85$res = null; 86$pdo2 = null; 87 88try { 89 // DBへ接続 90 $pdo2 = new PDO( 91 'mysql:dbname=;host=localhost;charset=utf8mb4', 92 '', 93 '', 94 [ 95 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 96 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 97 ] 98 ); 99 100 // SQL作成 101 $sql2 = "SELECT * FROM contents ORDER BY no DESC" ; 102 103 // SQL実行 104 $res = $pdo2->query($sql2); 105 106} catch(PDOException $e) { 107 108 echo $e->getMessage(); 109 die(); 110} 111// 接続を閉じる 112$pdo2 = null; 113?> 114<?php 115//書き込み無しの場合のエラーメッセージ 116$err_msg1 = ""; 117$err_msg2 = ""; 118if ( isset($_POST["send"] ) === true ) { 119 if ( $name === "" ) {$err_msg1 = "名前を入力してください";} 120 121 if ( $content === "" ) {$err_msg2 = "コメントを入力してください";} 122} 123?> 124<?php echo $err_msg1.$err_msg2?> 125 126<?php foreach($res as $value ):?> 127<div class="REDNAME"><?php echo "<hr>$value[name]<br><br>" ?></div> 128<div><?php echo "$value[message]<br>" ?></div> 129<div><?php echo "$value[created]<br>"?></div> 130<?php endforeach;?> 131 132</body> 133</html>
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー