@eliz_min

Сравнение input с БД и занесение в другую таблицу?

Задача стоит в создании счетчика калорий, пользователь вводит название продукта, который он употребил и ему выводиться сумма калорий за сутки. На данном этапе создана база данных с продуктами и таблицей употребленных, в которой находится id юзера,id продукта и время. Сейчас я пытаюсь сделать ввод продукта проверка на наличие в базе и добавление этого продукта в таблицу употребленных. В backend особо не розбираюсь, работаю с front. Надеюсь на понимание)
Попытки реализации
<?php
$link=mysqli_connect("localhost", "root", "root", "diploma");

$query = mysqli_query($link,"SELECT Product_id,Callorie FROM product WHERE Name_Of_Product='".mysqli_real_escape_string($link,$_POST['name'])."' LIMIT 1");
$data = mysqli_fetch_assoc($query);

if($data['Name_Of_Product'] === md5(md5($_POST['name'])))
{
    mysqli_query($link, "INSERT INTO comsume (Id_p)VALUES ($data['Product_id'])");
}
?>
<form method="POST">
    <input name="name" type="text" required><br>

</form>
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
почему с клиента приходит не id продукта а его название?
что такое md5(md5($_POST['name'])) и зачем?
зачем в таблице "comsume" запись в которой только $data['Product_id'] и ничего больше?
почему в именах таблиц столько опечаток?
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
А можно в двух словах логику реализации по шагам? А то код больше похож на письма обкуренного Шляпника...

UPD: eliz_min, ну, вы конечно дополнили, но логику так и не проследил, ну да ладно... по шагам что-ли...

1) код должен быть понятным и простым, так же желательно a) использовать реальные и логичные английские термины и слова (которые не знаешь - гуглишь), b) все данные готовить заранее, c) для поиска в базе неточных словоформ искать через like, d) в идеале использовать подготовленные выражения (я здесь оставил как есть, почитайте и примените самостоятельно), e) поля в бд обычно называются в нижнем регистре, разделители слов - андерскор (с разделителем все ок, поля надо нормально назвать), f) имена полей и таблиц желательно обернуть `` - обратными кавычками
$name = mysqli_real_escape_string($link,$_POST['name']);
$sql = "SELECT `product_id`, `calorie` 
FROM `product` 
WHERE `name_of_product` like'%{$name}%' 
LIMIT 1";
 $query = mysqli_query($link, $sql);
$data = mysqli_fetch_assoc($query);
ок, тут мы (возможно) получили ид и количество калорий от еды с названием которое пришло постом...

2) далее интереснее...
пользователь вводит название продукта, который он употребил и ему выводиться сумма калорий за сутки.
Как человек поверхностно знакомый с диетическим питанием, подозреваю что "я съел сыр" и "я сожрал 2 кило сыра" не всегда одно и то же. понимаете к чему я клоню?
На данном этапе создана база данных с продуктами и таблицей употребленных, в которой находится id юзера,id продукта и время.
Чего-то не хватает, вам не кажется? Ладно, едем дальше...

3) и тут же на первой строчке у нас все становится очень интересным, я бы даже сказал что тут Шляпник особо глубоко затянулся... :
if($data['Name_Of_Product'] === md5(md5($_POST['name']))) {...
итак, учитывая что никакой Name_Of_Product мы в запросе не просили выбрать, естественно что тут уже будет лажа, однако далее еще интереснее: md5(md5($_POST['name'])), загадочные шаманские вуду пляски, видимо чтобы этот кусок кода внутри условия ТОЧНО никогда не выполнился. Вообще хотелось бы услышать, каким образом этот код пришел вам в голову и что он по вашему должен делать? Так, чисто понять как работает причудливый разум...

4)
mysqli_query($link, "INSERT INTO comsume (Id_p)VALUES ($data['Product_id'])");
...в которой находится id юзера,id продукта и время.
но вносите вы почему то только ид продукта, кроме того, как я уже говорил - "чего то не хватает" )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы