WebプログラミングU PHP

 目次へ 前へ 次へ

2008/6/24 久米

 

3 PHP応用

3.2 データベースとフォーム投稿

db_value.php
<?php
$DBSERVER="localhost";
$DBUSER="root";
$DBPASSWORD="root";
$DBNAME="kume";
?>

注)

上記インクルードファイルを読み取るためには、下記のように指定してください。
require_once($_SERVER['DOCUMENT_ROOT']."/自分のフォルダ/common/db_value.php");

3.2.1 SELECT

  1. select.htm:フォーム投稿にてtilte、artist、pointの値を送信し、
  2. select.php:phpページで受けて、where句を生成する。
検索フォーム
select.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>select文</title>
</head>
<body>
<h1>ランキング検索</h1>
<form method="post" action="select.php">
タイトル:<input type="text" name="title"><br>
アーティスト:<input type="text" name="artist"><br>
ポイント:<input type="text" name="point">以上<br>
<input type="submit" name="sub" value="検索">
</form>
</body>
</html>
select.php
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/kume/common/db_value.php");

if(!isset($_POST['title']))
    exit("アクセスエラーです。もう一度最初からお願いします。");

$where=" WHERE 1";
if($_POST['title']!="") 
    $where.=" AND title LIKE '".$_POST['title']."%'";
if($_POST['artist']!="") 
    $where.=" AND artist LIKE '".$_POST['artist']."%'";
if($_POST['point']!=""&&is_numeric($_POST['point']))
    $where.=" AND point>=".$_POST['point'];

$con=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$sel=mysql_select_db($DBNAME, $con);

$sql="SELECT * FROM ranking".$where." ORDER BY point DESC";
$rst=mysql_query($sql, $con);

$m="<table border='1' cellspacing='0' cellpadding='2'>";
$m.="<tr bgcolor='#CCCCCC'><td>順位</td><td>タイトル</td><td>アーティスト</td><td>ポイント</td></tr>";
$juni=0;
while($row=mysql_fetch_array($rst)){
    $juni=$juni+1;
    $m.="<tr><td>".$juni."</td>";
    $m.="<td>".$row["title"]."</td>";
    $m.="<td>".$row["artist"]."</td>";
    $m.="<td>".$row["point"]."</td></tr>";
}
$m.="</table>";
mysql_free_result($rst);

$cls=mysql_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>select文</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>

3.2.2.INSERT

  1. insert.htm:フォーム投稿にてtilte、artist、pointの値を送信し、
  2. insert.php:phpページで受けて、VALUESの括弧の中に受けた値を入れる。
データ挿入
フォーム
insert.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>insert文</title>
</head>
<body>
<h1>ランキング登録</h1>
<form method="post" action="insert.php">
タイトル:<input type="text" name="title"><br>
アーティスト:<input type="text" name="artist"><br>
ポイント:<input type="text" name="point"><br>
<input type="submit" name="sub" value="登録">
</form>
</body>
</html>
insert.php
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/kume/common/db_value.php");

if(!isset($_POST['title']))
    exit("アクセスエラーです。もう一度最初からお願いします。");

if($_POST['title']=="") 
    exit("タイトルを正確に記入ください。");
if($_POST['artist']=="") 
    exit("アーティストを正確に記入ください。");
if($_POST['point']==""||!is_numeric($_POST['point']))
    exit("ポイントを正確に記入ください。");

$con=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$sel=mysql_select_db($DBNAME, $con);
$sql="INSERT INTO ranking (title, artist, point)
        VALUES ('".$_POST['title']."', '".$_POST['artist']."', ".$_POST['point'].")";
$rst=mysql_query($sql, $con);

if($rst) $m="成功しました。";
else $m="失敗しました。";

$cls=mysql_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>insert文</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>

3.2.3 UPDATE

  1. select.php:SELECT文で一覧した文書にリンクを付ける。リンクを付けるとき、?id= を付けることが急所。
  2. update.php:phpページで、?id= の値を$_GETで読み取り、そのidの行を読むSELECT文発行する。
    読んだ値を、フォームのテキスト枠の値とする。
    変更した値を、フォーム投稿する。
  3. update2.php:2番目のphpページで、UPDATE文を生成する。
select.php
を改良して
更新リンク追加
select.phpの下記個所(赤)を加える
while($row=mysql_fetch_array($rst)){
    $juni=$juni+1;
    $m.="<tr><td>".$juni."</td>";
    $m.="<td><a href='update.php?id=".$row["id"]."'>".$row["title"]."</a></td>";
    $m.="<td>".$row["artist"]."</td>";
    $m.="<td>".$row["point"]."</td></tr>";
}
update.php
更新フォーム
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/kume/common/db_value.php");

if(!isset($_GET['id']))
    exit("アクセスエラーです。もう一度最初からお願いします。");
else if(!is_numeric($_GET['id']))
    exit("アクセスエラーです。もう一度最初からお願いします。");

$con=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$sel=mysql_select_db($DBNAME, $con);
$sql="SELECT * FROM ranking WHERE id=".$_GET['id'];
$rst=mysql_query($sql, $con);

$row=mysql_fetch_array($rst);
$id=$row["id"];
$title=$row["title"];
$artist=$row["artist"];
$point=$row["point"];
mysql_free_result($rst);

$cls=mysql_close($con);

?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>update文</title>
</head>
<body>
<h1>ランキング更新</h1>
<form method="post" action="update2.php">
<input type="hidden" name="id" value="<?php print $id; ?>">
タイトル:<input type="text" name="title" value="<?php print $title; ?>"><br>
アーティスト:<input type="text" name="artist" value="<?php print $artist; ?>"><br>
ポイント:<input type="text" name="point" value="<?php print $point; ?>"><br>
<input type="submit" name="sub" value="更新">
</form>
</body>
</html>
update2.php
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/kume/common/db_value.php");

if(!isset($_POST['id']))
    exit("アクセスエラーです。もう一度最初からお願いします。");
else if(!is_numeric($_POST['id']))
    exit("アクセスエラーです。もう一度最初からお願いします。");
    
if($_POST['title']=="") 
    exit("タイトルを正確に記入ください。");
if($_POST['artist']=="") 
    exit("アーティストを正確に記入ください。");
if($_POST['point']==""||!is_numeric($_POST['point']))
    exit("ポイントを正確に記入ください。");

$con=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$sel=mysql_select_db($DBNAME, $con);
$sql="UPDATE ranking SET 
        title='".$_POST['title']."',".
        "artist='".$_POST['artist']."',".
        "point=".$_POST['point'].
        " WHERE id=".$_POST['id'];
$rst=mysql_query($sql, $con);

if($rst) $m="成功しました。";
else $m="失敗しました。";

$cls=mysql_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>update文2</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>

3.2.4 DELETEはUPDATEの要領で

select.php
を改良して
更新リンク追加
select.phpの下記個所(赤)を加える
$m="<table border='1' cellspacing='0' cellpadding='2'>";
$m.="<tr bgcolor='#CCCCCC'><td>順位</td><td>タイトル</td><td>アーティスト</td><td>ポイント</td><td> </td></tr>";
$juni=0;
while($row=mysql_fetch_array($rst)){
    $juni=$juni+1;
    $m.="<tr><td>".$juni."</td>";
    $m.="<td><a href='updateform.php?id=".$row["id"]."'>".$row["title"]."</a></td>";
    $m.="<td>".$row["artist"]."</td>";
    $m.="<td>".$row["point"]."</td>";
    $m.="<td><a href='delete.php?id=".$row["id"]."'>削除</a></td></tr>";
}
$m.="</table>";
delete.php
削除フォーム
<?php
require_once($_SERVER['DOCUMENT_ROOT']."/kume/common/db_value.php");

if(!isset($_GET['id']))
    exit("アクセスエラーです。もう一度最初からお願いします。");
else if(!is_numeric($_GET['id']))
    exit("アクセスエラーです。もう一度最初からお願いします。");

$con=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$sel=mysql_select_db($DBNAME, $con);
$sql="DELETE FROM ranking WHERE id=".$_GET['id'];
$rst=mysql_query($sql, $con);

if($rst) $m="成功しました。";
else $m="失敗しました。";

$cls=mysql_close($con);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>delete文</title>
</head>
<body>
<?php print $m; ?>
</body>
</html>