#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:
-
Прежде всего, вы должны использовать
mysql_real_escape_string()
для всех входящих данных, которые отправляются на SQL-сервер. -
Вы используете довольно странный атрибут — form=»add». Это не грубая ошибка, но было бы лучше, если бы вы удалили весь бесполезный код.
-
Если вы хотите сохранить значения в БД, вам нужно преобразовать массив, полученный на стороне клиента, в строку. Это не лучшее решение, но в первый раз вы можете использовать эту
implode
функцию.
Изменить
$food=$_POST['food'];
Для
$food=implode(',',mysql_real_escape_string($_POST['food']);