2012-01-15 25 views
3

すべての行にチェックボックスを含むテーブルのデータベースからレコードを表示したいとします。チェックボックスをオンにすると、その特定の行がチェックされていれば削除するかどうかが決まります。 DBからデータを表示することができましたが、削除ボタンを押しても何も起こりません。私は確かに私はエラーが私のコードの一部を削除すると思うが、私は間違っている可能性があります。よく分かりません。とにかく、ここにコードがあります。私はいくつかの行を削除します。チェックボックスを使用してデータベーステーブルから行を削除する

<?php 

$link = mysql_connect("localhost","root", "123"); 
if(!$link) { 
    die('Failed to connect to server: ' . mysql_error()); 
} 

$db= mysql_select_db("abc"); 
if(!$db) { 
    die("Unable to select database"); 
} 


$search = $_POST['search']; 
$searchbox = $_POST['searchbox']; 


$query = ("SELECT $search FROM table where $search = '$searchbox'"); 
    $result=mysql_query($query); 

    if($result) 
     { 
     if(mysql_num_rows($result)<=0) 
     { 
     echo "<script type='text/javascript'>alert('The entry does not exist'); location.href = 'admin_home.php';</script>"; 
     } 
     } 



switch ($search) 
{ 
case 'studentnumber': 
    $result = mysql_query("SELECT * FROM table WHERE $search = '$searchbox'"); 
if($result){ 

     echo "<table class='hovertable'> 
     <tr> 
     <caption>Student Records</caption> 

<th colspan='1'> Student Number</th> 
<th colspan='8'> $searchbox</th> 
</tr> 

     <tr> 
     <th>Delete</th> 
     <th>Student Number</th> 
     <th>College</th> 
     <th>Course</th> 
     <th>Status</th> 
     <th>Last Name</th> 
     <th>First Name</th> 
     <th>Middle Name</th> 
     <th>Address</th> 
     <th>Gender</th> 
     <th>Civil Status</th> 
     <th>Religion</th> 
     <th>Email Address</th> 
     <th>Month</th> 
     <th>Day</th> 
     <th>Year</th> 
     <th>Father's Name</th> 
     <th>Father's Occupation</th> 
     <th>Mother's Name</th> 
     <th>Mother's Name</th> 
     </tr>"; 


     while($row = mysql_fetch_array($result)) 
     { 
     echo "<tr onmouseover=\"this.style.backgroundColor='#ffff66';\" onmouseout=\"this.style.backgroundColor='#d4e3e5';\">"; 

     ?> 
     <td><input name="need_delete[<? echo $rows['id']; ?>]" type="checkbox" id="checkbox[<? echo $rows['id']; ?>]" value="<? echo $rows['id']; ?>"></td> 
     <?php 
     echo "<td>" . $row['studentnumber'] . "</td>"; 
     echo "<td>" . $row['college'] . "</td>"; 
     echo "<td>" . $row['course'] . "</td>"; 
     echo "<td>" . $row['status'] . "</td>"; 
     echo "<td>" . $row['lname'] . "</td>"; 
     echo "<td>" . $row['fname'] . "</td>"; 
     echo "<td>" . $row['mname'] . "</td>"; 
     echo "<td>" . $row['address'] . "</td>"; 
     echo "<td>" . $row['gender'] . "</td>"; 
     echo "<td>" . $row['civilstatus'] . "</td>"; 
     echo "<td>" . $row['religion'] . "</td>"; 
     echo "<td>" . $row['emailaddress'] . "</td>"; 
     echo "<td>" . $row['month'] . "</td>"; 
     echo "<td>" . $row['day'] . "</td>"; 
     echo "<td>" . $row['year'] . "</td>"; 
     echo "<td>" . $row['father'] . "</td>"; 
     echo "<td>" . $row['fatheroccupation'] . "</td>"; 
     echo "<td>" . $row['mother'] . "</td>"; 
     echo "<td>" . $row['motheroccupation'] . "</td>"; 
     } 

     echo "</table>"; 
     echo "</div>"; 
} 
    break; 

default: 
    echo "<script type='text/javascript'>alert('An error occur'); location.href = 'admin_home.php';</script>"; 
} 

?> 
<input name="delete" type="submit" id="delete" value="Delete"> 
    <?php 
      // Check if delete button active, start this 
      if (! empty($_POST['delete'])) { 
       foreach ($_POST['need_delete'] as $id => $value) { 
        $sql = 'DELETE FROM students` WHERE id='.(int)$id; 
        mysql_query($sql); 
       } 
       echo "<script type='text/javascript'>alert('Record Successfully Deleted');location.href = 'admin_home.php';</script>"; 
       exit(); 
      } 
      mysql_close(); 
     ?> 

ありがとうございます!

答えて

1

チェックボックスの値を使用して配列として使用すると、どの値がチェックされているかがわかります。この方法をやって

<input type="checkbox" name="need_delete[$id]"> 

、あなたの$_POST['need_delete']は、インデックスとして、あなたのIDの配列を受け取ることになりますので、あなたは、これらのレジスタをテストし、削除することができるようになります。

1

$_POST配列の間違ったインデックスにアクセスしようとしているようです。あなたのPHPコードの終わり近くから取得された以下を参照してください。私はレコードを削除/表示するだけでなく、追加のためにこれに似た何かをした

if (! empty($_POST['need_delete'])) { 
1

if (! empty($_POST['delete'])) { 

はする必要があります。私が使用した方法は、PHPスクリプトのすべてのポスト変数をループし、キーの最初の部分に基づいてすべての情報を検索することでした(何かにマッチすれば、そのあとの番号をオブジェクトIDとして使用します)。次に、追加されるデータの作成された配列、削除されたもの、編集されたもの、無視されるものをループします。

であり、チェックボックスありえないセットは、オブジェクトがすでに存在し、データが異なり、チェックボックスが設定されていない場合、 を無視するオブジェクトがすでに存在し、チェックボックスが設定されている場合 を更新するようにオブジェクトがすでに存在する場合は、削除オブジェクトが存在しないと、チェックボックスが設定されていない 場合は、オブジェクトが存在しないとチェックボックスが設定されている場合は、新しい行 を作成

は、いくつかのコードをお持ちの

を助け

希望を無視

PHP Bl OCK:

$mysqlData = array();  // Items to Update 
$mysqlNewData = array(); // Items to Create 
$Data = $_POST; 

unset($Data['stuff']); 

foreach($Data as $k => $v) 
{ 
    $type = substr($k, 0, 2); 

    if ($type == "nw") 
    { 
     $type = substr($k, 2, 2); 
     $ID = substr($k, 4); 

     $mysqlSubData = $mysqlNewData[$ID]; 
     if (gettype($mysqlSubData) != "array") 
      $mysqlSubData = array(); 

     if ($type == "sd") 
      $mysqlSubData['startdate'] = $v; 
     if ($type == "ed") 
      $mysqlSubData['enddate'] = $v; 
     if ($type == "dl") 
      if ($v == "on") 
       $mysqlSubData['delete'] = true; 

     $mysqlNewData[$ID] = $mysqlSubData; 
    } else { 
     $ID = substr($k, 2); 
     $mysqlSubData = $mysqlData[$ID]; 
     if (gettype($mysqlSubData) != "array") 
      $mysqlSubData = array(); 

     if ($type == "sd") 
      $mysqlSubData['startdate'] = $v; 
     if ($type == "ed") 
      $mysqlSubData['enddate'] = $v; 
     if ($type == "dl") 
      if ($v == "on") 
       $mysqlSubData['delete'] = true; 

     $mysqlData[$ID] = $mysqlSubData; 
    } 
} 

表ブロック:

<? $occurences = $mysql->getEntries("occurences", "`TargetID`='{$Target['ID']}'"); ?> 

<table cellpadding="0" cellspacing="5" border="0" width="900" id="timetable"> 
<tr> 
<td>Delete</td> 
<td>Start Date</td> 
<td>End Date</td> 
</tr> 

<? foreach($occurences as $occurence) { ?> 
<? $ID = $occurence['ID']; ?> 
<tr> 
<td> 
<input type="checkbox" name="dl<?=$ID?>" value="on" /> 
</td> 
<td> 
    <input type="text" name="sd<?=$ID?>" id="sd<?=$ID?>" value="<?=$occurence['startdate']?>" style="width: 100px" /> 
    <a href="javascript:;" onclick="javascript:NewCssCal('sd<?=$ID?>','yyyyMMdd','arrow')"><img src="/scripts/cal.gif" width="16" height="16" border="0" alt="Pick a date"></a> 
</td> 
<td> 
    <input type="text" name="ed<?=$ID?>" id="ed<?=$ID?>" value="<?=$occurence['enddate']?>" style="width: 100px" /> 
    <a href="javascript:;" onclick="javascript:NewCssCal('ed<?=$ID?>','yyyyMMdd','arrow')"><img src="/scripts/cal.gif" width="16" height="16" border="0" alt="Pick a date"></a> 
</td> 
<td> 
</td> 
</tr> 
<? } ?> 

</table> 

<a href="javascript:;" onclick="AddOccurence();">Add Another</a> 

<div style="text-align: center"> 
<input type="image" src="/images/button_save.png" value="Save" border="0" /> 
<a href="/"><img src="/images/button_cancel.png" alt="Cancel" border="0" /></a> 
</div> 

</form> 

<script type="text/javascript"> 
var TableRowExtras = 0; 

function AddOccurence() 
{ 
TableRowExtras++; 

var da = new Date(); 

var t = document.getElementById('timetable'); 
var row = t.insertRow(t.rows.length); 

var cell = row.insertCell(0); 
var element = document.createElement('input'); 
element.name = 'nwdl' + TableRowExtras; 
element.type = 'checkbox'; 
element.value = 'on'; 
cell.appendChild(element); 

cell = row.insertCell(1); 
element = document.createElement('input'); 
element.type = 'text'; 
element.name = 'nwsd' + TableRowExtras; 
element.id = 'nwsd' + TableRowExtras; 
element.value = da.getFullYear() + '-' + (da.getMonth() + 1) + '-' + da.getDate(); 
element.style.width = '100px'; 
cell.appendChild(element); 

cell.innerHTML = cell.innerHTML + " "; 

element = document.createElement('a'); 
element.href = "javascript:NewCssCal('nwsd" + TableRowExtras + "','yyyyMMdd','arrow')"; 

var element2 = document.createElement('img'); 
element2.src = '/scripts/cal.gif'; 
element2.width = '16'; 
element2.height = '16'; 
element2.border = '0'; 
element2.alt = 'Pick a date'; 
element.appendChild(element2); 
cell.appendChild(element); 

cell = row.insertCell(2); 
element = document.createElement('input'); 
element.type = 'text'; 
element.name = 'nwed' + TableRowExtras; 
element.id = 'nwed' + TableRowExtras; 
element.style.width = '100px'; 
cell.appendChild(element); 

cell.innerHTML = cell.innerHTML + " "; 

element = document.createElement('a'); 
element.href = "javascript:NewCssCal('nwed" + TableRowExtras + "','yyyyMMdd','arrow')"; 

element2 = document.createElement('img'); 
element2.src = '/scripts/cal.gif'; 
element2.width = '16'; 
element2.height = '16'; 
element2.border = '0'; 
element2.alt = 'Pick a date'; 
element.appendChild(element2); 
cell.appendChild(element); 

} 
</script> 
1

は、特定のチェックボックスがオンまたはオフされたときにJavaScript関数を記述し、ページがされた後、隠れ変数としてカンマ区切りリスト内のIDを保存しますあなたが削除したいフィールドのIDを取得し、コンマを削除するために "Explode"を使って変数を分割することができます。

関連する問題