POST данные не отправляются - PullRequest
0 голосов
/ 21 января 2019

UPDATE Добавлен весь код для загрузки img, а также для добавления в БД. Вывод print_r ($ _ POST); : Array ([prodName] => Тестовый продукт [prodPrice] => 100 [prodDescript] => Описание теста [submit] => UPLOAD) Кроме того, prodID col - автоинкремент.

Создавая загрузчик изображений, вы все так любезно помогли мне, теперь я пытаюсь заставить остальную часть этой формы работать. Я отправляю данные через POST, но никакая информация не отправляется. Я проверил загрузку изображений через массив $ _FILES, но в данных $ _POST

ничего не просматривается

Я знаю, что мой хостинг позволяет $ _POST, потому что у меня есть другая форма, которая прекрасно с ней работает. Кажется, я не вижу ошибок, которые указывают мне правильное направление. Итак, еще раз. Я прихожу к вам замечательные люди.

<form action="inventory_add.php" method="POST" enctype="multipart/form-data">
    <label>Product Name: </label>
    <input type="text" name="prodName" id="prodName">
    <br>
    <label>Product Price: </label>
    <input type="text" name="prodPrice" id="prodPrice">
    <br>
    <label>Product Description</label><br>
    <textarea name="prodDescript" width="200px" id="prodDescript"></textarea>
    <br>
    Select Image Files to Upload:
    <br>
    <input type="file" name="upload[]" multiple >
    <input type="submit" name="submit" value="UPLOAD">
</form>

Часть кода из inventory_add.php :

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $servername = "**********";
    $username = "**********";
    $password = "***********";
    $dbname = "************";

    $prod_name = $_POST['prodName'];
    $prod_price = $_POST['prodPrice'];
    $prod_descript = $_POST['prodDescript'];
    print_r($_POST);
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } else {
        if(isset($_FILES['upload'])){
            $total = count($_FILES['upload']['name']);
            for( $i=0 ; $i < $total ; $i++ ) {
                $tmpFilePath = $_FILES['upload']['tmp_name'][$i];
                if ($tmpFilePath != ""){
                    $newFilePath = "images/prod/" . $_FILES['upload']['name'][$i];
                    if(move_uploaded_file($tmpFilePath, $newFilePath)) {
                        $img_names = implode(",",$_FILES['upload']['name']);

                    }
                }
            }
            $prodID = $_SESSION['curcount'] + 1;
            $sql = "INSERT INTO `inventory` (`prodId`, `prodTitle`, `prodDescript`, `prodCost`, `prodImages`) VALUES (' '," . $prod_name. "," . $prod_descript . "," . $prod_price ."," .$img_names.")";
            if ($conn->query($sql) === TRUE) {;
                 //   header('location:http://nerdsforhire.pnd-productions.com/shopmgr.php');
            } else {
                    echo 'There was an issue adding this item.';
            };
        }
    }
} else {
    echo "Failed";
}

Будем надеяться, что это обновит базу данных ... но это не так. Я продолжаю получать сообщение «Возникла проблема с добавлением этого элемента».

1 Ответ

0 голосов
/ 21 января 2019

ОБНОВЛЕНИЕ Основываясь на нашем разговоре ниже и коде выше, я думаю, что проблема в вашем SQL, а не в PHP. Я предлагаю добавить к вашему вопросу.

$conn = new mysqli($servername, $username, $password, $dbname);
$sql = 'INSERT INTO `inventory` ( `prodTitle`, `prodDescript`, `prodCost`, `prodImages`) VALUES (?,?,?,?)' ;
$stmt = $conn->prepare($sql)
$stmt->bind_param("ssss", $prod_name, $prod_descript, $prod_price, $img_names);
$stmt->execute()
if($stmt->affected_rows > 0) {
   //header("location:https://sample.com"); #affected_rows > 0 so row was inserted
} else {
   echo 'There was an issue adding this item.'; #failed to insert;
}

Это должно решить проблему. Это подготовленный оператор, который будет обрабатывать проблему с неэкранированными запятыми в строке, а также предотвращать внедрение SQL. Поскольку prodId - это автоинкремент, он не нужен в вашем выражении, по крайней мере, в MySQL это не так. Часть «ssss» оператора предполагает, что вы передаете строковые значения в БД. Возможные типы данных для передачи:

  • i - целое число
  • д - двойной
  • с - строка
  • b - blob

См. WC3Schools для получения дополнительной информации о php и подготовленных заявлениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...