PDA

View Full Version : مشکل:حذف یک سطر در mysql



binboy
یک شنبه 09 آبان 1389, 19:53 عصر
با سلام
در کد زیر قصد حذف چند سطر با هم یا تکی، در mysql دارم ولی متاسفانه عمل نمیکنه روی سرور اصلی غیر لوکالم تست کردم نشد.قصد بکارگیری تیبل هم ندارم فقط div.قبل این تو قالب تیبل کار می کرد، اونجا هم یه مشکل بود که فقط روی سرور اصلی حذف می کرد یعنی روی لوکال کار نمی کرد،اگه بشه این مشکل را هم مرتفع کرد عالیه.

<?php
include('config.php');
$result = mysql_query("SELECT * FROM test_mysql ORDER BY name ASC");
?>

<div class="container">
<div class="header"> Header </div>
<div class="nav4" style="font-size:20px; font-weight:bold;"> 1 </div>
<div class="nav4" style="font-size:20px; font-weight:bold;"> # </div>
<div class="content" style="font-size:20px; font-weight:bold;"> Name </div>
<div class="nav3" style="font-size:20px; font-weight:bold;"> LastName </div>
<div class="sidebar" style="font-size:20px; font-weight:bold;"> Email </div>
<?php
while($row = mysql_fetch_array($result))
{
echo '<div class="chekbox"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="'.$rows[id].'"></idv>';
echo '<div class="nav4">' . $row['id'] . '</div>';
echo '<div class="content"><a href="update.php?id='.$row['id'].'">'.$row['name'].'</a></div>';
echo '<div class="nav3">' . $row['lastname'] . '</div>';
echo '<div class="sidebar">' . $row['email'] . '</div>';
}
if(isset($_POST['delete'])){
$checkbox = $_POST['checkbox'];
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM test_mysql 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=display.php\">";
}
}

?>
<div class="delete"><form method="post" action="display.php"><input name="delete" type="submit" id="delete" value=""></form></div>
<div class="footer">Footer</div>
</div>

binyaft
یک شنبه 09 آبان 1389, 20:10 عصر
متغیر $count مقداری نداره که حلقه بتونه کاری رو انجام بده

به صورت زیر بنویسد ببینید کار میکنه

$count=count($checkbox);
موفق باشید

binboy
یک شنبه 09 آبان 1389, 20:29 عصر
ممنونم از پاسخ

متغیر $count مقداری نداره که حلقه بتونه کاری رو انجام بده



درسته متغییرش این بود که نبود تو کد:

$count=mysql_num_rows($result);متغییر بالا را گذاشتم تو کد ولی کار نکرد هم تو لوکال و هم تو سرور اصلی!!!!!؟؟؟؟؟
«بعد submit صحفه رفرش میشه ولی سطر پاک نمیشه.هیچ اروریم نمیده.»

binboy
دوشنبه 10 آبان 1389, 12:38 عصر
یکی بگه چیکار کنم؟

binyaft
دوشنبه 10 آبان 1389, 12:59 عصر
بعد از

$del_id = $checkbox[$i];
بنویسید

echo "$del_id <br>";
ببینید چیزی مشاهده میشه

binboy
دوشنبه 10 آبان 1389, 17:39 عصر
نشد.اگر این مشکل حل نمیشه کد دیگه ای دارید که کار میکنه و کاراتر است معرفی کنید.
تشکر

binyaft
دوشنبه 10 آبان 1389, 18:32 عصر
اگر هیچ خورجی ای در صورت تیک دار کردن چک باکس ها ندارید ، مشکل در فرم هست

binboy
دوشنبه 10 آبان 1389, 18:46 عصر
داداش من منظورتو نگرفتم.کدوم فرم را میگی؟
من فرم آنچنانی تو کدها ندارم فقط همون دکمه سابمیته.
میشه یه نگا به کد بندازی؟
تشکر

funpatogh
دوشنبه 10 آبان 1389, 23:53 عصر
مشکل شما توی فرم هست و چون


<form method="post" action="display.php">
رو بعد از input ها و در انتهای صفحه گزاشتید مقادیر چک باکس رو سند نمیکنه و فقط کلید delete رو ارسال میکنه
این قسمت فرمت رو به این شکل ویرایش کنید


<form method="post" action="display.php">
<div class="container">
<div class="header"> Header </div>
<div class="nav4" style="font-size:20px; font-weight:bold;"> 1 </div>
<div class="nav4" style="font-size:20px; font-weight:bold;"> # </div>
<div class="content" style="font-size:20px; font-weight:bold;"> Name </div>
<div class="nav3" style="font-size:20px; font-weight:bold;"> LastName </div>
<div class="sidebar" style="font-size:20px; font-weight:bold;"> Email </div>

binboy
سه شنبه 11 آبان 1389, 00:28 صبح
مشکل شما توی فرم هست و چون

اینکار را هم کردم نشد.
این مشکل را توی یکی از این فرومهای خارجی مطرح کردم و اونها همچین جوابی بهم دادن:
There are a couple issues here:

The meta tag will not work outside the head element on an HTML document, so that method is out.
Your loop will only validate if the last delete statement worked, not all of them
You can use the header instruction instead, but you'll need to reorder the code to accomplish what you want.
A non-php word of advice - avoid inline styles as much as possible. You'll save yourself a lot of headaches. You can use multiple classes for the same element, just separating them by a space...
The generated page will not validate because you've got form elements (the checkboxes) outside the form itself, so results can get sketchy....

This should get you what you need. If not, ensure that your ID is actually a character field - if not, remove the quotes around $del_id in the delete statement.
بعد همچین کدی دادن:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel=stylesheet type=text/css href="style.css"> <title>Untitled Document</title>
<style type="text/css">
.bigandbold { font-size: 20px; font-weight: bold; }
.error { color: red; font-weight: bold; }
</style>
</head>
<body>
<?php include('config.php');
// First delete the records necessary
$errDesc = "";
if(isset($_POST['delete'])) {
$checkbox = $_POST['checkbox'];
for($i=0;$i<$count;$i++) {
$del_id = $checkbox[$i];
$sql = "DELETE FROM test_mysql WHERE id='$del_id'";
$result = mysql_query($sql);
if (!$result) { $errDesc .= "<p>Error deleting $del_id";
}
}
// if successful redirect to delete_multiple.php
// NOTE: If **this** page is delete_multiple.php, then this whole if statement is not needed..
if (strLen($errDesc) == 0) {
header("Location: delete.php");
}
}
$result = mysql_query("SELECT * FROM test_mysql ORDER BY name ASC");
$count=mysql_num_rows($result);
?>
<div class="container">
<div class="header"> Header </div>
<div class="nav4 bigandbold">1</div>
<div class="nav4 bigandbold">#</div>
<div class="content bigandbold">Name</div>
<div class="nav3 bigandbold">LastName</div>
<div class="sidebar bigandbold">Email</div>
<?php
if(strLen($errDesc) > 0){
echo '<div class="error">'. $errDesc .'</div>';
}
$count=count($checkbox);
while($row = mysql_fetch_array($result)) {
echo '<div class="chekbox"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="'.$rows[id].'"></div>';
echo '<div class="nav4">'. $row['id'] .'</div>';
echo '<div class="content"><a href="update.php?id='.$row['id'].'">'.$row['name'].'</a></div>';
echo '<div class="nav3">' . $row['lastname'] . '</div>';
echo '<div class="sidebar">' . $row['email'] . '</div>';
}
?>
<div class="delete">
<form method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
<input name="delete" type="submit" id="delete" value="">
</form>
</div>
<div class="footer">Footer</div>
</div>
</body>
</html>
فقط این کد یک ارور داره اونم اینه که بعد از کلیک روی دکمه حذف صحفه رفرش میشه و همچین اروری تو همون صفه میاد:

Warning: Cannot modify header information - headers already sent by (output started at /home/zigsmhos/public_html/test/idu/display.php:6) in /home/zigsmhos/public_html/test/idu/display.php on line 27
با Notepad تبدیل به UTF-8 کردم بازم نرفت.تو php.ini تظيم output_buffering را on کردم، نرفت.ob_start(); را گذاشتم، نرفت که نرف.
حالا شما بگید چیکارش کنم؟

funpatogh
سه شنبه 11 آبان 1389, 00:35 صبح
اگر این کدت مشکلی نداره و کار میکنه و فقط خطای header میده به خاطر تابع header از این


echo "<script language=\"javascript\">window.location=\"delete.php\";</script>";

به جای این خط استفاده کن


header("Location: delete.php");

اما اگر دنبال راه دیگری هستید که بنده براتون ویرایش کنم

binboy
سه شنبه 11 آبان 1389, 01:30 صبح
دستت درد نکنه اروره رفت ولی حذف نشدن سطرها همچنان پابرجاست.
میشه یه توضیح راجب ارور بالا و رفع اون بدی؟
البته مشکل عدم حذف هم هست که مهمتر است؟؟؟؟؟؟؟؟

binyaft
سه شنبه 11 آبان 1389, 12:14 عصر
Warning: Cannot modify header information - headers already sent by (output started at /home/zigsmhos/public_html/test/idu/display.php:6) in /home/zigsmhos/public_html/test/idu/display.php on line 27
با کد های زیر حل میشه
اول فایل بنویسید

ob_start();
و اخر فایل هم

ob_end_flush();

binboy
سه شنبه 11 آبان 1389, 17:33 عصر
دوست عزیز
ارور بالا با جایگزینی کدهای زیر حل شد فقط همون مشکل پاک نکردن هنوز باقیه.

اگر این کدت مشکلی نداره و کار میکنه و فقط خطای header میده به خاطر تابع header از این


echo "<script language=\"javascript\">window.location=\"delete.php\";</script>";
به جای این خط استفاده کن


header("Location: delete.php");
اما اگر دنبال راه دیگری هستید که بنده براتون ویرایش کنم

funpatogh
سه شنبه 11 آبان 1389, 20:38 عصر
خوب اون error مربوط به تابع header بود که قبل از این تابع نباید به هیچ وجهی خروجی چاپ شده باشد که شما html قبلش دارید برای همین از جاوا اسکریپت بهره بردیم که اون خطا حل بشود اما برای حذف نشدن براتون کدتون رو ادیت میکنم و میزارم

binboy
سه شنبه 11 آبان 1389, 21:21 عصر
خوب اون error مربوط به تابع header بود که قبل از این تابع نباید به هیچ وجهی خروجی چاپ شده باشد که شما html قبلش دارید برای همین از جاوا اسکریپت بهره بردیم که اون خطا حل بشود اما برای حذف نشدن براتون کدتون رو ادیت میکنم و میزارم

تشکر،منتظرم

funpatogh
سه شنبه 11 آبان 1389, 21:45 عصر
تست کد ببین ایرادی داره یا نه اگه داشت بگو


<?php
include("config.php");
if(isset($_POST['delete'])){
foreach($_POST['del_checkbox'] as $value){
mysql_query("delete from `test_mysql` where `id`='$value' ");
}

}



$result = mysql_query("SELECT * FROM `test_mysql` ORDER BY `name` ASC");
?>
<form method="post" action="display.php">
<div class="container">
<div class="header"> Header </div>
<div class="nav4" style="font-size:20px; font-weight:bold;"> 1 </div>
<div class="nav4" style="font-size:20px; font-weight:bold;"> # </div>
<div class="content" style="font-size:20px; font-weight:bold;"> Name </div>
<div class="nav3" style="font-size:20px; font-weight:bold;"> LastName </div>
<div class="sidebar" style="font-size:20px; font-weight:bold;"> Email </div>
<?php
while($row = mysql_fetch_array($result))
{
echo '<div class="chekbox"><input name="del_checkbox[]" type="checkbox" value="'.$row['id'].'"></idv>';
echo '<div class="nav4">' . $row['id'] . '</div>';
echo '<div class="content"><a href="update.php?id='.$row['id'].'">'.$row['name'].'</a></div>';
echo '<div class="nav3">' . $row['lastname'] . '</div>';
echo '<div class="sidebar">' . $row['email'] . '</div>';
}


?>
<div class="delete"><input name="delete" type="submit" id="delete" value="Delete"></form></div>
<div class="footer">Footer</div>
</div>

binboy
سه شنبه 11 آبان 1389, 22:11 عصر
داداش دمت گرم کار کرد.
فقط گیرش کجا بود؟ چطوری رفع شد؟اگر توضیح بدی تجربه خوبی خواهد بود.
تشکر

funpatogh
سه شنبه 11 آبان 1389, 22:42 عصر
مشکل اول :


<form method="post" action="display.php">

اینو انتهای صفحه بعد از چک باکس ها گزاشته بودی که مقادیر چک باکس ها ارسال نمیشد

مشکل دوم:


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

که باید بشه


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

اینهایی که به وضوح پیدا بود رو براتون نوشتم ممکنه باز هم باشد

binboy
سه شنبه 11 آبان 1389, 23:43 عصر
با سلام و تشکر
کد شما حذف می کنه و بعد حذف همچین اروری میده:

Untitled Document
Warning: Invalid argument supplied for foreach() in D:\xampp\htdocs\learn\meti\idu\display.php on line 15

این ارور چیه و برای چه بوجود آمد و چطوری رفع میشه؟
بازم تشکر

funpatogh
سه شنبه 11 آبان 1389, 23:50 عصر
توش تغییری دادید؟
هر تغییری که دادی بزار اینجا ببینم