タグ別アーカイブ: フォーム送信

管理画面を作る②データベースとフォルダにデータ追加

管理人画面のindex.phpです。

<?php
session_start();
if (!isset($_SESSION["user_name"])) {
$no_login_url = "http://{$_SERVER["HTTP_HOST"]}/login.php";
header("Location: {$no_login_url}");
exit;
} else {
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>管理画面</title>
</head>
<body>

<h1>CG今日の詩~管理画面</h1>

<h2>画像&データアップロード</h2>
<p>画像ファイル</p>
<form method="post" enctype="multipart/form-data" action="/upload1.php">
 <input type="file" name="upfile">
 <input type="submit" value="アップロードする">
</form>
<p>3Dファイル(zip)</p>
<form method="post" enctype="multipart/form-data" action="/upload2.php">
 <input type="file" name="upfile">
 <input type="submit" value="アップロードする">
</form>

<h2>データベース登録</h2>
<form method="post" action="./input.php" accept-charset="utf-8">
 <dl>
 <dt>
 <label for="id">ID</label>
 </dt>
 <dd>
 <input name="id" type="text" id="id" size="10" maxlength="10" />
 </dd>
 <dt>
 <label for="name">名前</label>
 </dt>
 <dd>
 <input name="name" type="text" id="name" size="35" maxlength="255" />
 </dd>
 <dt>
 <label for="image">画像ファイル名(.jpg)</label>
 </dt>
 <dd>
 <input name="image" type="text" id="image" size="20" maxlength="20" />
 </dd>
 <dt>
 <label for="data">データ名(.zip)</label>
 </dt>
 <dd>
 <input name="data" type="text" id="data" size="20" maxlength="20" />
 </dd>
 <dt>
 <label for="category">カテゴリ</label>
 </dt>
 <dd>
 <input name="category" type="text" id="category" size="50" maxlength="255" />
 </dd>
 </dl>
 <input type="submit" value="登録する" />
</form>

<h2>データベース削除</h2>
<form method="post" action="./delete.php" accept-charset="utf-8">
 <dl>
 <dt>
 <label for="id">ID</label>
 </dt>
 <dd>
 <input name="id" type="text" id="id" size="10" maxlength="10" />
 </dd>
 </dl>
 <input type="submit" value="削除する" />
</form>

</body>
</html>

機能としては

①画像とzipデータをサーバにアップロード

②データベースにデータを挿入する

③データベースからデータを削除する

の3つです。

それぞれ

①upload1.php upload2.php

②input.php

③delete.php

へフォーム内容を送信して処理しています。

<?php
$updir = "/html/img/";
$filename = $_FILES['upfile']['name'];
if(move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename)==FALSE){
print("Upload failed");
print($_FILES['upfile']['error']);
}
else {
print("<b> $filename </b> uploaded");
}
?>

upload1.php、upload2.phpはいずれも↑のようになっています。

斜体字の部分にアップロードするURLパスを入れます。

<?php
$db = mysqli_connect('localhost','ユーザ名','パスワード','mydb') or die(mysqli_connect_error());
mysqli_set_charset($db, 'utf8');
$sql = sprintf('INSERT INTO object SET id=%d, name="%s", image="%s", data="%s", category="%s"',
mysqli_real_escape_string($db, $_POST['id']),
mysqli_real_escape_string($db, $_POST['name']),
mysqli_real_escape_string($db, $_POST['image']),
mysqli_real_escape_string($db, $_POST['data']),
mysqli_real_escape_string($db, $_POST['category'])
);
mysqli_query($db, $sql) or die(mysqli_error($db));
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>管理画面</title>
</head>
<body>
<p>登録しました</p>
</body>
</html>

管理人画面index.phpからPOST送信されてきたデータを

SQL文で接続されたデータベースに挿入しています。

 

ちなみに…

最初このフォームから送られたデータが

データベース上で文字化けしていたので

アレコレ対策してみたのですが…

 

3日間ぐらいして気づいたのですが、

赤字の部分が問題だったようです。

mysqli_set_charset($db, 'utf8');

HTMLでのcharsetでは「utf-8」と間にハイフンが入るのですが

SQLでのcharsetでは「utf8」とハイフンが入りません。

HTML、php上では文字化けしてなくても

データベースに送る部分で文字化けしてしまいます。

<?php
$db = mysqli_connect('localhost','ユーザ名','パスワード','mydb') or die(mysqli_connect_error());
mysqli_set_charset($db, 'utf8');
$sql = sprintf("DELETE FROM object WHERE id=%d",
mysqli_real_escape_string($db, $_REQUEST['id'])
);
mysqli_query($db, $sql) or die(mysqli_error($db));
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>管理画面</title>
</head>
<body>
<p>削除しました</p>
</body>
</html>

delete.phpはこのような感じです。

SQLのDELETE文を使います。

なお、データ番号のidを指定するだけで

データを消せるようになっています。