Добавление нескольких значений флажков в базу данных

#php #html #mysql #checkbox #html-table

#php #HTML #mysql #флажок #html-таблица

Вопрос:

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

 while($row = mysqli_fetch_array($q))
    {

    echo "<form action='add.php' method='post' id='add'><tr>";
    echo "<td>".$row['carb_id']."</td>";
    echo "<td>".$row['food_item']."</td>";
    echo "<td>".$row['serving_size']."</td>";
    echo "<td>".$row['carbs_per_serving']."</td>";
    echo "<td><input type='checkbox' value='".$row['carbs_per_serving']."'
 name='food[]'></td>";
         echo "</tr></form>";

                 }
        echo "<input type='submit' class='add'form='add'>";
  

PHP для добавления в другую таблицу:

 <?php
        /*blog.php
            process a basic form saving data
        */

    error_reporting ('E_all');

    //Create a connection to the database
    $link = mysqli_connect('localhost','root','','login') 
        or die('Error' . mysqli_error($link));

    //If there is no connection trhows up an error message
    if (mysqli_connect_errno())
        {
          echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }

    $food = $_POST['food'];


    //Insert values into the database       
        //mysqli_query($link,"INSERT INTO blog(post)
        //  VALUES ('".$post."')"
        //  );

        //echos out the information put in apart from the password
        mysqli_query($link,"INSERT INTO carbsummary(cpp)
                        VALUES ('".$food."')"
                        );
            echo $food;
    ?>
  

Надеюсь, я правильно объяснил себя здесь. Короче говоря, я хочу, чтобы пользователь установил флажки, а затем отправил значение углеводов продуктов в следующую таблицу.

Я не очень силен в программировании, так как я недавно начал, но, похоже, нигде не могу найти решение.

Комментарии:

1. Вы уязвимы для атак с использованием SQL-инъекций , и вы пытаетесь вставить массив в строку запроса. $food это массив, а не строка.

Ответ №1:

Первый:

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

     while($row = mysqli_fetch_array($q)){
    echo "<form action='add.php' method='post' id='add'><tr>";
    echo "<td>".$row['carb_id']."</td>";
    echo "<td>".$row['food_item']."</td>";
    echo "<td>".$row['serving_size']."</td>";
    echo "<td>".$row['carbs_per_serving']."</td>";
    echo "<td><input type='checkbox' value='".$row['carbs_per_serving']."'
 name='food[]'></td>";
    echo "</tr></form>";
                 }
        echo "<input type='submit' class='add'form='add'>";
  

С помощью этого:

     while($row = mysqli_fetch_array($q)){
        echo "<form action='add.php' method='post' id='add'>";
        echo "<tr><td>".$row['carb_id']."</td>";
        echo "<td>".$row['food_item']."</td>";
        echo "<td>".$row['serving_size']."</td>";
        echo "<td>".$row['carbs_per_serving']."</td>";
        echo "<td><input type='checkbox' value='".$row['carbs_per_serving']."'
 name='food[]'></td>";                              }
        echo "<input type='submit' class='add'form='add'>";
        echo "</tr></form>";
  

}

Второй:

$ _POST[‘food’] содержит массивы, поэтому он возвращает массив, поэтому вы должны вызвать индекс для этого значения.

 $food = $_POST['food'][0];
  

Третий

если вы хотите отправить много вставок одновременно, вам следует изменить свою форму с помощью:

 echo "<form action='add.php' method='post' id='add'>"; 
while($row = mysqli_fetch_array($q)){                
            echo "<tr><td>".$row['carb_id']."</td>";
            echo "<td>".$row['food_item']."</td>";
            echo "<td>".$row['serving_size']."</td>";
            echo "<td>".$row['carbs_per_serving']."</td>";
            echo "<td><input type='checkbox' value='".$row['carbs_per_serving']."'
     name='food[]'></td>";                              }
            echo "</tr>";
}
    echo "<input type='submit' class='add'form='add'></form>";
  

а затем измените выполнение вашего запроса с помощью:

 foreach($_POST["food"] AS $food){
     mysqli_query($link,"INSERT INTO carbsummary (cpp) VALUES ('{$food}')";
     echo $food;
}
  

Ответ №2:

  1. Прежде всего, вы должны использовать mysql_real_escape_string() для всех входящих данных, которые отправляются на SQL-сервер.

  2. Вы используете довольно странный атрибут — form=»add». Это не грубая ошибка, но было бы лучше, если бы вы удалили весь бесполезный код.

  3. Если вы хотите сохранить значения в БД, вам нужно преобразовать массив, полученный на стороне клиента, в строку. Это не лучшее решение, но в первый раз вы можете использовать эту implode функцию.

Изменить

 $food=$_POST['food'];
  

Для

 $food=implode(',',mysql_real_escape_string($_POST['food']);