Попросите помочь мне разобраться в проблеме в следующем коде:

Этот код предназначен для редактирования записей / записей в таблице под названием «билеты» с идентификатором, являющимся первичным ключом, а «серийный номер» - это серийный номер билета. Остальные записи, такие как member_id, id-off и id_emp, являются индексами из других таблиц с именами «members», «employee» и «office». Вот сообщение, которое я получаю при выполнении этого скрипта:

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\luckypool\updateserial.php on line 67

<?php

require "config.php";
require "common.php";
if (isset($_POST['submit'])) {
  try {
    $connection = new PDO($dsn, $username, $password, $options);
    $ticket =[
      "id"        => $_POST['id'],
      "serialno"  => $_POST['serialno'],
      "draw"      => $_POST['draw'],
      "member_id" => $_POST['member_id'],
      "id_off"    => $_POST['id_off'],
      "id_emp"    => $_POST['id_emp'],
      "date"      => $_POST['date']
    ];

    $sql = "UPDATE tickets 
            SET id = :id, 
              serialno = :serialno, 
              draw = :draw, 
              member_id = :member_id,
              id_off = :id_off,
              id_emp = :id_emp,
              date = :date 
            WHERE id = :id";

  $statement = $connection->prepare($sql);
  $statement->execute($ticket);
  } catch(PDOException $error) {
      echo $sql . "<br>" . $error->getMessage();
  }
}

if (isset($_GET['id'])) {
  try {
    $connection = new PDO($dsn, $username, $password, $options);
    $id = $_GET['id'];
    $sql = "SELECT * FROM tickets WHERE id = :id";
    $statement = $connection->prepare($sql);
    $statement->bindValue(':id', $id);
    $statement->execute();

    $ticket = $statement->fetch(PDO::FETCH_ASSOC);
  } catch(PDOException $error) {
      echo $sql . "<br>" . $error->getMessage();
  }
} else {
    echo "Something went wrong!";
    exit;
}
?>

<?php require "templates/header.php"; ?>

<?php if (isset($_POST['submit']) && $statement) : ?>
    <blockquote><?php echo escape($_POST['serialno']); ?> successfully updated.</blockquote>
<?php endif; ?>

<h2>Edit Ticket Record</h2>

<form method="post">
    <?php foreach ($ticket as $key => $value) : ?>
      <label for="<?php echo $key; ?>"><?php echo ucfirst($key); ?></label>
        <input type="text" name="<?php echo $key; ?>" id="<?php echo $key; ?>" value="<?php echo escape($value); ?>" <?php echo ($key === 'id' ? 'readonly' : null); ?>>
    <?php endforeach; ?> 
    <input type="submit" name="submit" value="Submit">
</form>

<a href="index.php">Back to home</a>

<?php require "templates/footer.php"; ?>

Я предполагаю, что ваша строка 67 - это <?php foreach ($ticket as $key => $value) : ?>, но ваша переменная $ticket устанавливается, только если $_GET['id'] доступен.

AnTrakS 26.10.2018 08:08

используйте isset ($ tickets) перед циклом foreach, как это if (isset ($ Tickets)) {foreach ($ ticket as $ key => $ value) // ваш код}

khan Farman 26.10.2018 08:10
1
2
42
1

Ответы 1

use isset($tickets) before foreach loop

    <form method="post">
        <?php 
         if (isset($ticket) && is_array($tickets)) {
           foreach ($ticket as $key => $value) : ?>
             <label for="<?php echo $key; ?>"><?php echo ucfirst($key); ?></label>
             <input type="text" name="<?php echo $key; ?>" id="<?php echo $key; ?>" value="<?php echo escape($value); ?>" <?php echo ($key === 'id' ? 'readonly' : null); ?>>
        <?php 
           endforeach; 
         }
         ?> 
        <input type="submit" name="submit" value="Submit">
    </form>

Хан Фарман, большое спасибо за ответ. Однако это не сработало. Даже с изменением он возвращает то же сообщение об ошибке: Предупреждение: недопустимый аргумент для foreach () в C: \ xampp \ htdocs \ luckypool \ updateserial.php в строке 69

Iqbal Khan 26.10.2018 08:49

хорошо, тогда $ билеты установлены, но это не массив, я отредактировал свой ответ с одним дополнительным условием, попробуйте

khan Farman 26.10.2018 08:52

Большое спасибо за помощь. Я только что обнаружил, что использую неправильный параметр для привязки страниц: я использовал «serialno» вместо «id» на страницах, откуда я приходил для редактирования. Действительно благодарен.

Iqbal Khan 26.10.2018 09:34

Другие вопросы по теме