php从数据库中删除值并使其他不变
Posted
技术标签:
【中文标题】php从数据库中删除值并使其他不变【英文标题】:php delete the value from the database and make other unchanged 【发布时间】:2014-02-12 04:59:33 【问题描述】:我真的是 php 和 mysql 的新手。所以为了学习,我正在做一个小项目。 该项目的目标是这样的。我有一个具有 id、name、public name 属性的数据库。现在我必须获取公共名称的所有值并在每个复选框中显示它们。现在,当有人选择任何复选框并单击保存按钮时,该值应该以列表格式出现在容器中。为此,我有一个名为 ps_attribute_group 的预定义数据库,该数据库具有这样的值
CREATE TABLE IF NOT EXISTS `ia_attribute_group` (
`id_attribute_group` int(10) unsigned NOT NULL,
`name` varchar(128) NOT NULL,
`public_name` varchar(64) NOT NULL,
PRIMARY KEY (`ia_attribute_group`,`id_lang`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `ia_attribute_group` (`id_attribute_group`, `name`, `public_name`) VALUES
(1, 'Disk space', 'Disk space'),
(2, 'Color', 'Color'),
(3, 'ICU', 'Processor'),
(4, 'color', 'color');
现在我的工作是从带有复选框的列表中获取数据库中的所有名称,在列表下我将有我的保存按钮。因此,当我选择任何复选框并单击保存时,这将保存在另一个名为 ia_attribute_names 的数据库中
为此,我做了一个这样的数据库 ia_attribute_names
CREATE TABLE IF NOT EXISTS `ia_attribute_names` (
`attribute_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`attribute_name` text NOT NULL,
PRIMARY KEY (`attribute_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
所以从一开始我就有了我的数据库连接
$host = 'localhost';
$username = 'root';
$password = 'root';
$dbname = 'database_name';
$con=mysqli_connect($host,$username,$password,$dbname);
if (mysqli_connect_errno($con))
echo "Failed to connect to MySQL: " . mysqli_connect_error();
因为我需要我的表单中数据库 ia_attribute_group 中的 public_name 以及所有复选框。我已经制作了这段代码。
$query = mysqli_query($con,"SELECT DISTINCT `public_name` FROM `ia_attribute_group`") or die (mysql_error());?>
<form id="formID" method="post" action="" enctype="multipart/form-data">
<?php
while ($results = mysqli_fetch_assoc($query))
foreach($results as $result)
echo '<input type="checkbox" name="attribute[]" value="'.$result.'"/>';
echo $result.'<br />';
?>
<input type="submit" name="save" id="save" value="save"/>
</form>
这是获取所有公共名称并将它们转换为复选框。现在您可以在表单中看到提交按钮。因此,当有人在选中复选框后单击它时,它将值保存到数据库 ia_attribute_names。
if(isset($_POST['save']))
$insert_query = "INSERT INTO `ia_attribute_names`(`attribute_id`, `attribute_name`) VALUES ('', '".$attribute_values."')";
$insert = mysqli_query($con, $insert_query) or die(mysqli_error());
if($insert)
echo 'success';
else
echo 'error';
现在我将从数据库 ia_attribute_names 中获取数据,就像它们都在列表中一样。所以我有这样的代码
<div id="container">
<?php
$attribute_name = @$_POST['attribute'];
$attribute_values= @implode(',', $_POST['attribute']);
$sql_query = "SELECT `attribute_name` FROM `ia_attribute_names` ORDER BY `attribute_id` DESC LIMIT 1 ";
$attributes_name = mysqli_query($con,$sql_query );
$list_names = mysqli_fetch_array($attributes_name);
//echo $list_names['attribute_name'];
$resultArr = explode(",",$list_names['attribute_name']);
print_r($resultArr);
echo '<ul>';
foreach($resultArr as $atributeValue)
$listId = str_replace(' ','',$atributeValue);
?>
<li class="<?php echo $listId; ?>"><?php echo $atributeValue; ?> <a href="" onClick="deleteAttribute(); return false;">Delete</a> </li>
<?php
?>
</ul>
</div>
到目前为止,我已经完成了所有的获取和数据。但我对删除功能很困惑。正如您在列表中看到的,我有一个标签。因此,当有人单击删除时,应从列表和数据库中删除所选列表。 假设我有 3 个列表磁盘空间、颜色和处理器。如果有人点击颜色,那么颜色将从前端和后端都被删除。其余两个应保持不变。那么有人可以告诉我该怎么做吗?任何帮助都会非常显着。谢谢。 正如我现在正在学习的那样,代码中可能存在一些错误。因此,如果您对错误进行更正,我将非常高兴。
更新 您可以看到我将值存储为文本格式。那么如何从数据库文本中删除选中的文本,而其他文本保持不变呢?
注意 公共名称值不应在数字上保持不变。这里我只使用了 3 个(磁盘空间、颜色、处理器)。它可能会有所不同。
【问题讨论】:
你能把你的问题分解成必要的部分吗?仅描述您的问题。您尝试删除什么? 【参考方案1】:你不需要给 li
元素上课。你可以像这样使用它;
<li id="<?php echo $listId; ?>"><?php echo $atributeValue; ?> <a href="" onClick="deleteAttribute(<?php echo $listId; ?>); return false;">Delete</a> </li>
Jquery:
function deleteAttribute(id)
$.ajax(
url : "your_domain/delete",
type: "POST",
data : "id=" + id,
success: function(data, textStatus, jqXHR)
//data - response from server. Check response result
alert(data);
$("#" + id).remove();
,
error: function (jqXHR, textStatus, errorThrown)
alert("Delete error!")
);
为了使用attribute_id
;
更新这个;
$sql_query = "SELECT `attribute_name` FROM `ia_attribute_names` ORDER BY `attribute_id` DESC LIMIT 1 ";
到
$sql_query = "SELECT `attribute_id`,`attribute_name` FROM `ia_attribute_names` ORDER BY `attribute_id` DESC LIMIT 1 ";
并在您的li
和href
中使用attribute_id
。最后变成了;
<div id="container">
<?php
$attribute_name = @$_POST['attribute'];
$attribute_values= @implode(',', $_POST['attribute']);
$sql_query = "SELECT `attribute_name` FROM `ia_attribute_names` ORDER BY `attribute_id` DESC LIMIT 1 ";
$result = mysqli_query($con,$sql_query );
echo '<ul>';
while ($row = mysql_fetch_assoc($result))
?>
<li class="<?php echo $row['attribute_id']; ?>"><?php echo $row['attribute_name']; ?> <a href="" onClick="deleteAttribute($row['attribute_id'];); return false;">Delete</a> </li>
<?php
</ul>
</div>
【讨论】:
@Huseyein BABAL 感谢您的回复。但是如何从数据库中删除匹配的文本。如您所见,我将值作为文本存储到数据库中。 您不需要使用文本。即使是通过文字删除也是危险的。您还插入了attribute_id
,我也认为它是auto_increment
。你可以把attribute_id
放到html中,你可以在删除时使用那个id
检查我更新的答案。在您的选择语句中使用 attribute_id 并在您的 html 中使用它
在 jQuery alert(data) 中它显示为空白。我的意思是在 alertbox 中看不到 id。
您能否将包含删除功能的 php 文件添加到您的问题中?你需要在删除操作结束时返回一些东西以上是关于php从数据库中删除值并使其他不变的主要内容,如果未能解决你的问题,请参考以下文章