忍者ブログ

からすまる日誌 mySQL

授業ノートのまとめ

応用(11) ツイッターもどき(3)

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

応用(11) ツイッターもどき(3)

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>
 
PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
karasumaru
性別:
非公開

P R