PHP

2013-01-23 31 views
12

का उपयोग कर चेकबॉक्स का चयन करके एकाधिक पंक्तियां हटाएं मैं MYSQL डेटाबेस से कई पंक्तियां हटाना चाहता हूं। मैंने विभिन्न लिंक का चयन करने और चेकबॉक्स का उपयोग करके उन्हें हटाने के लिए यह delete.php फ़ाइल बनाई है।PHP

<html> 
<head> 

<title>Links Page</title> 

</head> 

<body> 

<h2>Choose and delete selected links.</h2> 

<?php 

$dbc = mysqli_connect('localhost','root','admin','sample') 
or die('Error connecting to MySQL server'); 

$query = "select * from links ORDER BY link_id"; 

$result = mysqli_query($dbc,$query) 
or die('Error querying database'); 

$count=mysqli_num_rows($result); 
?> 

<table width="400" border="0" cellspacing="1" cellpadding="0"> 
<tr> 
<td><form name="form1" method="post" action=""> 
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<td bgcolor="#FFFFFF">&nbsp;</td> 
<td colspan="3" bgcolor="#FFFFFF"><strong>Delete multiple links</strong> </td> 
</tr> 
<tr> 
<td align="center" bgcolor="#FFFFFF">#</td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link ID</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link Name</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link URL</strong></td> 
</tr> 

<?php 

while ($row=mysqli_fetch_array($result)) { 
?> 

<tr> 
<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" value="<?php echo $row['link_id']; ?>"></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_id']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_name']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_url']; ?></td> 
</tr> 

<?php 
} 
?> 

<tr> 
<td colspan="4" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" value="Delete"></td> 
</tr> 
<table width="400" border="0" cellspacing="1" cellpadding="0"> 
<tr> 
<td><form name="form1" method="post" action=""> 
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<td bgcolor="#FFFFFF">&nbsp;</td> 
<td colspan="3" bgcolor="#FFFFFF"><strong>Delete multiple links</strong> </td> 
</tr> 
<tr> 
<td align="center" bgcolor="#FFFFFF">#</td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link ID</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link Name</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Link URL</strong></td> 
</tr> 

<?php 

while ($row=mysqli_fetch_array($result)) { 
?> 

<tr> 
<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" value="<?php echo $row['link_id']; ?>"></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_id']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_name']; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $row['link_url']; ?></td> 
</tr> 

<?php 
} 
?> 

<tr> 
<td colspan="4" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" value="Delete"></td> 
</tr> 



<?php 

// Check if delete button active, start this 

if(isset($_POST['delete'])) 
{ 
    $checkbox = $_POST['checkbox']; 

for($i=0;$i<count($checkbox);$i++){ 

$del_id = $checkbox[$i]; 
$sql = "DELETE FROM links WHERE link_id='$del_id'"; 
$result = mysqli_query($sql); 
} 
// if successful redirect to delete_multiple.php 
if($result){ 
echo "<meta http-equiv=\"refresh\" content=\"0;URL=view_links.php\">"; 
} 
} 

mysqli_close($dbc); 

?> 

</table> 
</form> 
</td> 
</tr> 
</table> 

</body> 

</html> 

यह किसी भी पंक्ति को हटाने के लिए प्रतीत नहीं होता है। मेरा डेटा तालिका में आबादी है। मुझे लगता है कि समस्या PHP कोड के साथ है। कृपया इसमें मेरी सहायता करें।

+0

का उपयोग कर एकाधिक चेकबॉक्स हटाएँ मैं PHP में प्रोग्रामिंग करने के लिए पूरी तरह से नया हूँ। क्या आप कृपया मुझे किसी भी मुफ्त डीबगिंग PHP उपकरण के बारे में बता सकते हैं? – spyder

+1

त्रुटि रिपोर्टिंग चालू करें और संदेशों को पढ़ने के लिए सीखें। – tradyblix

+0

एचटीएमएल टैग सुनिश्चित करने के लिए कि आखिरी PHP भाग (जारीकर्ता ($ _ POST ['delete']) को जारी रखने का प्रयास करें) पृष्ठ को सबमिट होने पर डेटा में से कोई भी रीसेट नहीं किया जा रहा है। इसके अलावा यह फ़ॉर्म टैग का उपयोग करने में मदद कर सकता है: '

' –

उत्तर

9

आप इस तरह एक सरणी के रूप में यह व्यवहार करना चाहिए,

<input name="checkbox[]" type="checkbox" value="<?php echo $row['link_id']; ?>"> 

तब ही, आप अपनी गिनती और हटाने के लिए यह पाश ले सकते हैं।

आपको क्वेरी में डेटाबेस कनेक्शन भी पास करने की आवश्यकता है। अपने input तत्व में name="checkbox[]" तरह

$result = mysqli_query($sql); 
+0

इसे नाम से बदल दिया = " चेकबॉक्स "नाम =" चेकबॉक्स [] ".... फिर भी, यह किसी भी डेटा को हटा नहीं रहा है – spyder

+0

यह देखने के लिए अपनी हटाई गई क्वेरी के लिए गूंज डालें कि डेटा $ del_id पूरी तरह से आता है या नहीं। अगर $ del_id मान पूरी तरह से आता है, तो क्वेरी को अपने mysql संपादक में चलाएं। आपको पता चलेगा कि डेटाबेस पक्ष –

+0

@spyder में कोई त्रुटि क्यों है क्योंकि एडविन ने अपना जवाब पोस्ट करने के बाद इसे हटाया नहीं था, कि आपने कभी भी $ $ result = mysqli_query ($ sql); से डीबी कनेक्शन पास नहीं किया है। जिसे '$ result = mysqli_query ($ dbc, $ sql) के रूप में पढ़ना चाहिए था;'। @ एडविन: मैंने संपादन किया। –

12

उपयोग सरणी संकेतन:

$result = mysqli_query($dbc, $sql); 

तुम्हारा यह शामिल नहीं किया। यह आपको $_POST['checkbox'] सरणी के रूप में देगा। क्वेरी में आप इसका उपयोग

$sql = "DELETE FROM links WHERE link_id in "; 
$sql.= "('".implode("','",array_values($_POST['checkbox']))."')"; 

उन सभी को हटाने के लिए एक ही क्वेरी का उपयोग कर सकते हैं।

नोट: आप मान mysql_real_escape_string या इसी तरह के $_POST['checkbox'] में पारित SQL Injection को रोकने के लिए से बचने के लिए की जरूरत है।

1

कुछ ऐसा जो कभी-कभी फसलों आप/

बारे में पता होना नहीं हो सकता है हो सकता है हमेशा से ही उठाए जा नहीं होगा $ _POST द्वारा [ 'नष्ट'] जब IE का उपयोग कर। हालांकि फ़ायरफ़ॉक्स और क्रोम ठीक काम करना चाहिए। मैं एक अलग isntead का उपयोग करता हूं जो आईई

जैसा कि आप ऊपर दिए गए कोड में नहीं हट रहे हैं, आप एक ही डेटा खींचकर चेक बॉक्स के 2x सेट को प्रतिबिंबित कर रहे हैं? क्या यह सिर्फ एक कॉपी + पेस्ट गलती है या यह वास्तव में आपका कोड कैसा है?

यदि आपका कोड यह है कि यह समस्या होगी क्योंकि उपयोगकर्ता एक चेकबॉक्स सरणी आइटम टिक कर सकता है लेकिन दूसरा एक अनचेक किया जाएगा ताकि हटाए जाने के लिए PHP कोड भ्रमित हो रहा है। या तो दूसरे चेक बॉक्स का नाम बदलें या HTML के उस ब्लॉक को हटा दें निश्चित रूप से आपको एक ही सूची को दो बार प्रदर्शित करने की आवश्यकता नहीं है?

+0

मैं फॉर्म को एक अलग कॉलम के रूप में आईडी प्रदर्शित करना चाहता हूं ... भी, मुझे प्राथमिक कुंजी से लिंक करने के लिए चेकबॉक्स की आवश्यकता है, जो कि फिर से लिंक_आईडी कॉलम है..यह, दोनों कॉलम – spyder

+0

erm क्यों नहीं करते हैं यह सब एक ही लूप में एक टेबल में एक ही डेटासेट को दो बार लूप करने की ज़रूरत नहीं है क्योंकि आप वास्तव में ऊपर दिए गए कोड के अनुसार दोनों में समान जानकारी प्रदर्शित कर रहे हैं। – Dave

+0

मैंने एक डेटासेट/कॉलम हटा दिया है :) – spyder

3
<?php $sql = "SELECT * FROM guest_book"; 
          $res = mysql_query($sql); 
          if (mysql_num_rows($res)) { 
          $query = mysql_query("SELECT * FROM guest_book ORDER BY id"); 
          $i=1; 
          while($row = mysql_fetch_assoc($query)){ 
          ?> 


<input type="checkbox" name="checkboxstatus[<?php echo $i; ?>]" value="<?php echo $row['id']; ?>" /> 

<?php $i++; }} ?> 


<input type="submit" value="Delete" name="Delete" /> 

if($_REQUEST['Delete'] != '') 
{ 
    if(!empty($_REQUEST['checkboxstatus'])) { 
     $checked_values = $_REQUEST['checkboxstatus']; 
     foreach($checked_values as $val) { 
      $sqldel = "DELETE from guest_book WHERE id = '$val'"; 
      mysql_query($sqldel); 

     } 
    } 
} 
4

पीएचपी कोड

<input type="checkbox" name="chkbox[] value=".$row[0]."/> 
<input type="submit" name="delete" value="delete"/> 
<?php 
if(isset($_POST['delete'])) 
{ 
$cnt=array(); 
$cnt=count($_POST['chkbox']); 
for($i=0;$i<$cnt;$i++) 
    { 
    $del_id=$_POST['chkbox'][$i]; 
    $query="delete from $tablename where Id=".$del_id; 
    mysql_query($query); 
    } 
} 
0
$deleted = $_POST['checkbox']; 
$sql = "DELETE FROM $tbl_name WHERE id IN (".implode(",", $deleted) . ")";