私が取り組んでいるサイトのページを作成しようとしています。これにより、ユーザーはベンダーのロゴ画像をアップロードしながら、そのベンダーに関する他の情報をデータベースに追加できます。ファイル名は mysql データベースに保存され、画像はサイトの別の場所で使用するために ./graphics にアップロードされることになっています。
この時点で mysql の部分は完全に機能していますが、画像を ./graphics にアップロードできないようです。
Apacheのエラーログを確認したところ、次のことがわかりました...
[Fri Aug 09 07:18:50 2013] [error] [client 127.0.0.1] PHP Notice: Undefined index: VendorLogo in /var/www/labconnect2/addvendor.php on line 72, referer: http://localhost/labconnect2/addvendor.php
[Fri Aug 09 07:18:50 2013] [error] [client 127.0.0.1] PHP Notice: Undefined index: VendorLogo in /var/www/labconnect2/addvendor.php on line 74, referer: http://localhost/labconnect2/addvendor.php
[Fri Aug 09 07:18:50 2013] [error] [client 127.0.0.1] PHP Notice: Undefined index: VendorLogo in /var/www/labconnect2/addvendor.php on line 75, referer: http://localhost/labconnect2/addvendor.php
[Fri Aug 09 07:18:50 2013] [error] [client 127.0.0.1] PHP Notice: Undefined index: VendorLogo in /var/www/labconnect2/addvendor.php on line 76, referer: http://localhost/labconnect2/addvendor.php
[Fri Aug 09 07:18:50 2013] [error] [client 127.0.0.1] PHP Notice: Undefined index: VendorLogo in /var/www/labconnect2/addvendor.php on line 77, referer: http://localhost/labconnect2/addvendor.php
[Fri Aug 09 07:18:50 2013] [error] [client 127.0.0.1] PHP Notice: Undefined index: VendorLogo in /var/www/labconnect2/addvendor.php on line 78, referer: http://localhost/labconnect2/addvendor.php
[Fri Aug 09 07:18:50 2013] [error] [client 127.0.0.1] PHP Notice: Undefined index: VendorLogo in /var/www/labconnect2/addvendor.php on line 79, referer: http://localhost/labconnect2/addvendor.php
[Fri Aug 09 07:18:50 2013] [error] [client 127.0.0.1] PHP Notice: Undefined index: VendorLogo in /var/www/labconnect2/addvendor.php on line 117, referer: http://localhost/labconnect2/addvendor.php
そこで、フォーム コードを確認して再確認し、フォーム タグの name 属性を確認しました。また、 $_FILES がその名前を適切に参照していることを確認しましたが、そうです(私が知る限り)。
いくつかの調査を行ったところ、これは php.ini の最大アップロード サイズと最大投稿サイズ パラメータの結果である可能性があることがわかったので、再確認したところ、両方とも 2m に設定されています。
この「未定義のインデックス」エラーがファイルがアップロードされていない理由だと確信していますが、コードの何が問題なのかを見つけることができないようです。
<!DOCTYPE>
<html>
<head>
<title>Add New vendor</title>
<link rel="stylesheet" type="text/css" href="./css/addnew.css">
</head>
<body>
<div id="box">
<div id="exit">
<h2><a href="./index.php">X</a></h2>
</div>
<div id="form">
<form name="new_entry" method="post" enctype="multipart/form-data">
Name
<br>
<input type="text" name="vendor">
<br>
<br>
Support Website for Vendor
<br>
<input type="text" name="SupportSite">
<br>
<br>
Phone Number for Support
<br>
<input type="tel" name="SupportNum">
<br>
<br>
Main Website for Vendor
<br>
<input type="text" name="MainSite">
<br>
<br>
Notes
<br>
<textarea rows="4" cols="50" maxlength="255" wrap="hard" name="notes"></textarea>
<br>
<br>
<br>
<p>Upload Logo: <input type="file" name="VendorLogo"> </p>
<p><em>PNG images with transparent backgrounds are best.</em></p>
<br>
<br>
<input type="submit">
</form>
</div>
</div>
<?php
$con=mysqli_connect('localhost','ssctechlab','paracon','ssctechlab');
//check connection
if(mysqli_connect_errno()) {
echo "failed to connect to MySQL Server: " . mysqli_connect_error();
};
//echo 'Connected... ' . mysqli_get_host_info($link) . "\n";
//Image Upload
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["VendorLogo"]["name"]);
$extension = end($temp);
if ((($_FILES["VendorLogo"]["type"] == "image/gif")
|| ($_FILES["VendorLogo"]["type"] == "image/jpeg")
|| ($_FILES["VendorLogo"]["type"] == "image/jpg")
|| ($_FILES["VendorLogo"]["type"] == "image/pjpeg")
|| ($_FILES["VendorLogo"]["type"] == "image/x-png")
|| ($_FILES["VendorLogo"]["type"] == "image/png"))
&& ($_FILES["VendorLogo"]["size"] < 20000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["VendorLogo"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["VendorLogo"]["name"] . "<br>";
echo "Type: " . $_FILES["VendorLogo"]["type"] . "<br>";
echo "Size: " . ($_FILES["VendorLogo"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["VendorLogo"]["tmp_name"] . "<br>";
if (file_exists("upload/" . $_FILES["VendorLogo"]["name"]))
{
echo $_FILES["VendorLogo"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["VendorLogo"]["tmp_name"],
"upload/" . $_FILES["VendorLogo"]["name"]);
echo "Stored in: " . "graphics/" . $_FILES["VendorLogo"]["name"];
}
}
}
else
{
echo "Invalid file";
}
//Insert info into VendorInfo Table
$vendor = $_POST["vendor"];
$SupportSite = $_POST["SupportSite"];
$SupportNum = $_POST["SupportNum"];
$MainSite = $_POST["MainSite"];
$notes = $_POST["notes"];
$VendorLogo = ($_FILES["VendorLogo"]["name"]);
mysqli_query($con,"INSERT INTO VendorInfo VALUES('','$VendorLogo','$vendor','$SupportSite','$SupportNum','$MainSite','$notes')");
mysqli_close($con);
//header('Location: ./index.php')
?>
</body>
ちなみに、これは w3schools.com から入手したベースのコードです。私はまだ初心者なので、気楽にやってください。