Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

Нова тема
Проблем с изтриване на писма в сайт (inbox)
Тази тема е погледната 346 пъти
Добави темата към любими | Принтирай темата | Нова тема 
Публикувано на: 02.08.2008 22:17
Moreny
Чирак

Мнения: (9)

Здравейте,
Мъча се цял ден със следния проблем. На един inbox в сайт при получено ново писмо трябва първо да се отвори и от там да се изтрие с бутон "Изтрий".
<a href="del.php?id=<?php echo $id; ?>">изтрий </а>
Това което аз се опитвам да направя е още докато потребителя е в кутията без да отваря писмото срещу всяко писмо да има checkbox да се маркират писмата за изтриване и най-долу да има бутон "Изтрий" и по този начин да се изтриват всички маркирани писма.

Ето го checkbox-а пред всяко писмо:

<input type="checkbox" value="" name="">

и бутона долу:

<input type="submit" value="изтрий" >

ето файла del.php

<?php
session_start();
if (!isset($_SESSION['user'])) {
Header("Location: /?");
}

require_once('fun.php');
db_connect();

$result = mysql_query ("select id, to_ formt pm where id = '$id' and to_ ='$user'");
list ($id, $to_) = mysql_fetch_array($result);
if ($user !=$id[1]) {
Header("Location: /?");
}

mysql_free_result($result);
mysql_query(delete from pm where id ='$id'");
Header("Location: /?");
?>

Помогнете да направя връзката с del.php Ето това е кода на бутона изтрий когато писмото е отворено <a href="del.php?id=<?php echo $id; ?>">изтрий </а> и работи (изтрива отвореното писмо и връща в inbox), но по този начин е кофти защото всяко писмо трябва да бъде отворено за да се изтрие.
Въпроса е как да се маркират с отмети в checkbox и при натискане на бутон изтрий най долу да изтрива всички маркирани писма.

Благодарско!  +1 +1 :)


 
---------------------------
Потребител от: 18.04.08 | Всички уроци от Moreny | Всички скриптове от Moreny
напиши eMail напиши лично съобщение виж профила на Moreny
Публикувано на: 03.08.2008 12:46
bgspace
Самурай

Мнения: (80)

На  този  линк има  това  което искаш да  направиш  http://phpeasystep.com/mysql/8.html може да го  преработиш направо за  твоя  скрип за  теб е  важно с амо да  разбереш принципа  му на  работа


 
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace
напиши eMail напиши лично съобщение виж профила на bgspace
Публикувано на: 03.08.2008 18:51
zipopro
Майстор

Мнения: (743)

Да само дето не разбирам това:
<input name="checkbox[]" type="checkbox" id="checkbox[]" value="<? echo $rows['id']; ?>">

За какво checkbox[] и как така после се изкарва chechbox[num]?!?


 
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro

Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист
Винчета, болчета гайкии...!
напиши eMail напиши лично съобщение виж профила на zipopro
Публикувано на: 03.08.2008 19:37
bgspace
Самурай

Мнения: (80)

Обяснявам  какво е checkbox[] това  е  масив  в който  се  съхраняват  id  та който  искаш да  изтриеш, а  масив  е  празен понеже не  знамем  колко полета  имаме  те нали се  генерира  динамично в  php кода , а  изтриването  става тука
  if($delete){
for($i=0;$i<$count;$i++){
$del_id = $checkbox[$i];
$sql = "DELETE FROM $tbl_name WHERE id='$del_id'";
$result = mysql_query($sql);
}
Обяснение  на кода : Ако променливата $delete е сентата се изпълнява  кода  в конструкцията. Прменливата $count съдържа  броя на  редовете върнати от  заявката  селект. $checkbox[$i] съдържа id та  който  трябва  да бъдат изтрити.Той  е POST - тия масив  от  формата, а $i се явява  ключа на отделния  елемент.   $result = mysql_query($sql) изпълнява заявкат а за изтриване. Ще  бъдата изтрите  редовете  където имаме  стойности  в  елементите.


 
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace
напиши eMail напиши лично съобщение виж профила на bgspace
Публикувано на: 03.08.2008 21:11
zipopro
Майстор

Мнения: (743)

Да забеляза че кода е във HTML и е малко трудно да се повярва че
checkbox[] - което е низ(и е всъщност name-а на input-a) че е МАСИВ!


 
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro

Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист
Винчета, болчета гайкии...!
напиши eMail напиши лично съобщение виж профила на zipopro
Публикувано на: 03.08.2008 23:31
bgspace
Самурай

Мнения: (80)

zipopro сега ще ти обясня за какво точно става на въпрос :
При избор на една или повече стойности се изпозва  имеНаПоле[]. Поради факта, че полета input или други полета имат само по един атрибут име. Това означава, че PHP създава само по една променлива за всяко поле. Но ако има една променлива и множество избрани стойности, как PHP присвоява стойности на променливата? Тук  е мястото къде се изпозва концепцията за масивите. Когато имаме избрани множество стойности, PHP присвоява всички избрани стойности като масив на съответната променлива.
Ако  не  ти  е  ясно  още ми кажи и  ще  напиша урок с примери как да се изпозват  масиви  при  създаване и обработка на  форми. Защото  масивите са жизнено  важна  част  от програмирането.


 
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace
напиши eMail напиши лично съобщение виж профила на bgspace
Публикувано на: 04.08.2008 00:46
iwanov
Майстор

Администратор

Мнения: (518)

Цитат от bgspace@03.08.2008 23:31:
Ако  не  ти  е  ясно  още ми кажи и  ще  напиша урок с примери как да се изпозват  масиви  при  създаване и обработка на  форми. Защото  масивите са жизнено  важна  част  от програмирането.

И да му е станало ясно на него много хора може да не го знаят така че няма да е излишен един урок ако ти се пише.

Поздрави!


 
---------------------------
Потребител от: 06.02.07 | Всички уроци от iwanov | Всички скриптове от iwanov

Не е важно да си готин, готино е да си важен.
'Nemo saltat sobrius nisi forte insanit' - 'Nobody dances sober unless he's insane' - Ciccero :)
напиши eMail напиши лично съобщение виж профила на iwanov
Публикувано на: 04.08.2008 12:37
Moreny
Чирак

Мнения: (9)

Здравейте, отново ето как успях да го направя.
<?php
         if (isset($_POST['submit'])) {
         $del_msg = $_POST['del_msg'];
         $i = 0;
         $count = count($del_msg);
         while ($i < $count) {
         $dell[] = "id = '$del_msg[$i]'";
         $i++;
         }
         if ($count > 0) {
         $dell = "(".implode(" OR ", $dell).")";
         mysql_query("DELETE FROM pm WHERE $dell AND to_ = '$user'");
         echo "Избраните съобщения бяха изтрити успешно!";
         }
          else { echo "Не сте избрали съобщения за изтриване!"; }
         }
?>

Дайте си мнението по кода. Мисля, че това е най оптимизирания вариант до момента ? Ако имате забележки и видите, че нещо може да се подобри моля да кажете :)

Благодаря Ви!


 
---------------------------
Потребител от: 18.04.08 | Всички уроци от Moreny | Всички скриптове от Moreny
напиши eMail напиши лично съобщение виж профила на Moreny
Публикувано на: 04.08.2008 12:49
zipopro
Майстор

Мнения: (743)

1. Кода ти изобщо не е подреден!
2. Какво е това  $dell[] = "id = '$del_msg[$i]'"; О.о мн странно!
3. Не знаех че ако зададеш името на някое HTML поле от форма като масив че тръгва! Това за първи път го чувам и затова ми стана мн интересно!

Поздрави!


 
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro

Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист
Винчета, болчета гайкии...!
напиши eMail напиши лично съобщение виж профила на zipopro
Публикувано на: 04.08.2008 12:57
bgspace
Самурай

Мнения: (80)

Това където си го направил  няма никакъв  смисъл. То работи  но  логически не е правилно имаш грешка в  логиката.
 CODE
1
2
3
4
5
6
7
8
9
10
11
<?php
        
if (isset($_POST['submit'])) {
        
$del_msg = $_POST['del_msg'];
        
$i = 0;
if(count($del_msg))
        
while ($i < count($del_msg)) {
mysql_query("DELETE FROM pm WHERE $del_msg[$i] AND to_ = '$user'");         $i++;
        
}
      
else { echo "Не сте избрали съобщения за изтриване!"; }
         }

?>


 
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace
напиши eMail напиши лично съобщение виж профила на bgspace
Публикувано на: 04.08.2008 13:29
HunteR666
Ронин

Мнения: (20)

Цитат от bgspace@04.08.2008 12:57:
Това където си го направил  няма никакъв  смисъл. То работи  но  логически не е правилно имаш грешка в  логиката.
 CODE
1
2
3
4
5
6
7
8
9
10
11
<?php
        
if (isset($_POST['submit'])) {
        
$del_msg = $_POST['del_msg'];
        
$i = 0;
if(count($del_msg))
        
while ($i < count($del_msg)) {
mysql_query("DELETE FROM pm WHERE $del_msg[$i] AND to_ = '$user'");         $i++;
        
}
      
else { echo "Не сте избрали съобщения за изтриване!"; }
         }

?>

Да прав си и по твоя начин работи, но защо пък да няма логика и в кода, който му дадох.

Сега ще го обясня.

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
        
if (isset($_POST['submit'])) { // проверяваме дали е натиснат бутона за изтриване
        
$del_msg = $_POST['del_msg']; // тук това мисля, че ви е ясно :) Взимаме в променлива масива от chechbox-четата.
        
$i = 0;
        
$count = count($del_msg); // преброяваме колко стойности има в масива
        
while ($i < $count) { // започваме цикъла
        
$dell[] = "id = '$del_msg[$i]'"; // всяка стойност я вкарваме в нов масив $del като сега ще обясня какво е това id = '$del_msg[$i]'. Тук id ще присвои всяко едно чекнато поленце. Като после ще изтрием нужните резултати от таблицата само с една заявка. Това е целта :)
        
$i++;
        
} // тук цикъла приключва
        
if ($count > 0) { // след, което за всеки случай проверяваме дали има избрани писма за изтвиане и ако има продължаваме
        
$dell = "(".implode(" OR ", $dell).")"; // това съединява всички стойности от един масив в една променлива. Променливата $dell е присвоила примерно . (id = '5' OR id = '7' и т.н.).
След, което само с една заявка изтриваме нужните полета от таблицата.
        
mysql_query("DELETE FROM pm WHERE $dell AND to_ = '$user'");
        
echo "Избраните съобщения бяха изтрити успешно!";
        
}
         
else { echo "Не сте избрали съобщения за изтриване!"; }
         }
?>


 
---------------------------
Потребител от: 19.06.08 | Всички уроци от HunteR666 | Всички скриптове от HunteR666
напиши eMail напиши лично съобщение виж профила на HunteR666
Публикувано на: 04.08.2008 15:26
bgspace
Самурай

Мнения: (80)

Май в този сайт на много хора не им се чете както гледам. Трябва всичко да ви се дава на готово без да се памъчите ни най-малко. HunteR666 ти да си чувал за така наречената оптимизация на кода. В момента ти което си направил с тоя цикъл while просот копираш един масив в друг коетомо може и да стане и така масивІ1 = масив2;. Но няма смисал да се копира този масив щом не правиш никакви промени в него. Защтото при всяко едно действие ти изпозваш ресурси. if  конструкцията може да бъде преметен горе в цъкъла няма смъсъл да е доло. Твоя метод работи но си помисли малко ако имаш доста повече данни за обработка?. Може да прочетеш малко за оптимизация на php и mysql ако мислиш да се знимаваш с програмиране това ще ти е от същестрена важност за напред.


 
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace
напиши eMail напиши лично съобщение виж профила на bgspace
Публикувано на: 05.08.2008 17:57
zipopro
Майстор

Мнения: (743)

Логиката която използваш @HunteR666 е мн объркващ, неподреден и нерационален! Ето как трябва да изглежда кода:
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if($_POST['submit']){
   
$del_msg = $_POST['del_msg'];
   
if($del_msg)
    {
       
for($i=0; $i<=count($del_msg); $i++){
           
mysql_query("DELETE FROM pm WHERE id='$del_msg[$i]' AND to_ = '$user'");
       
}
    }
else{
       
echo "Не сте избрали съобщения за изтриване!";
   
}
}
else{
   
echo "Не сте натиснали бутона!";
}
?>


 
---------------------------
Потребител от: 20.12.06 | Всички уроци от zipopro | Всички скриптове от zipopro

Лъчезар Петров Лечев - 14 - Стара Загора - Уеб Програмист
Винчета, болчета гайкии...!
напиши eMail напиши лично съобщение виж профила на zipopro
Публикувано на: 06.08.2008 19:15
CBeTHaX
Ронин

Модератор

Мнения: (222)

Вие не сте ли чували за foreach ?


 
---------------------------
Потребител от: 07.01.07 | Всички уроци от CBeTHaX | Всички скриптове от CBeTHaX

http://www.ricari-bg.com
напиши eMail напиши лично съобщение виж профила на CBeTHaX
Публикувано на: 06.08.2008 21:00
bgspace
Самурай

Мнения: (80)

Май  само  ти  си  чувал  за  foreach() но  не знаеш за  какво  се  използва  . Да  ти обясня  за  какво се изпозва  и  да  си помислиш дали  е  удобно  в тоя случай  да бъде  изпозван :
foreach конструкцията работи само с масиви и ще изведе грешка, ако се опитате да я използвате върху променлива от друг тип или върху неинициализирана променлива. foreach  работи с копие от зададения масив, а не със самия масив. foreach има някои странични ефекти върху указателя на масива. Не разчитайте на указателя на масива по време или след изпълнението на foreach без да сте го изчистили изрично. Референцията между $value и последния елемент от масива остава дори и след приключването на цикъла foreach. foreach не поддържа възможността за подтискане на съобщения за грешка чрез използване на '@'.


 
---------------------------
Потребител от: 10.05.07 | Всички уроци от bgspace | Всички скриптове от bgspace
напиши eMail напиши лично съобщение виж профила на bgspace
 1 посетител чете тази тема (0 потребители и 1 гост)  
Активни потребители: ---
   





IT-PLACE.NET © 2004 - 2008