17.PHPでユーザの削除を行ってみる。
 1)ユーザ名とパスワードを指定して削除を行うためのページ(userDel.html)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>ユーザ削除</title>
</head>
<body>
ユーザ削除<br>
削除するユーザのユーザ名とパスワードを入力してください。<br>
<form action="userDel.php" method="post" name="form1">
削除するユーザ名:
<input name="fUserName" type="text"><br>
削除するユーザのパスワード:
<input name="fPassWd" type="text">
<input type="submit" name="Submit" value="削除">
<input type="reset" name="Submit2" value="クリア">
</form>
</body>
</html>
 2)ユーザ名とパスワードを使って削除を行うページ(userDel.php)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>ユーザ削除</title>
</head>
<body>
<?php
$sUserName=$_POST['fUserName'];
$sPassWd=$_POST['fPassWd'];
$conn=mysqli_connect('localhost','root','******') or exit("MySQLへ接続できません。");
mysqli_select_db($conn,'userid_db') or exit("データベース名が間違っています。");
$sql="SELECT * FROM userid_tbl where userName='{$sUserName}' AND passWd='{$sPassWd}';";
$result=mysqli_query($conn,$sql) or exit("データの抽出に失敗しました。");
if(mysqli_num_rows($result)!=0){
$sql="DELETE FROM userid_tbl WHERE userName='{$sUserName}' AND passWd='{$sPassWd}';";
$result=mysqli_query($conn,$sql) or exit("データの抽出に失敗しました。");
echo $sUserName."様は、削除されました。";
}
else{
?>
<span style="color:red;"><?= $sUserName ?>様は、存在しません。もう一度やり直してください。</span><br>
ユーザ削除<br>
<form action="userDel.php" method="post" name="form1">
削除するユーザ名:
<input name="fUserName" type="text"><br>
削除するユーザのパスワード:
<input name="fPassWd" type="text">
<input type="submit" name="Submit" value="削除">
<input type="reset" name="Submit2" value="クリア">
</form>
<?php
}
mysqli_close($conn);
?>
</body>
</html>
 3) 削除するユーザを選択するメニューページ(userDeleteMenu.php)
   データベースの「id」列と「userName」列の情報を「,」区切りで送信するようにしています。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>ユーザ選択削除</title>
</head>
<body>
削除メニュー<br>
<?php
$conn=mysqli_connect('localhost','root','*******') or exit("MySQLへ接続できません。");
mysqli_select_db($conn,'userid_db') or exit("データベース名が間違っています。");
$sql="SELECT * FROM userid_tbl;";
$result=mysqli_query($conn,$sql) or exit("データの抽出に失敗しました。");
?>
<form action="userSelectDelete.php" method="post">
<table border="1">
<tr>
<th>削除チェック</th><th>userName</th><th>passWd</th>
<?php
while($userid=mysqli_fetch_array($result,MYSQL_ASSOC)){
?>
<tr>
<td><input type="checkbox" name="del[]" value="<?= $userid['id'] ?>,<?= $userid['userName'] ?>"></td>
<td><?= $userid['userName'] ?></td>
<td><?= $userid['passWd'] ?></td>
</tr>
<?php
}
mysqli_close($conn);
?>
</table>
<input type="submit" value="削除">
</form>
<body>
</body>
</html>
   上記プログラムで、赤字の部分は、データベースの「id」列と「userName」列のデータを「,」区切りのデータ(文字列)にして、チェックボックスにチェックが入っている項目のみその
  データを送信しています。

 4) 選択されたユーザを削除するページ(userSelectDelete.php)
   クライアントから送信されてきた「,」区切りのデータを「id」列と「userName」列に分解して「id」列の情報でそれに対応する行を削除します。
   「userName」列のデータは、削除されたユーザ名を表示させるために使っています。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>ユーザ選択削除結果</title>
</head>
<body>
<?php
$conn=mysqli_connect('localhost','root','******') or exit("MySQLへ接続できません。");
mysqli_select_db($conn,'userid_db') or exit("データベース名が間違っています。");
$sql="SELECT * FROM userid_tbl;";
$result=mysqli_query($conn,$sql) or exit("データの抽出に失敗しました。");
if(isset($_POST['del'])){
for($i=0;$i<count($_POST['del']);$i++){
$split=explode(",",$_POST['del'][$i]);
$sql="DELETE FROM userid_tbl WHERE id={$split[0]};";
$result=mysqli_query($conn,$sql) or exit("データの抽出に失敗しました。");
echo "{$split[1]}様を削除しました。<br>\n";
}
?>
削除後のデータは、以下になります。<br>
(削除もできます。)<br>
<form action="userSelectDelete.php" method="post">
<table border="1">
<tr>
<th>削除チェック</th><th>userName</th><th>passWd</th>
<?php
$sql="SELECT * FROM userid_tbl;";
$result=mysqli_query($conn,$sql) or exit("データの抽出に失敗しました。");
while($userid=mysqli_fetch_array($result,MYSQL_ASSOC)){
?>
<tr>
<td><input type="checkbox" name="del[]" value="<?= $userid['id'] ?>,<?= $userid['userName'] ?>"></td>
<td><?= $userid['userName'] ?></td>
<td><?= $userid['passWd'] ?></td>
</tr>
<?php
}
}
else{
?>
削除するデータが選択されていません。<br>
もういとどやり直してください。<br>
<form action="userSelectDelete.php" method="post">
<table border="1">
<tr>
<th>削除チェック</th><th>userName</th><th>passWd</th>
<?php
$sql="SELECT * FROM userid_tbl;";
$result=mysqli_query($conn,$sql) or exit("データの抽出に失敗しました。");
while($userid=mysqli_fetch_array($result,MYSQL_ASSOC)){
?>
<tr>
<td><input type="checkbox" name="del[]" value="<?= $userid['id'] ?>,<?= $userid['userName'] ?>"></td>
<td><?= $userid['userName'] ?></td>
<td><?= $userid['passWd'] ?></td>
</tr>
<?php
}
}
?>
</table>
<input type="submit" value="削除">
</form>
<?php
mysqli_close($conn);
?>
</body>
</html>
   上記のプログラムで、 赤字の部分「①」で使用されている「explode()」関数は、文字列の中の区切り文字列で文字列を分解する関数です。関数のフォーマットは、以下のようになります。
   <書式>
     explode(区切り文字列,分解する文字列[,使用する配列の長さ(数)])
      「使用する配列の長さ(数)」は、指定した数分の配列を用意し、配列の長さより区切り文字列の数の方が多い場合は、最後の配列に残りの文字列が格納されます。
      負の値を指定した場合は、「必要な配列の長さ-指定した値」 分だけ分解します。
      省略した場合は、すべてを区切り文字列で分解してそれぞれを配列に代入します。
      戻り値:区切り文字列で分解された文字列の配列を返します。
           区切り文字列がに空文字列(ヌル) が指定された場合は、「FALSE」を返します。
   <例>
     $str=explode(",","abc,def,ghi")  を実行した場合、文字列の配列は以下のようになります。

     $str[0] ← "abc"
     $str[1] ← "def"
     $str[2] ← "ghi"

 <課題1>
    上記、3)、4)のプログラムでは、「id」列と「userName」列を「,」区切りの文字列として送信し受信側でその文字列を「,」区切りで分解して「userName」列が表示できるように処理
   しています。区切り文字列を使わずに「id」列のみを送信し、4)のプログラムのように削除されたユーザ名が表示できるようにしてください。

 <課題2>
    4)のプログラムで「for文」の中でSQL文を作成しクエリーを実行していますが、「for文」で削除する行すべてを削除するSQL文を作成し、クエリーの実行は、一回のみでできるように
   プログラムを修正してください。