sql >> データベース >  >> RDS >> Mysql

画像PHPをアップロードしてMySQLにパスを挿入する方法は?

    コメントで、データをmysqlにアップロードして保存する方法を尋ねます。だからここにあります:

    ファイルを取得するには、次のようなスクリプトをHTMLに含める必要があります。

    <html>
    <body>
    
         <form action="upload_file.php" method="post" enctype="multipart/form-data">
            <label for="file">Filename:</label>
            <input type="file" name="file" id="file"><br>
            <input type="submit" name="submit" value="Submit">
         </form>
    
    </body>
    </html>
    

    これで、POSTではPHPファイルは次のようになりますが、ファイルがPOSTに存在するかどうかを確認する必要があることに注意してください:

    if ($_FILES["file"]["error"] > 0)
      {
      echo "Error: " . $_FILES["file"]["error"] . "<br>";
      }
    else
      {
      echo "Upload: " . $_FILES["file"]["name"] . "<br>";
      echo "Type: " . $_FILES["file"]["type"] . "<br>";
      echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
      echo "Stored in: " . $_FILES["file"]["tmp_name"];
    
      }
    

    「Storedin:」の部分は一時的なパスであるため、 move_uploaded_file() 。画像の実際の/デフォルトのパスは次のとおりです。

    $image_dir= '/images/';
    

    これを使用してファイルを移動する必要があります:

    move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $image_dir. $_FILES['uploaded_file']['name']);
    

    そして、画像へのフルパスは次のようになります

    $image = $final_save_dir . $_FILES['uploaded_file']['name'];
    

    データベースへのパスを保存する方法はいくつかあります。

    1番目:ファイル名だけを保存することです $_SERVER['DOCUMENT_ROOT']を使用して、PHPで画像のパスを連結します 次のようなデフォルトの画像パス:

    $sql="insert into employee_detail( emp_image, employee_name, employee_address,
        employee_contact, employee_designation, employee_salary) 
    values( '$image', '$_POST[employee_name]', '$_POST[employee_address]', '$_POST[employee_contact]',
        '$_POST[employee_designation]','$_POST[employee_salary]')";
    

    2番目:フルパスを保存することです のように:

    $sql="insert into employee_detail( emp_image, employee_name, employee_address,
        employee_contact, employee_designation, employee_salary) 
    values( '".$_SERVER['DOCUMENT_ROOT']."\\images\\".$image."', '$_POST[employee_name]', '$_POST[employee_address]', '$_POST[employee_contact]',
        '$_POST[employee_designation]','$_POST[employee_salary]')";
    

    私がお勧めするのは、部分パスを入力するこのアプローチです。 (ルートディレクトリなしで)後でデプロイする際に問題が発生しないようにします:

    $sql="insert into employee_detail( emp_image, employee_name, employee_address,
        employee_contact, employee_designation, employee_salary) 
    values( 'images\\".$image."', '$_POST[employee_name]', '$_POST[employee_address]', '$_POST[employee_contact]',
        '$_POST[employee_designation]','$_POST[employee_salary]')";
    

    また、画像がそのデフォルトの画像ディレクトリ/パスに正常にアップロードされていることを確認してください 。

    更新

    また、mysqli_*を使用することをお勧めします またはPDO prepare()を使用します SQLインジェクションを防ぐためのメソッド/関数。



    1. 常にnvarchar(MAX)を使用することに不利な点はありますか?

    2. MySQLでストアドプロシージャを作成する方法

    3. MYSQLINSERTSELECTの問題

    4. 同じ列に複数のWHERE句があるMYSQLUPDATESET