PHPによるPostgreSQL表の検索・編集・更新

<html><body bgcolor="white">
<?
/* pgs_sch_users.php */
function fin_exit(){
  print <<<FOOTER
<a href="pgs_sch_users.php">ユーザ名検索に戻る</a><br>
</body></html>
FOOTER;
  exit;
}

if(! isset($username)){
?>
  <h1><font color="#700040">ユーザ名による検索</font></h1>
  <form action="pgs_sch_users.php" method="post">
  ユーザ名:
  <INPUT TYPE="text" SIZE=30 NAME="username"><BR>
  <br>
  <INPUT TYPE="submit" VALUE="検索"><INPUT TYPE="reset" VALUE="クリア">
</FORM>
<? } else {
  if(! strlen($username)){
?>
    <h2>おおっと</h2>検索するユーザ名を入力してください。<br>
<?
    fin_exit();
  }
  if(($con = pg_connect("localhost", 5432, "", "", "udb")) == 0){
    print ("おおっと!Oracleサーバに接続できません。");
    fin_exit();
  }
?>
<h1><font color="#700040">検索しました。</font></h1>
<?
  $s = <<<SQL
SELECT USERNAME, KANJI_NAME FROM USERS
 WHERE USERNAME LIKE '%$username%' ORDER BY USERNAME
SQL;
  $r = pg_exec($con, $s);
?>
  <table border="1">
  <tr><th>アカウント名</th><th>漢字氏名</th></tr>
<?
  $nrows = pg_numrows($r);
  for($n=0; $n<$nrows; $n++){
    $account = pg_result($r, $n, 0);
    $kanjiName = pg_result($r, $n, 1);
    print <<<ROW
<tr><td><a href="pgs_edit_users.php?username=$account">$account</a></td>
    <td>$kanjiName</td></tr>
ROW;
  }
  pg_freeresult($r);
  pg_close($con);
?>
  </table>
<? if($n == 0){ ?>
     <h1><font color="#700040">あら?</font></h1>
<? } ?>

<? print "$n"; ?>件のデータが見つかりました。<br>

<? }
fin_exit();
?>

 今度はその続きのページです。 上のページからリンクで飛んで来てロードされ、 選択された行のデータをフォームで修正できます。 そして「更新」ボタンを押すと実際にデータベースに変更を加えて、 その結果を画面に表示するというPHP文書です。
<html><body bgcolor="white">
<?
/* pgs_edit_users.php */
function fin_exit(){
  print <<<FOOTER
<a href="pgs_sch_users.php">ユーザ名検索に戻る</a><br>
</body></html>
FOOTER;
  exit;
}
if(! isset($username)){
?>
  <h2>おおっと</h2>検索するユーザ名を入力してください。<br>
<?
  fin_exit();
}
elseif(isset($HTTP_POST_VARS["editted"])){
  // 更新処理
  include "pgs_edit_users_update.inc";
}
else{
  // 更新フォームを表示。このフォームの隠しフィールドに
  // "editted" という名前のものがあります。
  include "pgs_edit_users_edit.inc";
}
fin_exit();
?>


<?
/* pgs_edit_users_edit.inc */
if(($con = pg_connect("localhost", 5432, "", "", "udb")) == 0){
?>
  <h2>おおっと</h2>Oracleサーバに接続できません。<br>
<?
  fin_exit();
}
$s = <<<SQL
  SELECT USERNAME, KANJI_NAME, MAIL_ADDRESS, TELNO,
         SECTION_NAME, JOB_NAME FROM USERS
   WHERE USERNAME = '$username'
SQL;
$r = pg_exec($con, $s);

$found = FALSE;
for($n=0; $arr = pg_fetch_row($r, $n); $n++){
  $found = TRUE;
  // ここの書き方うまくないかなあ
  $kanji_name = $arr[1];
  $mail_address = $arr[2];
  $telno = $arr[3];
  $section_name = $arr[4];
  $job_name = $arr[5];
  break; // 常に1件を想定
}
pg_freeresult($r);
pg_close($con);
if(! $found){
?>
  <h2><font color="#700040">あら?</font></h2>エントリが見つかりません。<br>
<?
  fin_exit();
}
?>
<form action="pgs_edit_users.php" method="post">
ユーザ名:<?= $username ?><br>
<input type="hidden" name="username" value="<?= $username ?>">
漢字氏名:
<input type="text" name="kanji_name" value="<?= $kanji_name ?>"><br>
メールアドレス:
<input type="text" name="mail_address" value="<?= $mail_address ?>" size=30><br>
電話番号:
<input type="text" name="telno" value="<?= $telno ?>"><br>
部署名:
<input type="text" name="section_name" value="<?= $section_name ?>"><br>
役職名:
<input type="text" name="job_name" value="<?= $job_name ?>"><br>
<br>
<input type="hidden" name="editted" value="1">
<input type="submit" value="更新"><br>
</form>


<?
/* pgs_edit_users_update.inc */
if(($con = pg_connect("localhost", 5432, "", "", "udb")) == 0){
?>
  <h2>おおっと</h2>Oracleサーバに接続できません。<br>
<?
  fin_exit();
}
$s = <<<SQL
  UPDATE USERS
     SET KANJI_NAME = '$kanji_name',
         MAIL_ADDRESS = '$mail_address',
         TELNO = '$telno',
         SECTION_NAME = '$section_name',
         JOB_NAME = '$job_name'
   WHERE USERNAME = '$username'
SQL;
$r = pg_exec($con, $s);
$affectedRows = pg_cmdtuples($r);
print "${affectedRows}行のデータ($username)を更新しました。<br>";
pg_freeresult($r);
pg_close($con);
?>

Java Top
(first uploaded 2001/12/30, KQ Taura)