isset не работает при отправке формы (на самом деле проблема с БД)

0

На самом деле это проблема с моей базой данных, а не с моей формой или моим isset. Если кто-то захочет узнать, как я это исправил, я расскажу об этом здесь.

Я сделал так, как в in.k предложил и использовал тот же запрос, что и в форме, а затем добавил несколько строк для генерации некоторых кодов ошибок, например:

  // query execution
    $wr_pro = "INSERT INTO products (name, description, price, cat_id) VALUES ('$name', '$description', '$price', '$categories')";
  $result = $db->query($wr_pro);
  print "$db->error()";
  if ($db->connect_error) {
      die("Connection failed: ");
  }
  if ($result === TRUE) {
  echo "Product added successfully!";
}
  else {
  echo "Problem loading to database...";
  }

Когда я загрузил страницу, у меня появилась ошибка базы данных, в которой говорилось, что мне нужно установить значения по умолчанию для всех пустых полей (это было пустое поле тега, которое вызывало проблему).

Так что да, я не правильно настроил свою базу данных в принципе. Но теперь я знаю, что коды ошибок являются удивительными.

-------------- ОРИГИНАЛЬНЫЙ ВОПРОС ----------------- Я очень новичок в этом, поэтому я сожалею заранее, если я "я пропустил что-то очень очевидное, или мой код немного грязный.

Я пытаюсь сделать страницу, которая записывает новую запись продукта в существующую таблицу базы данных mysql.

Из других вопросов я пробовал:

  1. добавление! пусто с моим isset
  2. убедившись, что form method = "post"
  3. убедившись, что на самом деле материал сохраняется на почту (до isset)
  4. попытался напечатать сообщение после isset, и он не появился
  5. убедитесь, что имя кнопки отправки совпадает с именем функции isset
  6. убедитесь, что имя кнопки не отправлено
  7. перемещая isset до формы (я на самом деле не уверен, почему я должен был делать это, чтобы, если кто-нибудь мог объяснить, я был бы очень благодарен)

Ошибки при невозможности записи в базу данных не отображаются, и они не записываются в базу данных, поэтому я предполагаю, что этот isset не работает? но я мог легко ошибаться.

Я уверен, что соединение с базой данных работает, потому что в форме есть раздел категории, который он выбирает из базы данных, и это хорошо видно на странице.

Я не знаю, соответствует ли это, но я выполняю это на WAMP локально.

Любой, кто мог бы указать мне в правильном направлении, я был бы очень благодарен.

---- мой код

    <?php
include("includes/connection.php");
include("includes/head.html");
include("includes/header.php");
?>
<div class="pagecontent">
  <h1> Create New Product:</h1>
  <!-- form submission action-->
  <?php
  if (isset($_POST['submitwrpro'])) {
  // escape user inputs
  $name = mysqli_real_escape_string($db, $_POST['name']);
  $description = mysqli_real_escape_string($db, $_POST['description']);
  $price = mysqli_real_escape_string($db, $_POST['price']);
  $categories = mysqli_real_escape_string($db, $_POST['category_id']);

  // query execution
  $wr_pro = "INSERT INTO products (name, description, price, cat_id) VALUES ('$name', '$description', '$price', '$categories')";

  if(mysqli_query($db, $wr_pro)){
      echo "Product added successfully!";
                            }
      else{
      echo "Error writing to database $wr_pro. " . mysqli_error($db);
          }
  }
  ?>
  <!-- form entry -->
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
    <table>
        <tr>
            <td>Name</td>
            <td><input type='text' name='name'></td>
        </tr>
        <tr>
            <td>Price</td>
            <td><input type='text' name='price'></td>
        </tr>
        <tr>
            <td>Description</td>
            <td><textarea name='description'></textarea></td>
        </tr>
        <tr>
            <td>Category</td>
            <td>
<!-- read product categories from the db -->
              <?php
              $req_cat = "SELECT cat_id, name FROM categories";
              $result = $db->query($req_cat);

              echo "<select class='form-control' name='category_id'>";
              echo "<option>Select category...</option>";
              if ($result->num_rows > 0) {
                  while ($row = $result->fetch_assoc()){
                      extract($row);
                      echo "<option value=\"" . $row['cat_id'] . "\">" . $row["name"] . "</option>";
                                                        }
                                          }
                  else {
                      echo "no results";
                        }
              echo "</select>";
              ?>
            </td>
        </tr>
        <tr>
            <td></td>
            <td>
                <button name="submitwrpro" type="submit">Create</button>
            </td>
        </tr>
    </table>
</form>
</div>
<?php
include("includes/footer.php");
?>
Теги:

1 ответ

0
Лучший ответ

Я не думаю, что вы правильно подключаетесь к db. Я не вижу файл подключения, но результат, который вы получаете в форме в select, имеет другой способ подключения к db. Я прошел через форму и не нашел ошибок. Попробуйте что-то вроде этого

$connection = "INSERT INTO products (name, description, price, cat_id) VALUES ('$name', '$description', '$price', '$categories')";
$result = $db->query($connection);
echo "Product added successfully!";
  • 0
    Во-первых, большое спасибо за ответ. Итак, я заменил мою область при выполнении запроса на то, что вы предложили, и вы правы, теперь она выдвигает сообщение «Продукт добавлен», но все равно ничего не добавляет в БД. причина, по которой я попытался использовать другой способ, заключалась в том, что я мог видеть и сообщение об ошибке, если по какой-то причине не удалось записать в БД, но этот способ кажется гораздо более понятным.
  • 0
    Я нашел другой способ сообщить об ошибке, так как она не загружается в БД при сохранении того же кода, который я использовал в форме, и, как вы сказали, это определенно проблема с базой данных. Теперь, когда я знаю, в чем проблема, я должен быть в состоянии ладить - я искал не в том месте, прежде чем>. <Большое спасибо, еще раз!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню