Не удалось сохранить несколько значений формы

У меня есть форма, откуда мне нужно взять i/p от пользователя. Форма разделена на две части: левая и тучная сторона

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

введите описание изображения здесь

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

<form method="post" action"save.php">
<!--Front end code for left part-->
    <label>Name:</label>
        <input type="text" name="name" value="" />
    </div>

    <div class="span3" style="margin-left:-10px;">
        <label>Number:</label>
        <input type="text" name="number" value="" />
    </div>

    <div class="span6">
        <div class="span3" >
        <label>Address:</label>
        <textarea name="address"></textarea>
        </div>
    </div>


<!--Front end code for right part-->

    <table class="table table-striped table-bordered">
        <tbody>
        <?php
            $sql=" SELECT * from menu";
            $result = mysqli_query($con, $sql);
            if(mysqli_num_rows($result)>0)
                {
                    while($row = mysqli_fetch_assoc($result))
                    {?>
                        <tr>
                            <td> <? echo $row['dish']; ?></td>
                            <td class="td-actions">
                                <input type="text" name="quantity[]" />
                                <input type='hidden' name='itemname[]' value='<?php echo $row['dish']; ?>'/>

                                Add
                            </td>
                        </tr>
                  <?}
                }?>
        </tbody>
    </table>
<button name="submit" value="submit" >Submit</button>
</form>

Я могу сохранить значение левой стороны с помощью этого кода

$name = mysqli_real_escape_string($con, $_POST['name']);
$number = mysqli_real_escape_string($con, $_POST['number']);
$address = mysqli_real_escape_string($con, $_POST['address']);

$sql= "INSERT INTO cart (name,number, address) VALUES ('$name','$number','$address')";
if(!mysqli_query($con,$sql))
    {
        echo "Error: " . $sql . "<br>" . mysqli_error($con);
    }

но я не могу хранить значения всей страницы одним щелчком мыши, может ли кто-нибудь рассказать, как я могу это сделать

Ответ 1

Несколько проблем, которые вы хотите изучить, чтобы начать:

  • Параметры левой стороны работают, поэтому ваш метод формы и т.д. хороши. Убедитесь, что ваша правая сторона находится внутри тега <form>. Если это не так, то, конечно, поля не будут отправлены с запросом.
  • На правой стороне нет доступных входов:
    • вам нужно связать текст элемента с вводом. Прямо сейчас, он просто напечатан в DOM. Рассмотрим:
      <input type='hidden' name='itemname[]' value='<?php echo $row['prodname']; ?>'/>
      Это поместит имена в индексированный массив.
    • На стороне количества используйте аналогичный name=quantity[]. Квадратные скобки - вот что дает вам массив. Без скобок вы никогда не сможете сохранить их отдельно.
    • Когда вы обрабатываете его в конце запроса, вы можете собрать его вместе с чем-то вроде:
      $i = 0; while($i < count($itemname)){ $name = $itemname[$i]; $quant = $quantity[$i]; $i++; } этот грубый код - гарантированно не должен быть защищен от копирования.

Ответ 2

да для этого вам нужно сделать 2 функции одной для левой части и другой для правой части ur, так как вы можете сохранить данные для левой части, что имя, адрес и т.д. аналогично делают функцию обновления для правой части

fucntion update()
{
    $new = $_POST['update_qty']  // or use a count variable for quantity update 
    $sql = "UPDATE TABLE_NAME SET num_of_widgets = :$new (or $count) WHERE username = :_SESSION['username'] ";
    $st= $conn->prepare($sql);
    $st->bindValue(":username",$_SESSION['username'],PDO::PARAM_STR);
    $st->bindValue(":new",$_SESSION['$new'],PDO::PARAM_STR);
    $st->execute();
    $row = $st->fetch();
    foreach($row as $update_qty)
      {
         echo "update_qty['quantity']";
       }

теперь используйте........

if(isset($_POST['submit']))
   { 
     update();
    }

Ответ 3

Измените код правой части ниже

  <input type="text" name="quantity[]" />

Теперь вы сможете получить количество как массив, и вы можете итерировать этот массив и сохранять по одному.

Ответ 4

1) создайте объект и измените свои значения на их обновление (нажмите кнопку добавления) через js или jquery

2) когда пользователь нажимает кнопку отправки, вы должны передать свой объект внешнему файлу php через метод Ajax (через js или jquery)

3) в вашем php файле после получения этого объекта и сохранения его в переменную, вы должны декодировать это в массив с помощью функции json_decode()

4) теперь вы можете вставить каждый из них в свою БД

Ответ 5

Измените этот код:

<input type="text" name="quantity[]">

Используя этот [], вы получите все количество в массиве.

Ответ 6

Хорошей практикой является пользователь print_r(); чтобы увидеть, как выглядит ваш массив сообщений.

печать ($ _ POST);

Это должно дать вам представление о том, что есть и что не публикуется, или, может быть, его публикация, как вы этого не ожидали.

в этом случае я сделал бы следующее

<?
print_r($_POST);
?>

<form action='' method='post'>
    <table>
        <lable>Firstname: </lable>
        <input type='text' name='firstname' value=''> </input>
        <lable>Lastname: </lable>
    <input type='text' name='lastname' value=''> </input>
</table>

<table>
    <lable>Items: </lable>
    <input type='number' name='Items[]' value=''> </input>
</table>

<input type='submit'> </input>
</form>

В верхней части страницы вы можете поместить print_r ($ _ POST); это "довольно печатная версия", только в виде отображения он может отображаться как капля, но если вы просмотрите исходный код, он будет упорядочивать его более четко.

Вы должны всегда проверять свой код пополам, чтобы знать, в чем его формирование. Отладка также отлично подходит для диагностики таких проблем.

Надеюсь, это поможет!