私はuniのスワップサイトを作成しようとしている学生です。私は問題にぶつかった。私はすべての投稿を検索しましたが、似たようなものがありますが、すべてを一致させるためにコードを変更しようとすると壊れます。親切にするか、少なくとも試してみてください、私は学んでいます。MYSQLデータベースに画像やその他のデータを挿入する
ファイルのアップロード用にコードを完全に変更しようとしましたが、私は真剣に迷っています。私は正常に動作するログインとユーザーデータベースを持っていますが、何らかの理由でアイテムデータベースをアイテムデータベースに保存できません。メッセージファイルをアップロードしていません。
私は、投稿されたアイテムに関する情報と画像を保存すると同時に、セッションからタイムスタンプとユーザー名を入力しようとしています。
これは、ある項目のためのデータベースのセットアップ:
CREATE TABLE `item` (
`itemid` int(10) NOT NULL PRIMARY KEY,
`iname` varchar(25) NOT NULL,
`idescription` varchar(25) NOT NULL,
`itype` varchar(25) NOT NULL,
`icolour` varchar(25) NOT NULL,
`icategory` varchar(25) NOT NULL,
`image` varchar(25) NOT NULL,
`idate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`username` varchar(60) NOT NULL
);
そして、これはPHPのページのコードです:
<?php
session_start();
if (!isset($_SESSION['userSession']) || isset($_SESSION['userSession']) && empty($_SESSION['userSession'])) {
header("Location: index.php");
}
require_once 'dbconnect.php';
if(isset($_POST['btn-postitem'])) {
$iname = $_POST['iname'];
$idescription = $_POST['idescription'];
$itype = $_POST['itype'];
$icolour = $_POST['icolour'];
$icategory = $_POST['icategory'];
$uploadDir = "upload/";
$fileName = $_FILES['image']['name'];
$filePath = $uploadDir . $fileName;
$username = $_SESSION['userSession'];
if(move_uploaded_file($_FILES['image']['tmp_name'],"upload/".$_FILES['image']['name'])){
$query_image = "INSERT INTO item(iname,idescription,itype,icolour,icategory,image,idate,username) VALUES('$iname','$idescription','$itype','$icolour','$icategory','$filePath','curdate()','$username')";
// insert the image into db
if(mysql_query($query_image)) {
echo "Stored in: " . "upload/" . $_FILES['image']['name'];
}
else{
echo "File name not stored in database";
}
}
else{
echo 'File not uploaded';
}
}
$db1->close();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Post Item</title>
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
<link href="bootstrap/css/bootstrap-theme.min.css" rel="stylesheet" media="screen">
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<div class="signin-form">
<div class="container">
<form class="form-signin" method="post" id="register-form" enctype="multipart/form-data">
<h2 class="form-signin-heading">Post Item</h2><hr />
<?php
if (isset($msg)) {
echo $msg;
}
?>
<div class="form-group">
<input type="text" class="form-control" placeholder="Item Name" name="iname" required />
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="Description" name="idescription" required />
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="Type of Item" name="itype" required />
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="Item Colour" name="icolour" required />
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="Category" name="icategory" required />
</div>
<div class="form-group">
<input type="file" class="form-control" placeholder="Picture" name="image" required />
</div>
<hr />
<div class="form-group">
<button type="submit" class="btn btn-default" name="btn-postitem">
<span class="glyphicon glyphicon-log-in"></span> Post Item
</button>
</div>
</form>
</div>
</div>
</body>
</html>
"upload"ディレクトリを作成しましたか?このコードを 'session_start()'の行の前に置く: 'error_reporting(E_ALL); ini_set( 'display_errors'、1); '。これでコードが機能しない理由がわかります。 mysqlはPHP 5.5.0以降で廃止され、PHP 7.0.0以降は削除されているため、mysqliまたはPDOを使用することを検討してください。また、SQLインジェクションを避けるために準備されたステートメントを使用します。 –
'itemid'フィールドを' unsigned'と 'AUTO_INCREMENT'と定義してください。それ以外の場合は、挿入時に値0を受け取ります。 –
あなたが 'idate'を定義した場合、' INSERT'ステートメントにフィールド(と 'curdate()'値)を含めてはいけません。挿入時に自動的に現在の日付時刻が取得されます。さもなければ、sqlステートメントで 'curdate()'を使うと、 'idate'フィールドは値' 0000-00-00 00:00:00'を受け取ります。 –