index.phpを作っていくけど、
その前にリクワイアーを使って分離していきましょう
auth.phpの
DBへ接続部分は全ページ共通のはずなので
別のファイルに一元化する
--->config.php
<?php
//--------------------------
//DB接続設定
//環境に合わせて再定義のこと
//--------------------------
$user="root";
$dbpass="";
$host="localhost";
$dbname="twitter";
//--------------------------
$dsn="mysql:host={$host};dbname={$dbname};charset=utf8";
$pdo=new PDO($dsn,$user,$dbpass);
?>
require_onceにしておくと、多重読み込みが回避できるのでそうしておくのがいいらしい。
古い投稿がいつまでもトップにいると良くないので、
SQL文は新しいツイートをトップにしたい
$sql="SELECT * FROM tweets ORDER BY t_id DESC"; //降順
表示だけなのでプリペアードステートメントを使う必要はない
(外から受け取ってるわけじゃないので)
クエリーメソッドでよい
1.ニックネーム
2.ツイート
3.投稿日時
これがひとかたまりになる
<article><!--記事-->
<header></header>
<p></p>
<div></div>
</article>
while():
中かっこの代わりがコロン
つまりこうなる
<!--記事-->
<?php while(): ?>
<article>
<header></header>
<p></p>
<div></div>
</article>
<? php end while; ?>
「endなになに」はセミコロンを付けますよ。
<?php while($row = $res->fetch(PDO::FETCH_ASSOC)): ?> //fetchをするものがあれば継続
この一文は暗記するのもいいらしい
なおセレクト文がまちがってたらしい
$sql="SELECT nickname,tweet,created FROM tweets,users WHERE tweets.u_id=users.u_id ORDER BY t_id DESC";//降順
・取ってくるものをnickname,tweet,created
・ふたつのテーブルにまたがる
・ので、 WHERE tweets.u_id=users.u_idを追加
なお長くなっても一行で書くことをおすすめ。
もし行を区切るならこう記述するらしい。文字列結合で記す。
$sql="SELECT nickname,tweet,created";
$sql .= " FROM tweets,users";
$sql .=" WHERE tweets.u_id=users.u_id ORDER BY t_id DESC";//降順
などと。
スペースはないといけませんよ。上の末尾か次の行の先頭に必要
こうすればコメントを書いてもOK
<header><?php echo $row["nickname"]; ?></header>
これではセキュアじゃない。
こうしましょう
<header><?php echo htmlspecialchars($row["nickname"],ENT_QUOTES); ?></header>
出力するときには文字列は必ずサニタイズしろよというお話。
登録時にはじいていても、変更時にやられるかもだし狙い撃ちされるかもなので、
「出力時」に必ずサニタイズしてやりましょう
echoもわすれずに 恵澄
そういうわけでnicknameとtweetにはサニタイズが必要、
投稿日時にはその必要はない
エラーが出てる
Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\php\makino\twitter\index.php on line 31
ありもしない31lineですね。
↓
<?php
が
<? php
という空白があったのと、
endwhile
を
end whileにしてしまってた。
endのあとに半角あけちゃいけません。
ここまで
--->index.php
<?php
require_once("config.php");
$sql="SELECT nickname,tweet,created FROM tweets,users WHERE tweets.u_id=users.u_id ORDER BY t_id DESC";
$res=$pdo->query($sql);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Twitter タイムライン</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="container">
<h1>My Twitter</h1>
<?php while($row = $res->fetch(PDO::FETCH_ASSOC)): ?>
<article>
<header><?php echo htmlspecialchars($row["nickname"],ENT_QUOTES); ?></header>
<p><?php echo htmlspecialchars($row["tweet"],ENT_QUOTES); ?></p>
<div><?php echo $row["created"]; ?></div>
</article>
<?php endwhile; ?>
</div>
</body>
</html>