У меня такая форма
<form method="post" action="process.php"> Name: <input type="text" name="name" value=""> <br /> English: <input type="text" name="english" value=""> <br /> French: <input type="text" name="french" value=""> <br /> <input type="submit" name="submit" value="Submit"> </form>
и мы делаем этот запрос на process.php
$query = " UPDATE `translations_structure` SET `updated_on` = '".time()."', `english` = '".utf8_encode($english)."', `french` = '".utf8_encode($french)."' WHERE `id` = '".$id."'";
и если я отредактирую языки таблиц и добавлю больше языков, то форма динамически изменится, чтобы сказать этот пример
<form method="post" action="process.php"> Name: <input type="text" name="name" value=""> <br /> English: <input type="text" name="english" value=""> <br /> French: <input type="text" name="french" value=""> <br /> Spanish: <input type="text" name="spanish" value=""> <br /> German: <input type="text" name="german" value=""> <br /> <input type="submit" name="submit" value="Submit"> </form>
и запрос, который мне нужно динамически редактировать
$query = " UPDATE `translations_structure` SET `updated_on` = '".time()."', `english` = '".utf8_encode($english)."', `french` = '".utf8_encode($french)."', `spanish` = '".utf8_encode($spanish)."', `german` = '".utf8_encode($german)."' WHERE `id` = '".$id."'";
что я не понимаю, так это то, как я динамически делаю внутри запроса код
* имя поля формы совпадает с именем переменной i POST
* и имя столбца из таблицы совпадает с именем POST
`english` = '".utf8_encode($english)."', `french` = '".utf8_encode($french)."', `spanish` = '".utf8_encode($spanish)."', `german` = '".utf8_encode($german)."', `other_language` = '".utf8_encode($other_language)."', `other_language2` = '".utf8_encode($other_language2)."'
здесь выше я объяснил, как я делаю запрос, но я не могу понять, как писать переменные
Я знаю, немного сложно, что мне нужно, но, возможно, кто-то понимает, что мне нужно
Спасибо
Сначала я объясню, что я хочу сделать:
У меня есть таблица под названием «переводы», где я храню языки. например: английский, французский, испанский и т. д.
Я использую форму для обновления новых значений, проблема в том, что я хочу, чтобы динамическая динамика не вставляла этот запрос в каждый файл php вручную, потому что таблица языков будет расти или редактировать, и я хочу динамически работать, чтобы не редактировать каждый php-файл.
имя переменных одинаково, как имя поля в базе данных, мне удается создать массив для имен в табличных переводах
это то, что у меня есть до сих пор, чтобы сделать его динамичным. Проблема в том, что я не знаю, как вставлять переменные в запрос $ _POST ['english'], $ _POST ['french'] и т. д.
$db = new DB(); $query = $db->query("SELECT * FROM `translations_languages` ORDER BY `name` ASC"); while($row = $query->fetch_assoc()){ $values[] = "`{$row['name']}` = '{$row['name']}'"; } $dynamic_result = "".strtolower(implode(",", $values)).""; $query = " UPDATE `translations_structure` SET `updated_on` = '".time()."', $dynamic_result WHERE `id` = '".$id."' "; echo "$query";
и так выглядит запрос нормальным образом
$query = " UPDATE `translations_structure` SET `updated_on` = '".time()."', `english` = '".utf8_encode($english)."', `french` = '".utf8_encode($french)."', `spanish` = '".utf8_encode($spanish)."' WHERE `id` = '".$id."'";
Я хочу добавить к запросу эти значения
`english` = '".utf8_encode($english)."', `french` = '".utf8_encode($french)."', `spanish` = '".utf8_encode($spanish)."'
вам просто нужно создать динамический массив обновлений. Что-то вроде этого:
$languagesToUpdate = array(); // this is an example, you should modify as your script: // create a variable/constant to make sure you update only allowed fields $allowedLanguages = array('english' => true, 'french' => true, 'spanish' => true, 'german' => true, 'other_language' => true); // iterate threw post and check for allowed languages and add to languagesToUpdate the language we need to update with it's value foreach ($_POST as $post => $value) { if (isset($allowedLanguages[$post]) && $allowedLanguages[$post]) { $languagesToUpdate[] = '`' . $post . '` = "' . utf8_encode($value) . '"'; } } // add additional data like updated_on $languagesToUpdate[] = '`updated_on` = ' . time() . ''; //update database $db = 'UPDATE `translations_structure` SET '.implode(', ', $languagesToUpdate).' WHERE `id` = '.(int)$id; // this will produce something like this: // UPDATE `translations_structure` SET `english` = "English text", `spanish` = "Spanish text", `updated_on` = 1479720637 WHERE `id` = 1