2012-02-21 10 views
-1

テーブルフォームとデータベースから電子メールを削除しようとしたときにこのエラーが発生しました。それはいくつかのフィールドが動作していて、他の人はまだ私にエラーを与えています。どんな助けもありません。私は自分でPHPを学んでいます。ここエラー:通知:定義されていないオフセット:1行C: wamp www project php deleteRow.php

/私のコード/

<?php 
$dbhost = 'host'; 

$dbuser = 'username'; 

$dbpass = 'password'; 

$dbname = 'databe_name'; 

$dbtable = 'database_table'; 

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql'); 
// 
mysql_select_db($dbname,$conn) or die ("Could not open database"); 
// 
$sql="SELECT * FROM '$dbtable'"; 
$result=mysql_query($sql); 
$count=mysql_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="4" bgcolor="#FFFFFF"><strong>Delete multiple rows in mysql</strong> </td> 
</tr> 
<tr> 
<td align="center" bgcolor="#FFFFFF">#</td> 
<td align="center" bgcolor="#FFFFFF"><strong>Id</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Sender</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Message</strong></td> 
<td align="center" bgcolor="#FFFFFF"><strong>Date</strong></td> 
</tr> 
<?php 
while($rows=mysql_fetch_array($result)){ 
?> 
<tr> 
<td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<?php echo $rows['id']; ?>"></td> 
<td bgcolor="#FFFFFF"><?php echo $rows[0]; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $rows[2]; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $rows[3]; ?></td> 
<td bgcolor="#FFFFFF"><?php echo $rows[4]; ?></td> 
</tr> 
<?php 
} 
?> 
<tr> 
<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Delete"></td> 
</tr> 
<?php 
// Check if delete button active, start this 
if(isset($_POST['delete'])){ 
    for($i=0;$i<$count;$i++){ 
      $del_id = $_POST['checkbox'][$i]; /*this line gives me an error*/ 
      $sql = "DELETE FROM '$dbtable' WHERE id='$del_id'"; 
      $result = mysql_query($sql); 
    } 
    // if successful redirect to delete_multiple.php 
if($result){ 
    echo "<meta http-equiv='refresh' content='0' URL='deleteRow.php'>"; 
} 
} 
mysql_close(); 
?> 
</table> 
</form> 
</td> 
</tr> 
+0

エラーはかなり明確です。存在しない配列インデックスにアクセスしています。上のコードの55行目はどの行ですか?私は '$ rows'が空であるか、または5つの要素を持たないと思います。 – CodeCaster

+0

あなたのコードは私の目を傷つける –

答えて

0

未確認のチェックボックスは、その値が送信されていないです。

はおそらく、とあなたfor体を交換する必要があります。チェックされたとき

if(isSet($_POST['checkbox'][$i])) { 
     $del_id = $_POST['checkbox'][$i]; /*this line gives me an error*/ 
     $sql = "DELETE FROM '$dbtable' WHERE id='$del_id'"; 
     $result = mysql_query($sql); 
} 
0

チェックボックスポストフィールドはポストにのみ使用可能です。あなたのポスト配列には値1と2のみが含まれます。すべてのdb行をループすると、$ count変数がチェックボックス配列のカウントで変更されます。

0

$_POST['checkbox'][1]が存在しません。代わりにあなたのコード内でクエリ結果の数がある$countを使用しての

は、他の人が示唆しているようcount($_POST['checkbox'])

のでfor($i=0;$i<$count;$i++){は、

for($i=0; $i < count($_POST['checkbox']); $i++){ 

そして第二に表情になってしまうではないすべてのインデックスを使用しますのチェックボックスが設定されていてもよい。キーと値を簡単に得ることができるループをforeachとすることをお勧めします。

foreach($_POST['checkbox'] as $key => $value){ 
0

チェックボックスをオフにすると、$_POST['checkbox']に表示されません。

あなたができることは、すべてのチェックボックスを配列に保存し、ループがチェックされたすべてのボックスに対して1つの削除クエリを実行した後です。

for($i=0;$i<$count;$i++){ 
    if (isset($_POST['checkbox'][$i])) $delids[] = $_POST['checkbox'][$i]; 
} 

if (isset($delids) && is_array($delids)) { 
    $sql = "DELETE FROM '$dbtable' WHERE id IN (".implode(',', $delids).")"; 
    $result = mysql_query($sql); 
} 

しかし、より良い方法は、あなたのfor -loopをスキップして、次のように代わりにforeachを使用することです:

foreach($_POST['checkbox'] as $c) { 
    $delids[] = $c; 
} 

if (isset($delids) && is_array($delids)) { 
    $sql = "DELETE FROM '$dbtable' WHERE id IN (".implode(',', $delids).")"; 
    $result = mysql_query($sql); 
} 
1

試してみてください。

 

if(isset($_POST['delete'])){ 
    $checkboxCount = count($_POST['checkbox']); 
    for($i=0;$i<$checkboxCount;$i++){ 
      $del_id = $_POST['checkbox'][$i]; 
      $sql = "DELETE FROM '$dbtable' WHERE id='$del_id'"; 
      $result = mysql_query($sql); 
    } 
    // if successful redirect to delete_multiple.php 
if($result){ 
    echo ""; 
} 
} 

 
+0

tanx Sudhir ,,,助けてくれました。 –

+0

素晴らしい、それはあなたのために働いた場合、答えを受け入れることができる.. :) –

0

私は混乱が実際にあると思います値($ count - 行数)を使用して、各チェックボックスの値にインデックスを付けることです。行数は、チェックボックスの数を定義しますが、各チェックボックスの値は定義しません。したがって、deleteループの$ iは、チェックボックス配列のサイズより小さくなることは保証されていません。

関連する問題