2014-01-22 55 views
2

我真的是一個PHP和MySQL的新手。所以爲了學習,我正在做一個小項目。 該項目的目標是這樣的。我有一個數據庫與id,名稱,公共名稱屬性。現在我必須獲取所有公開名稱的值,並在每個複選框中顯示它們。現在,當有人選擇任何複選框,並單擊保存按鈕,然後該值應該來在列表format.For我有命名爲ps_attribute_group預定義數據庫容器,數據庫中有這樣php從數據庫中刪除值並使其他值不變

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

你能否僅在必要的部分分解你的問題?只描述你的問題。你試圖刪除什麼? – createproblem

回答

0

您不需要給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 "; 

,並使用attribute_idlihref。最後,它變成了;

<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> 
+0

@Huseyein BABAL感謝您的回覆。但是,我怎樣才能從數據庫中刪除匹配的文本。正如你所看到的,我將這些值作爲文本存儲到數據庫中。 – Jagdish

+0

你不需要使用文字。即使按文字刪除也是危險的。你還插入'attribute_id',我認爲它是'auto_increment'。你可以把'attribute_id'設置爲html,你可以在刪除 –

+0

時使用該ID,你能告訴我該怎麼做嗎?任何一段代碼..我會很高興.. – Jagdish