>我有这个:
<input type="text" name="menu_link_text*1" value="italian">
<input type="text" name="menu_link_text*2" value="english">
1
和2
识别数据库中的语言的位置(is lang_id
(
我如何使用 php 将每个menu_link_text
及其lang_id
保存在此表结构中:
tb_menu_link:
menu_link_id
menu_link_text
lang_id
这是我的更新功能,如何更改它?
$db->update(
'tb_menu_link_content',
array(
'menu_link_text'=>$check->sanitize($_POST['menu_link_text']),
),
'menu_link_id = "'.$_POST['menu_link_id'].'" AND lang_id = "'.$_POST['lang_id'].'"');
将输入转换为
<input type="text" name="menu_link_text[1]" value="italian">
<input type="text" name="menu_link_text[2]" value="english">
然后$_POST
将容器(或者如果你使用它,则得到,但你应该在~99%的情况下使用POST(
array(
"menu_link_text" => array(
1 => "italian",
2 => "english",
)
)
现在,您可以轻松获取语言ID并将其与您的数据库匹配
我假设你,知道数据库是如何工作的+帖子
@edit评论后,A把它变成了一个巨大的帖子,但我希望它有所帮助
我不知道你的数据库方案是什么,所以我假设以下内容:
menu_link_id INT
lang_id INT
text VARCHAR
在您的帖子中,您发送menu_link_id(可以是空的(和输入(如答案中给出的(
一个简单的帖子看起来像:
array(
"menu_link_id" => "1", // can also be "", so a new menu link is made
"menu_link_text" => array(
1 => "italian",
2 => "english",
)
)
首先,您应该检查这些值是否存在,并且是有效值 menu_link_id
在数字或字符串长度为 0 时有效 menu_link_text
在数组时有效
if (
// simple check if the values exists
(isset($_POST['menu_link_id'] && isset($_POST['menu_link_text'])
// check if the id is valid
&& (is_numeric($_POST['menu_link_id']) || strlen($_POST['menu_link_id'] == 0)
// check if the text is valid
&& (is_array($_POST['menu_link_text']))
)
知道我们知道我们有"有效"的数据,我们应该开始保存(更新或插入它((我不是MySQL的人,但知道你可以在一个语句中做到这一点(更新和插入(,但我不知道怎么做(
现在我们应该开始保存它了。首先,我们制作一个二手lang_ids数组。这将用于匹配它是新的或已经存在的。我不知道你如何使用哪个或什么数据库,所以我假设MySQl,然后是PDO。我还假设在整个项目中,$db
值等于 pdo 连接
$lank_ids = array();
if (strlen($_POST['menu_link_id'] > 0) {
$action = $db->prepare('SELECT lang_id FROM menu_items WHERE menu_link_id = :id');
// I already validated the value, but be defensive and be always save (so always use protection)
$action->execute(array(':id' => $_POST['menu_link_id']));
$lank_ids = $action->fetchColumn();
}
现在我们将插入这些大坝值
$valid_lang_ids = array(1, 2);
foreach($_POST['menu_link_text'] as $lang_id => $text) {
// Check the lang_ids are valid, I use now a hardcoded array
if(in_array($lang_id, $valid_lang_ids)) {
if (in_array($lang_id, $lank_ids )) {
// The lang_id is already know so update
$action = $db->prepare('UPDATE menu_items SET text = :text WHERE menu_item_id = :id AND lang_id = :lang_id');
$action->execute(array(
':id' => $_POST['menu_link_id'],
':lang_id' => $lang_id,
':text' => $text
);
} else {
// The lang_id is not set, so insert
$action = $db->prepare('INSERT INTO menu_items (menu_link_id, lang_id, text) VALUES (:id, :lang_id, :text)';
$action->execute(array(
':id' => $_POST['menu_link_id'],
':lang_id' => $lang_id,
':text' => $text
);
}
}
}
警告几乎所有的代码都是死的,所以我认为它有一些错误,但主线应该很清楚我没有清理文本,所以 XSS 是可能的!!
我只是在介绍亨德里克的回答,
将输入转换为
<input type="text" name="menu_link_text[1]" value="italian">
<input type="text" name="menu_link_text[2]" value="english">
现在在 php 文件中做下面的更改,
$menu_link_text=$_POST['menu_link_text'];
echo $menu_link_text[1]; //it will print "italian"
echo $menu_link_text[2]; // it will print "english"