php从数据库中删除值并使其他不变

Posted

技术标签:

【中文标题】php从数据库中删除值并使其他不变【英文标题】:php delete the value from the database and make other unchanged 【发布时间】:2014-02-12 04:59:33 【问题描述】:

我真的是 phpmysql 的新手。所以为了学习,我正在做一个小项目。 该项目的目标是这样的。我有一个具有 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 ";

并在您的lihref 中使用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从数据库中删除值并使其他不变的主要内容,如果未能解决你的问题,请参考以下文章

从数据库中获取值并显示在 html 表中,包括 PHP

PHP 如何从 AJAX 调用中发布多个数组/json 值并在同一个 SQL 查询中运行它们?

从模态表单中检索值并更新数据库php

我们如何在电子表格公式中更改列值并保持行不变?

从日期字段中删除时间值并在从数据库中获取数据时更改格式

Perl:组合两个哈希数组的值并使第二个数组的值成为输出哈希的键