2016-08-09 7 views
-3

いくつかの問題があり、回避する方法が見つけられないようです。 POSTデータごとにissetを使用しようとしましたが、すべての問題を解決する一方、データは追加されません。 HTMLコードとPHPを残しておきますので、このコードをデバッグする手助けをすることができます。POSTデータを送信する際に未定義のインデックス

adm_prod.php(フォームを処理するHTMLページ)

  <form method="POST" action="includes/prod-add.php"> 
    Product Name<br> 
    <input type="text" name="Name"><br> 
    Price:<br> 
    <input type="number" name="Price"><br> 
      Product Description<br> 
      <input type="text" name="Description"><br> 
      Photo<br> 
      <input type="file" name="Photo"><br> 
      </br> 
      <button name="submit">Add Product</button> 

</form> 

PROD-add.php(挿入/情報の検証を処理するPHPファイル)

<?php 
include 'databaseConnection.php'; 

$name = $_POST['Name']; 
$price = $_POST['Price']; 
$description = $_POST['Description']; 
$target_dir = "images-uploads/"; 
$target_file = $target_dir . basename($_FILES['Photo']['name']); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 

if(isset($_POST['submit'])) { 
    $check = getimagesize($_FILES['Photo']['tmp_name']); 
    if($check !== false) { 
     $uploadOk = 1; 
    }  else { 
     echo "The File Is not an image"; 
     $uploadOk = 0; 
    } 
} 

if(file_exists($target_file)) { 
    $filename = $_FILES['Photo']['name']; 
    $extension = end(explode(".",$filename)); 
    $name = rand(pow(10, 7), pow(10, 8)-1); 
    $newfilename = $name . "." .$extension; 
    $uploadOk = 1; 
    echo "Image already exists. Image Name changed to " . $newfilename; 
} 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") { 
$uploadOk = 0;  
echo "Sorry, only JPG, PNG and JPEG are accepted"; 
} 



if ($uploadOk == 0) { 
    echo " Sorry, your product was not added, please check the error"; 
    $fileupload = 0; 

} else { 
    if (move_upload_file($_FILES['Photo']['tmp_name'], $target_file)) { 
     $fileupload = 1; 
     $imagePath = basename($_FILES['Photo']['name']) . "." . $imageFIleType; 
     } 
} 

if($fileupload == 1) { 

    $addProd = "INSERT INTO meniu (name, price, description, path) VALUES ('$name','$price','$description','$imagePath')"; 


    if ($conn->connect_error) { 
     die("Connection Failed: " . $conn->connect_error); 
    } 

    if ($conn->query($addProd) == TRUE) { ?> 
<script> 
    window.alert("Product: <?php echo $name; ?> has been added successfully "); 
    </script> 


    <?php } else { ?> 
     <script> 
      window.alert("Error: <?php echo $conn->error; ?>"); 
     </script> 
    <?php } 

} 

?> 

コードが明確でない場合は申し訳ありませんが、私はまだPHPを学んでいます。通常、このような問題はありませんが、イメージのアップロードを使用するのは初めてです。 基本的に、私は名前、説明、価格、写真のパスを紹介したいと思います。パスは../uploads/photoname.extensionのようにする必要があります。 ありがとうございます。

+0

エラーは何ですか? –

+0

申し訳ありませんが、エラーをリンクするのを忘れました。 http://vvcap.com/E5eeEQAlvEO –

+1

**警告**:手動エスケープを使用すると、エラーが発生しやすくなり、1回の間違いで[SQLインジェクションのバグ](http:// bobby-tables)が発生する可能性があります。 com /)。可能な限り**準備文**を使用してください。これらは[mysqli](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と[PDO](http://php.net/manual/)で行うのはかなり簡単です。 en/pdo.prepared-statements.php)ここで、ユーザが提供するデータは '?'または ':name'のインジケータで指定され、後で' bind_param'や 'execute'を使ってデータを入力します。 – tadman

答えて

0

エラーは、すべてのフィールドを最初に入力せずにフォームが送信されたときに発生します。したがって、フォームが提出されているかどうか最初にチェックすることによって$_POST変数が設定されているかどうかを確認する必要があります。

また、これをformタグhtmlenctype="multipart/form-data"に追加してください。そのチェックインサイド

$name=$price=$description=""; 
if($_SERVER['REQUEST_METHOD']=="POST") { 
//if the form has been submitted, initialize the values. 

$name = $_POST['Name']; 
$price = $_POST['Price']; 
$description = $_POST['Description']; 
$target_dir = "images-uploads/"; 
$target_file = $target_dir . basename($_FILES['Photo']['name']); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 
: 
//rest of the code 
: 
} 

ファイルがそれにアップロードされた場合:

if(isset($_POST['submit']) && isset($_FILES['Photo'])) { 
$check = getimagesize($_FILES['Photo']['tmp_name']); 
} 

if文の内部プロセス全体をカプセル化します。

また、tadmanによって語らとして、あなたのmysqlのクエリでプリペアドステートメントまたはPDOを使用してパラメータ化クエリを使用します。

+0

まだ未定義のインデックスがあります写真と警告:getimagesize():ファイル名は空ではありません –

+0

@CojocariCristian私の答えが更新されました。 –

+0

http://vvcap.com/EDOitICgbWT別のエラーセット、move_upload_file()からmove_uploaded_file()に更新しました。もう1つは正しい構文です。私がそれを使用した理由は、ファイルが正常にアップロードされたかどうかをチェックし、そうであればデータの挿入を開始することです。 –

関連する問題