2016-04-08 3 views
0

У меня есть две страницы. Первый - я отправляю данные на вторую страницу. Вторая страница, которую я использую для редактирования переданных данных и других данных в моей базе данных. Я призываю данные, которые я послал через так:Значения форм не публикуются

$id = $_POST['id']; 
$first = $_POST['first']; 
$last = $_POST['last']; 
$product = $_POST['product']; 

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

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

Вот мой код для второй страницы:

<?php 
ini_set('display_errors', 1); 
error_reporting(E_ALL); 

$id = $_POST['id']; 
$first = $_POST['first']; 
$last = $_POST['last']; 
$product = $_POST['product']; 

$newId = filter_var($id, FILTER_SANITIZE_STRING); 


try { 
    $host = 'localhost'; 
    $name = ''; 
    $user = ''; 
    $password = ''; 

    $dbc = new PDO("mysql:host=$host;dbname=$name", $user, $password); 

}catch(PDOException $e) { 
    echo $e->getMessage(); 

} 

    $stmt = $dbc->query("SELECT * FROM users WHERE id='$newId' "); 
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    //print_r($stmt); 
    while($row = $stmt->fetch()) { 

    $productAmount = $row['amount']; 
    $productAvailable = $row['available']; 

?> 

<form name="update" method="POST"> 
<input type="text" name="id" value="<?php echo $newId; ?>"> 
<input type="text" name="first" value="<?php echo $first; ?>"> 
<input type="text" name="last" value="<?php echo $last; ?>"> 
<input type="text" name="product" value="<?php echo $product; ?>"> 
<input type="text" name="amount" value="<?php echo $row['amount']; ?>"> 
<input type="text" name="available" value="<?php echo $row['available']; ?>"> 

<button type="submit">Update Product Information</button> 
</form> 
<?php 
} 
var_dump($_POST); 


if(isset($_POST['update'])) { 
    $stmt = $dbc->prepare("UPDATE users SET first = ?, last = ?, product = ?, amount = ?, available = ? WHERE id = ?"); 

    $stmt->bindParam(1, $_POST['first']); 
    $stmt->bindParam(2, $_POST['last']); 
    $stmt->bindParam(3, $_POST['product']); 
    $stmt->bindParam(4, $productAmount); 
    $stmt->bindParam(5, $productAvailable); 
    $stmt->bindParam(6, $newId); 

    $stmt->execute(); 
} 

?> 

Когда я var_dump($_POST); я получаю следующие значения, очевидно, не включая данные о amount и available.

array(5) { ["id"]=> string(1) "4" ["first"]=> string(3) "Tom" ["last"]=> string(5) "Brady" ["product"]=> string(3) "Tea" ["edit"]=> string(4) "Edit" }

Почему не все мои данные признаются?

+0

Изменить кнопку для '<входной тип = "отправить" значение = "Обновить информацию о продукте"/>' –

+0

вздоха. Когда люди наконец остановят эту странную привычку поместить форму и код ее обработки в один файл? В этом нет смысла. – arkascha

+1

@arkascha Я буду менять это на представление ajax, как только я получу его работу. – Becky

ответ

3

Нигде в сценарии у вас есть:

$productAmount = $_POST['amount']; 
$productAvailable = $_POST['available']; 

Добавить эти 2 линии чуть ниже: $product = $_POST['product'];

ОБНОВЛЕНО

ли форма должна быть заполнена в базе данных? Или сама форма? Если в базе данных (изначально) вам нужно будет изменить все переменные $ в форме на соответствующие им имена полей из таблицы, т.е. $row['id'], $row['first'] и т.д.

Смотрите ниже обновления ...

<?php 
ini_set('display_errors', 1); 
error_reporting(E_ALL); 

$id = $_POST['id']; 
$first = $_POST['first']; 
$last = $_POST['last']; 
$product = $_POST['product']; 
$productAmount = $_POST['amount']; 
$productAvailable = $_POST['available']; 

$newId = filter_var($id, FILTER_SANITIZE_STRING); 

try { 
    $host = 'localhost'; 
    $name = ''; 
    $user = ''; 
    $password = ''; 

    $dbc = new PDO("mysql:host=$host;dbname=$name", $user, $password); 

} catch(PDOException $e) { 
    echo $e->getMessage(); 
} 

if (isset($_POST['update'])) { 
    $stmt = $dbc->prepare("UPDATE users SET first = ?, last = ?, product = ?, amount = ?, available = ? WHERE id = ?"); 

    $stmt->bindParam(1, $_POST['first']); 
    $stmt->bindParam(2, $_POST['last']); 
    $stmt->bindParam(3, $_POST['product']); 
    $stmt->bindParam(4, $_POST['amount']); 
    $stmt->bindParam(5, $_POST['available']); 
    $stmt->bindParam(6, $newId); 

    $stmt->execute(); 
} 

if (!empty($newId)) { 
    $stmt = $dbc->query("SELECT * FROM users WHERE id='$newId' "); 
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 

    while($row = $stmt->fetch()) { 
    ?> 

     <form action="" method="post"> 
      <input type="text" name="id" value="<?php echo $row['id']; ?>"> 
      <input type="text" name="first" value="<?php echo $row['first']; ?>"> 
      <input type="text" name="last" value="<?php echo $row['last']; ?>"> 
      <input type="text" name="product" value="<?php echo $row['product']; ?>"> 
      <input type="text" name="amount" value="<?php echo $row['amount']; ?>"> 
      <input type="text" name="available" value="<?php echo $row['available']; ?>"> 
      <input type="submit" name="update" value="Update Product Information"> 
     </form> 
     <?php 
    } 
} 
var_dump($_POST); 

Для Undefined индекс просто использовать трехкомпонентной в вашей форме, как так:

... value="<?php echo !empty($row['amount']) ? $row['amount'] : ''; ?>"> 
... value="<?php echo !empty($row['amount']) ? $row['available'] : ''; ?>"> 
+0

Эти две линии есть. Читайте сообщение более внимательно. –

+0

Просьба указать эти 2 строки мне в коде OP. – Marcus

+0

Посмотрите чуть выше формы в ее коде. –

3

Изменить эти линии:

$stmt->bindParam(4, $productAmount); 
$stmt->bindParam(5, $productAvailable); 

к:

$stmt->bindParam(4, $_POST['amount']); 
$stmt->bindParam(5, $_POST['available']); 

Таким образом, результат очистки второй части вашего кода будет таким:

  • Нет необходимости в имя формы.
  • name="update" входит в разметку кнопки.
  • $_POST массив теперь содержит новые переменные.
  • Мы проверяем, чтобы обновление выполнялось перед запуском запроса.

<form method="POST"> 
<input type="text" name="id" value="<?php echo $newId; ?>"> 
<input type="text" name="first" value="<?php echo $first; ?>"> 
<input type="text" name="last" value="<?php echo $last; ?>"> 
<input type="text" name="product" value="<?php echo $product; ?>"> 
<input type="text" name="amount" value="<?php echo $row['amount']; ?>"> 
<input type="text" name="available" value="<?php echo $row['available']; ?>"> 

<button type="submit" name="update">Update Product Information</button> 

</form> 
<?php 
} 


if(isset($_POST['update'])) { // checking the button 
    $stmt = $dbc->prepare("UPDATE users SET first = ?, last = ?, product = ?, amount = ?, available = ? WHERE id = ?"); 

    $stmt->bindParam(1, $_POST['first']); 
    $stmt->bindParam(2, $_POST['last']); 
    $stmt->bindParam(3, $_POST['product']); 
    $stmt->bindParam(4, $_POST['amount']); // now it is in the POST array 
    $stmt->bindParam(5, $_POST['available']); // same here 
    $stmt->bindParam(6, $newId); 

    $stmt->execute(); 
} 
+0

В моем последнем вопросе у меня были свои новые входы, и вы сказали, что с $ _POST это испортило, потому что я не отправил их с другой страницы? В любом случае, я изменил его, и он работает, но мне нужно дважды вводить данные и удалять обновления? '$ stmt-> bindParam (4, $ _POST ['amount']);' – Becky

+0

Мы обрабатываем POST для второй формы. Эти данные вводятся в эту форму автоматически, вы не вводите ее. 1. Вы вводите данные в одну форму и отправляете. 2. Эти данные используются для запуска запроса и заполнения второй формы, которая затем отправляется. Я думаю, что вы, вероятно, можете немного с этим справиться. –

+0

Любая идея, почему я должен дважды заполнять информацию, чтобы она осталась? – Becky

Смежные вопросы