Проблема с определением индекса в php html

#php #html #sql

#php #HTML #sql

Вопрос:

Мой сайт должен состоять из страницы с таблицей, куда администратор должен загрузить некоторый файл. Позже этот файл сохраняется php как большой двоичный объект в mysql, однако $_FILES не может найти и проиндексировать мой файл ввода. Пожалуйста, помогите найти ошибку.

     <tr>
    <th>ID</th>
    <th>Genre</th>
    <th>Extension</th>
    <th>Description</th>
    <th>Demo-art</th>
    <th>Price</th>
    <th>Upload</th>
    <th>Delete</th>
    </tr>";
    $array=array();
    for($m=0; $row=mysqli_fetch_array($full); $m  )
    {
        $array[$m]=$row['ArtID'];
        echo "<form method='POST' action='checker.php'>";
        echo "<tr>";
        echo "<td><input class='asd' value='$array[$m]' readonly name='name'></td>";
        echo "<td>".$row['Genre']."</td>";
        echo "<td>".$row['Extension']."</td>";
        echo "<td>".$row['Description']."</td>";
        echo "<td><input type='file' name='arts'></td>";
        echo "<td><input class='priceinput' name='price' placeholder='Price'></td>";
        echo "<td><input type='submit' name='Upload' value='Upload'></td>";
        echo "<td><input type='submit' name='Delete' value='Delete'></td>";
        echo "</tr>";
        echo "</form>";
        }
        echo "</table>";
        ;}
  

Код PHP

 session_start();
$conn= new mysqli("127.0.0.1", "root", "","projectwork") or die ("Can't connect to db");
if($_POST["Upload"]) {
$price=$_POST["price"];
$id=$_POST["name"];
    if ($price!=NULL) {
            if (is_uploaded_file($_FILES['arts']['tmp_name'])) {
                $imgData = addslashes(file_get_contents($_FILES['arts']['tmp_name']));
                $imageProperties = getimageSize($_FILES['arts']['tmp_name']);
                $sql = "Update arts SET imageData='".$imgData."', imageType='".$imageProperties['mime']."' WHERE ArtID=".$id."";
                $current_id = mysqli_query($conn, $sql) or die("<b>Error:</b> Problem on Image Insert<br/>" . mysqli_error($conn));
                    }
        $insert="UPDATE arts SET Price='".$price."', Is_Done='1' WHERE ArtID=".$id."";
        $finalquery=$conn->query($insert);
        echo $price." ".$id;
    }
  

Комментарии:

1. Внимание! Вы широко открыты для атак с использованием SQL-инъекций ! Вы должны использовать параметризованные подготовленные операторы вместо того, чтобы использовать полностью неэкранированные пользовательские данные непосредственно в ваших запросах, подобных этому. Никогда, никогда, никогда не доверяйте пользовательскому вводу.

2. Вы должны сохранить файл в каталоге и вместо этого сохранить ссылку на файл (имя, путь и т.д.) в базе данных.

3. Вы также никогда не должны показывать сообщение от mysqli_error() пользователю / клиенту, поскольку оно может содержать конфиденциальные данные. Запишите сообщение об ошибке и вместо этого покажите общее сообщение об ошибке.

Ответ №1:

Помимо недостатков безопасности в вашем коде, вам не хватает enctype='multipart/form-data' элемента формы.

Попробуйте:

 echo "<form method='POST' action='checker.php' enctype='multipart/form-data'>";
  

Он сообщит браузеру, что вы отправляете файл.