2016-08-08 10 views
-2

イメージをイメージフォルダに転送することにより、登録が「あなたは正常に登録されました」に出てきます。しかし、それはそれを渡し続け、else文に行きます: "画像をアップロードしてください。"私のPHPは「画像をアップロードしてください」と言っているのはなぜですか?

私はロジックと構文を見てきましたが、正しく見えます。しかし、正しく登録することはできません。

HTML & PHP: 

<?php 

include('connect.php'); 

$error = ""; 

if(isset($_POST['submit'])) { 

    // VARIABLES STORAGE 
    $firstName = $_POST['fname']; 
    $lastName = $_POST['lname']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $passwordConfirm = $_POST['passwordConfirm']; 

    $image = $_FILES['image']['name']; 
    $tmp_image = $_FILES['image']['tmp_name']; 
    $tmp_image = $_FILES['image']['size']; 


    // LOGIC 
    if(strlen($firstName) < 3) { 
     $error = "First name is too short."; 
    } 
    else if(strlen($lastName) < 1) { 
     $error = "Last name is too short."; 
    } 
    else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
     $error = "Please enter valid email address."; 
    } 
    else if(strlen($password) < 8) { 
     $error = "Password must be greater than 8 characters."; 
    } 
    else if($password !== $passwordConfirm) { 
     $error = "Password does not match."; 
    } 
    else if($image == "") { 
     $error = "Please upload an image."; 
    } 
    else { 
     $insertQuery = "INSERT INTO users(firstName, lastName, email, password, image) VALUES('$firstName','$lastName','$email','$password','$image')"; 

     if(mysqli_query($conn,$insertQuery)) { 
      if(move_uploaded_file($tmp_image,"images/$image")) { 
       $error = "You are successfully registered!"; 
      } 
      else { 
       $error = "Image is not uploaded."; 
      } 
     } 
    } 
} 

?> 

<!DOCTYPE html> 
<head> 
    <title>Registration Page</title> 
    <link rel="stylesheet" type="text/css" href="css/style.css"> 
</head> 
<body> 

<div id="error"><?php echo $error; ?></div> 

<div id="wrapper"> 
    <div id="formDiv"> 
     <form method="POST" action="index.php" enctype="multipart/form-data"> 

     <label>First name:</label><br /> 
     <input type="text" name="fname" /><br /><br /> 

     <label>Last name:</label><br /> 
     <input type="text" name="lname" /><br /><br /> 

     <label>Email:</label><br /> 
     <input type="text" name="email" /><br /><br /> 

     <label>Password:</label><br /> 
     <input type="password" name="password" /><br /><br /> 

     <label>Re-enter Password:</label><br /> 
     <input type="password" name="passwordConfirm" /><br /><br /> 

     <label>Image:</label><br /><br /> 
     <input type="file" name="image" /><br /><br /> 

     <input type="submit" name="submit" /> 
     </form> 
    </div> 
</div> 

</body> 
</html> 
+3

'( '$ firstName'、 '$ lastName'、 '$ password'、 '$ password'、 '$ image')'いいえいいえあなたは私を泣かせようとしていませんhttp://php.net /manual/en/security.database.sql-injection.php – Isaac

+0

あなたのサーバ上のファイルアップロード/ポストリクエストに適用される制限を確認することができます。 phpinfo()を使うとほとんどの場合それを得ることができます。さらに、 'var_dump($ _ FILES);'は、配列に含まれているものの手掛かりを得るためのものです。 – BananaAcid

+0

@Isaacなぜこれが間違っているのか分かりませんか?私は、ユーザーの入力値をデータベーステーブルに配置していますか? – user3385997

答えて

0

これはあなたのコードからの抜粋です:あなたは2行目に同じ変数名を使用

$tmp_image = $_FILES['image']['tmp_name']; 
$tmp_image = $_FILES['image']['size']; 

ので、あなたはイメージtmp_nameを上書きしているので、あなたのスクリプトは、ファイルへのアクセスを失います。

残りのスクリプトでイメージサイズを使用しないので、2行目だけを削除できます。それを使用する場合は、$img_sizeに名前を変更してください。

+0

ありがとう、@BettleJuice。それがトリックでした。私は後で画像サイズを調べます。 – user3385997

関連する問題