データを追加してみる

まず、phpmyadminでdbとテーブルを作ってみる。
db名はsampleで、テーブル名はbbs。フィールドは

  • id INT(記事番号を振る一意の数字。主キー。)
  • name VARCHART(名前)
  • com TEXT(コメント部分)
  • datetime DATETIME

とした。
で、この前作ったdb接続のスクリプトとあわせて…

<?php
$host = "";
$user = "";
$pass = "";
//dbの名前はは$dbnameに
$dbname = "sample";
$db = mysql_connect($host,$user,$pass) or die("db接続できません");

//db選択
mysql_select_db($dbname,$db) or die("接続エラー");

if ($_SERVER["REQUEST_METHOD"]  == "POST") {
    
    $name = cnv_dbstr($_POST["name"]);
    $com = cnv_dbstr($_POST["com"]);
    
    if($name && $com){
        $sql = "INSERT INTO bbs(name,com,datetime) ";
        $sql .= "VALUES(";
        $sql .= "'".$name."',";
        $sql .= "'".$com."',";
        $sql .= "'".date("Y/m/d H:i:s")."'";
        $sql .= ")";
        $res = mysql_query($sql,$db) or die("データ追加エラー");
        if($res){
            echo "書き込みありがとうございました";            
            }
        }
    else{
        echo "名前とメッセージは必須です";
        }
    }
    // SQLコマンド用の文字列に変換する関数
function cnv_dbstr($string) {
    // タグを無効にする
    $string = htmlspecialchars($string);

    // magic_quotes_gpcがONの場合はエスケープを解除する
    if (get_magic_quotes_gpc()) {
        $string = stripslashes($string);
    }

    // SQLコマンド用の文字列にエスケープする
    $string = mysql_real_escape_string($string);
    return $string;
}

?>

で。前ので本丸写しイクナイ!言ってたけど、ごめん、これもほぼ別のサンプル丸写し状態だ、すまない。

参考はこちら

http://www.nishi2002.com/phpsample/guest.php

参考にさせてもらったの方は表示までやってますけど、こっちはデータ追加のみです。
自分なりに考えていきます。
まず、postがあったらフォームからの文字列をサニタイズする。
それが定義関数cnv_dbstr。
htmlspecialcharsでタグ無効化、magic_quotes_gpcのON OFFに対応。magic_quotes_gpcについては

http://d.hatena.ne.jp/teracc/20070125/1169722643

が詳しかったです。そしてmysql_real_escape_stringで特殊文字列のエスケープ。

PHP: mysql_real_escape_string - Manual

これで、やっと安全にデータが渡せる状態になるのです。

で、次に$sqlにINSERT INTO という文字が見えます。SQLのINSERT文です。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.5 INSERT 構文

INSERT INTO テーブル名(フィールド1,フィールド2...) VALUES(値1,値2...)
datetimeはdate("Y/m/d H:i:s")で。idは自動的に振られるので書いてない
これらを格納した変数をmysql_queryでdbに送信して、成功すれば終わり。

「書き込みありがとうございました」の表示は出たけど、本当に追加されているかどうかは表示スクリプト作ってないのでまだわからない。
次でデータの取り出しをやるぞ。