-1

私が取り組んでいるサイトのページを作成しようとしています。これにより、ユーザーはベンダーのロゴ画像をアップロードしながら、そのベンダーに関する他の情報をデータベースに追加できます。ファイル名は 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 から入手したベースのコードです。私はまだ初心者なので、気楽にやってください。

4

1 に答える 1

1

これは、設定されていない配列インデックスを使用しているためです。使用する前に、存在することを確認する必要があります。

if ( ! isset($_FILES["VendorLogo"])) {
    die('VendorLogo is not set...');
}
于 2013-08-09T14:34:43.103 に答える