忍者ブログ

からすまる日誌 mySQL

授業ノートのまとめ

応用(15) 2人目のユーザーとして投稿

×

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

応用(15) 2人目のユーザーとして投稿

さてエラーが出ました。
 
Parse error: syntax error, unexpected ':' in C:\xampp\htdocs\php\makino\twitter\make_user.php on line 8
 
make_user.phpの
$sql="INSERT INTO users(u_id,pass,nickname) VALUES(:u_id,:pass,:nickname)";
の最後の”が抜けていた。
 
これで分かるのは、エラーさんは「なんか:がおかしいっぽい」と言っているが、

実際は
①その上の行の
②INSERT文の”が抜けていた
ということで、このエラーからもう一段推察しないといけない。(:は関係なかった)
 
ここまで

--->user_form.php
 
<!DOCTYPE html>
<html lang="ja">
 <head>
  <meta charset="utf-8">
  <title>ユーザフォーム</title>
  <link rel="stylesheet" href="css/style.css">
 </head>
 <body>
  <div id="container">
   <h1>ユーザー登録</h1>
   <form method="post" action="make_user.php">
    <table>
     <tr>
      <th><label for="u_id">ユーザ名</label></th>
      <td><input type="text" name="u_id" id="u_id"></td>
     </tr>
     <tr>
      <th><label for="pass">パスワード</label></th>
      <td><input type="password" name="pass" id="pass"></td>
     </tr>
     <tr>
      <th><label for="nickname">ニックネーム</label></th>
      <td><input type="text" name="nickname" id="nickname"></td>
     </tr>
     
    </table>
    <p><button type="submit">登録</button></p>
    
   </form>
  </div>
 </body>
</html>
 
--->make_user.php 
<?php
session_start();
require_once("config.php");
$sql="INSERT INTO users(u_id,pass,nickname) VALUES(:u_id,:pass,:nickname)";
$stmt=$pdo->prepare($sql);
$stmt->bindValue(":u_id",$_POST["u_id"],PDO::PARAM_STR);
//passwordのハッシュ
$pass=password_hash($_POST["pass"],PASSWORD_DEFAULT);//第二引数を定数で指定(時代が変わってもOK)
$stmt->bindValue(":pass",$pass,PDO::PARAM_STR);
$stmt->bindValue("nickname",$_POST["nickname"],PDO::PARAM_STR);
$stmt->execute();
//ログインしたことにして、タイムラインにダイレクトに転送
$_SESSION["login"]=true;
$_SESSION["u_id"]=$_POST["u_id"];
$_SESSION["nickname"]=$_POST["nickname"];
//ページに留まるのは危険なので移動
header("Location: index.php");
exit();
?>
 

別人として登録し、ツイートまで出来た
 
 
なおbindValueの第一引数は「文字列」なので、
" "でくくって初めて文字列と認識される
つまり「:u_id」は変数じゃなくてなんと文字列なのだそうだ。
 

さて、いいねを付け足しましょう
数字をDBで適当に入れておく
 
index.phpに変更を加える
 
$sql="SELECT nickname,tweet,created,likes FROM tweets,users WHERE tweets.u_id=users.u_id ORDER BY t_id DESC";
 
もろもろ修正して
 
ここまで

--->index.php 
 
<?php
session_start();
require_once("config.php");
$sql="SELECT nickname,tweet,created,likes 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="css/style.css">
 </head>
 <body>
  <div id="container">
   <h1>My Twitter</h1>
   
   <!--からっぽでないばあい-->
   <?php if(!empty($_SESSION["login"])): ?>
    <div id="tweetform">
     <form method="post" action="exec.php">
     <textarea name="tweet" rows="2" cols="50"></textarea>
     <!--<input type="text" name="tweet">-->
     <button type="submit">ツイートする<img src="img/player_button08_plus.png"></button>
    </div>
   <?php else: ?>
    <div><a href="login.php">ログインする</a></div>
   <?php endif; ?>
   
   <!--ツイートの数だけwhileで繰り返す-->
   <?php while($row = $res->fetch(PDO::FETCH_ASSOC)): ?>
    <!--articleのくくりが1件のツイートに相当-->
    <article>
     <header>
      <?php echo htmlspecialchars($row["nickname"],ENT_QUOTES); ?>
     </header>
     <p><?php echo htmlspecialchars($row["tweet"],ENT_QUOTES); ?></p>
     <div>
      <span>いいね<img src="img/heart_small.png"> <?php echo $row["likes"] ?></span>
      <?php echo $row["created"]; ?>
     </div>
    </article>
   <?php endwhile; ?>
   
  </div>
  
 </body>
</html>
 
 
--->style.css
 
body{
 background-image: url("../../img/fish_kue2.png");
 color:#333;
}
#container{
 width:80%;
 margin: auto;
 background:#fff;
 padding:0.5rem;
 border-left:solid 1px #eee;
 border-right:solid 1px #eee;
}
table{
 border-collapse:collapse;
}
th,td{
 border:solid 1px #333;
 padding: 0.2rem 0.3rem;
 text-align: left;
}
th{
 background:#eee;
}
h1{
 border-left:10px solid #ffa50a;
 /*border-radius:2rem;*/
 padding:0.5rem;
 color:#ffa50a;
}
/*タイムライン*/
article{
 margin:2rem;
 border-bottom:dotted 2px #ffa50a;
}
article p{
 margin:0.5rem 0;
}
article header{
 font-weight:bold;
 font-size:0.8rem;
}
article div{
 color:#333;
 font-size:0.8rem;
 text-align:right;
}
article div span{
 color:#ffa50a;
 padding-right:1.5rem;
 
}
article div span img{
 width:20px;
}
#tweetform img{
 width:30px;
}
#tweetform textarea{
 font-size:1.2rem;
 padding:0.3rem;
 border-radius:0.2rem;
}
PR

コメント

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

プロフィール

HN:
karasumaru
性別:
非公開

P R