ネット上で公開されているソースコードを真似して練習しているのですが、フレームを使ったチャットルームでわからないことがあるので教えてください。
まず、ネームを入力してログインボタンを押す画面があり、それのコードは、
<p>お名前を入力してログインボタンを押してください。</p>
<form action="main.php" method="post" taeget="_self">
<input type="text" name="nick" cols="20">
<input type="submit" value="ログイン"><br>
</form>
これで、main.phpがフレームで読み込みと書き込みを上下に分けたページになっていて、
nickはこのmain.phpに
<?
setcookie("nick",$nick) //use cookie to store user nickname
?>
と記述するようになっているのでそのようにしたのですが、実際に書き込んでみると、nickの値のみが
mySQLに書き込まれていませんでした。
書き込み用のページ(speak.php)のコードは、
<?php
$user = "root";
$password = "";
$pdo = new PDO('mysql:dbname=sim2;host=localhost;',$user,$password);
$pdo->query('SET NAMES utf8');
date_default_timezone_set('Asia/Tokyo');
$time = date('Y m/d H:i:s');
if(isset($_POST['nick'])) $nick=$_POST['nick']; else $nick="";
if(isset($_POST['words'])) $words=$_POST['words']; else $words="";
if($words !="")
{
$write = $pdo->prepare("INSERT INTO chat(chtime,nick,words) VALUES('$time','$nick','$words')");
$write->execute();
}
$pdo=null;
?>
<form action="speak.php" method="post" target="_self">
<input type="text" name="words" cols="20">
<input type="submit" value="書き込む"><br>
</form>
このようにしたのですが、nickの値が書き込みできない原因はわかりますでしょうか?
あと、クッキーを使わずにフレームを使ったやり方でnickを取得する方法って他にありますか?
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
>そうなんですか?クッキーについて一応調べてはみた
いや、命題に
>setcookie("nick",$nick)
とあるので、そうかと思いましたが違いますか?
>名前付きプレースホルダか「?」プレースホルダを使うのが良いと本に書いてあるので
むしろ?を使わないのであればprepareをつかわずにそのままqueryを発行してしまえばよいでしょう
>SET NAMES utf8
については、あまりクエリーとして発行しない方がよい・・・と言われています。
PHPの現行バージョンではcharsetの指定はPDOを宣言する際に指定するのが標準です
(古いPHPのバージョンは別途処理するのが妥当)
またわざわざtimeをわたさないでもMySQL側の日付関数を使った方がよいかも
そうじて以下のような感じ?
$pdo = new PDO('mysql:dbname=sim2;host=localhost;charset=utf8',$user,$password);
$nick=isset($_COOKIE['nick'])?$_COOKIE['nick']:"";
$words=isset($_POST['words'])?$_POST['words']:"";
if($words !==""){
$data=array($nick,$words);
$query="INSERT INTO `chat`(`chtime`,`nick`,`words`) VALUES(NOW(),?,?)";
$stmt= $pdo->prepare($query);
$stmt->execute($data);
}
$pdo=null;
yambejpさん、お忙しいのにわざわざコードを書いてくださり大変感謝です!ほんとにどうもありがとうございます!!
先ほどお礼を書いた後にクッキーについてもう一度調べたらとてもわかりやすくサンプルで説明されてるページをみつけて、
それでやってみたらうまくいきました!
それから、プレースホルダの方も本のやり方でやってみまして、問題なく完成させることが出来ました。
それでご報告をと思いまして来てみたら参考コードを書いてくださっててとても嬉しく読ませていただきました。
そしてとても簡潔で綺麗なコードの書き方をされてますね。すごく参考になります。
早速真似して書き直してみたいと思います。どうもありがとうございました!
また何かありましたらよろしくお願いいたします。
No.1
- 回答日時:
nickはクッキーで渡しているんですよね?
postでチェックしても得られないのでは?
ちなみに
>$write = $pdo->prepare("INSERT INTO chat(chtime,nick,words) VALUES('$time','$nick','$words')");
なんのためにプレースホルダを利用しているのでしょうか?
SQL文にダイレクトで変数いれちゃまずいでしょ?
回答してくださりありがとうございます。
>nickはクッキーで渡しているんですよね?
>postでチェックしても得られないのでは?
そうなんですか?クッキーについて一応調べてはみたのですが、よくわかりませんでした。もうちょっと調べてみます。
>なんのためにプレースホルダを利用しているのでしょうか?
>SQL文にダイレクトで変数いれちゃまずいでしょ?
このやり方は他の方のを真似して、そちらのコードで作ったものは問題なく作動したのでそのまま使ったのですが(書き方の意味とかはほぼわかっていなくて、ただ真似してやってる段階なのです。すみません)、
ご指摘いただいてちょっと今、「PHP+MySQLマスターブック」という手持ちの本を見てみたのですが、
yambejpさんが書いてくださってる、「変数をいれちゃまずい」というのは、危険だからということでしょうか?
名前付きプレースホルダか「?」プレースホルダを使うのが良いと本に書いてあるので、これでやってみます。
いろいろと教えてくださりどうもありがとうございました。
また何かありましたらよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのカウンタのリセット方法
-
PHPでPCのローカル時刻は取得出...
-
PHPでURLにジャンプするには?
-
フォームで作った送信ボタンが...
-
送信ボタンでカウントアップ
-
テキストリンクをPOST送信したい
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPで画像の渡しが上手く行きま...
-
複数行のデータ一括更新に関して
-
POSTデータのNAME属性をVALUEに...
-
POSTの値を配列として受け取っ...
-
IEで、フォームにたとえば
-
チェックボックスを用い、MySQL...
-
フォームの途中で追加するには
-
POSTを使わずに値を渡す方法
-
phpでショッピングカート機能を...
-
検索時の選択内容を保持する方法
-
PHPでユーザー情報を入力して簡...
-
VBA で、スペースを含むファイ...
-
PHPでCookieを使った訪問回数に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPでURLにジャンプするには?
-
フォーム送信後の更新ボタンで...
-
アマゾンのような評価の星を選...
-
PHPのエラーの解消法について教...
-
phpで、フォームのラジオボタン...
-
テキストリンクをPOST送信したい
-
ボタンをクリックでPHP文を実行
-
セッションを使わずに遷移先画...
-
PHPでファイルアップロード時に...
-
$_POST['hoge']のデータをフラ...
-
PHPの質問:フォームから受け取...
-
送信ボタンでカウントアップ
-
JavaScript変数をPHPへ渡す
-
リンク先のフォームに自動的に...
-
ローカルにあるhtmlのフォーム...
-
formの外にあるチェックボック...
-
フォームで作った送信ボタンが...
-
PHP 入力フォームにて半角スペ...
-
なぜ、unexpected T_VARIABLEに...
-
VBSのIEオブジェクトでフ...
おすすめ情報