[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не понимаю как работает этот код :(
Гость_Дмитрий
Ребят объясните пожалуйста как работает эта часть кода
Мне не понятно что храниться в переменной $delete

$delete = !empty($_POST['delete']) ? $_POST['delete'] : array();   

Если пусто, то я так понимаю пустой массив будет в $delete, если не пусто, то что тогда?


if(count($delete) > 0) // если $delete больше 0
{
$posts = unserialize(file_get_contents('data/'. $page));
// вытягиваем в пост содержимое из $page
// Ниже идет цикл

for($i = 0; $i < count($delete); ++$i)
{
// Когда номер поста совпадет со значением отмеченного чекбокса,
// заменяем его внутренности

Здесь тоже не совсем понятно :(

$posts[$delete[$i]]['name'] = '';
$posts[$delete[$i]]['mess'] = '';
}





Спустя 18 минут, 14 секунд (22.08.2012 - 16:04) Hello написал(а):
Тоже самое что
if ( !empty($_POST['delete']) ) {
$delete = $_POST['delete'];
} else {
$delete = array();
}

http://php.net/manual/ru/language.operators.comparison.php, раздел Тернарный оператор

Спустя 9 минут, 38 секунд (22.08.2012 - 16:13) dron4ik написал(а):
Цитата (Гость_Дмитрий @ 22.08.2012 - 13:45)
Ребят объясните пожалуйста как работает эта часть кода
Мне не понятно что храниться в переменной $delete

$delete = !empty($_POST['delete']) ? $_POST['delete'] : array();   

Если пусто, то я так понимаю пустой массив будет в $delete, если не пусто, то что тогда?

содержимое $_POST['delete']

Спустя 1 минута, 35 секунд (22.08.2012 - 16:15) Guest написал(а):
Цитата (Hello @ 22.08.2012 - 17:04)
Тоже самое что
if ( !empty($_POST['delete']) ) {
$delete = $_POST['delete'];
} else {
$delete = array();
}

http://php.net/manual/ru/language.operators.comparison.php, раздел Тернарный оператор

Я понял как работает тернарный оператор, мне не понятно что будет в $delete если там не пусто)

Спустя 12 минут, 16 секунд (22.08.2012 - 16:27) oleg_n написал(а):
Цитата (Guest @ 22.08.2012 - 17:15)
Я понял как работает тернарный оператор, мне не понятно что будет в $delete если там не пусто)

Если в $_POST['delete'] не пусто, значения передаются в $delete , а если пусто, то объявляется пустой массив.
$_POST['delete'] содержит те данные, которые были переданы из формы ( по идее подтверждение об удалении)

Проверка на пустоту идет для $_POST['delete'], а не для $delete wink.gif

Спустя 2 минуты, 35 секунд (22.08.2012 - 16:30) Guest написал(а):
Цитата (oleg_n @ 22.08.2012 - 17:27)
Цитата (Guest @ 22.08.2012 - 17:15)
Я понял как работает тернарный оператор, мне не понятно что будет в $delete если там не пусто)

Если в $_POST['delete'] не пусто, значения передаются в $delete , а если пусто, то объявляется пустой массив.
$_POST['delete'] содержит те данные, которые были переданы из формы ( по идее подтверждение об удалении)

Проверка на пустоту идет для $_POST['delete'], а не для $delete wink.gif

спасибо, теперь понятно(

Спустя 5 часов, 9 минут, 24 секунды (22.08.2012 - 21:39) Guest написал(а):
Смотрите как я понял этот код, если чет не так поправьте :)
if(count($delete) > 0) // если у нас есть 1-й комментарий то в $delete будет значение 1 , то есть 1 больше 0
{
$posts = unserialize(file_get_contents('data/'. $page));
// вытягиваем в пост содержимое из $page
// Ниже идет цикл

for($i = 0; $i < count($delete); ++$i)
// $i меньше $delete (то есть меньше 1, в $i попадает единица
{
// Когда номер поста совпадет со значением отмеченного чекбокса,
Совпадает в смысле $delete равен 1 и $i равен 1 то мы заменяем содержимое?
$posts[$delete[$i]]['name'] = '';
$posts[$delete[$i]]['mess'] = '';
}

Спустя 2 часа, 5 минут, 33 секунды (22.08.2012 - 23:45) Guest написал(а):
блин внизу вывожу через
echo count($delete); 

пишет 0
for($i = 0; $i < count($delete); ++$i)  

Здесь 0 меньше 0 ? (
что-то часть кода понимаю, часть нет, зациклился на этом моменте(

Спустя 5 часов, 45 минут, 10 секунд (23.08.2012 - 05:30) Tadochi написал(а):
echo var_dump($delete);

Спустя 1 час, 51 минута, 30 секунд (23.08.2012 - 07:21) Игорь_Vasinsky написал(а):
Цитата
Здесь 0 меньше 0 ? (

Цитата
for($i = 0; $i < count($delete); ++$i) 


здесь смысл не в этом)

задается стартовое значение $i=0
пока $i будет меньше count($delete) - $i будет увеличиваться с каждым шагом на 1 (++$i;)

соответственно - от этого и название такое - цикл, т.к. далее идущий код в {} - будет повторяться цикл за циклом - пока будет увеличиваться $i

Спустя 42 минуты, 52 секунды (23.08.2012 - 08:04) Guest написал(а):
а в $delete получается значение будет равно количеству элементов в массиве $_POST ?)
При выводе вар дампом у меня $delete 0 показывает)

Спустя 43 минуты, 10 секунд (23.08.2012 - 08:47) Игорь_Vasinsky написал(а):
Цитата
count($delete);


$delete - массив

Цитата
$delete = !empty($_POST['delete']) ? $_POST['delete'] : array(); 

Спустя 52 минуты, 45 секунд (23.08.2012 - 09:40) Guest написал(а):
Блин чет я вообще запутался, что будет находиться в массиве $delete если не пусто?
то есть 2 массива вложенных, $_POST (в котором данные из формы(количество элементов)) и $delete ?
Как будет выглядить массив $delete Внутри ?
Я что не вывожу вар дампом у меня там 0(

Спустя 22 минуты, 59 секунд (23.08.2012 - 10:03) m4a1fox написал(а):
Guest
Если не пусто, то $delete = array(), иначе $delete = $_POST['delete']

Спустя 7 минут, 14 секунд (23.08.2012 - 10:10) Guest написал(а):
а в $_POST['delete'] находятся данные из формы?

Спустя 1 минута, 7 секунд (23.08.2012 - 10:11) m4a1fox написал(а):
Guest
Откуда мне знать. Простите, кофе с утра не выпил, мои экстрасенсорные данные для прочтения информации с вашего монитора сейчас отключены.

Спустя 27 минут, 24 секунды (23.08.2012 - 10:39) Guest написал(а):
 $page   = !empty($_GET['page']) ? $_GET['page'] : 1;       
$delete = !empty($_POST['delete']) ? $_POST['delete'] : array();
$posts = array();
$file = dirScan('data');

/////////////////////////////////////////////////////////////////
// SCRIPT
// СКРИПТ

/////////////////////////////////////////////////////////////////

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

if(count($delete) > 0)
{
$posts = unserialize(file_get_contents('data/'. $page));
// Проходим циклом по массиву постов
for($i = 0; $i < count($delete); ++$i)
{
// Когда номер поста совпадет со значением отмеченного чекбокса,
// заменяем его внутренности

$posts[$delete[$i]]['name'] = '';
$posts[$delete[$i]]['mess'] = 'Удалено модератором';
}

file_put_contents('data/'. $page, serialize($posts));

// Перенаправляем браузер на текущую страницу
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] .'?page='. $page);
exit();
}
}


/////////////////////////////////////////////////////////////////
// VIEW
// ОТОБРАЖЕНИЕ

/////////////////////////////////////////////////////////////////

?>
<form action="" method="post">
<
div style="padding-left:50px">
<?php echo pageMenu($page, $file); ?>
</div>
<?php

if(file_exists('data/'. $page))
{

$posts = unserialize(file_get_contents('data/'. $page));

foreach($posts as $id => $post)
{
$date = $post['date'];
$name = htmlspecialchars($post['name']);
$mess = nl2br(bbTags(htmlspecialchars($post['mess'])));
?>
<div style="border:1px solid; width:70%; background-color:#66FFFF; min-height:100px; margin:5px; padding:5px">

<!--
Присвоим уникальные значения чекбоксам -->

<
input type="checkbox" name="delete[]" value="<?php echo $id; ?>" />
<?php echo $date; ?> / <strong><?php echo $name; ?></strong>
<
hr width="30%" align="left" />
<?php echo $mess; ?>
</div>
<?php
}
}

?>
<div style="padding-left:50px">
<?php echo pageMenu($page, $file); ?>
</div>

<
input name="ok" type="submit" value="Удалить" onclick="return confirm('Подумай!')"/>
</
form>

<?php


Вот часть кода, по учебнику с этого сайта)

Спустя 13 минут, 59 секунд (23.08.2012 - 10:53) Hello написал(а):
<!-- Присвоим уникальные значения чекбоксам --> 

<
input type="checkbox" name="delete[]" value="<?php echo $id; ?>" />

В $_POST['delete'] будет массив с отмеченными чекбоксами

Спустя 3 минуты, 51 секунда (23.08.2012 - 10:57) oleg_n написал(а):
В дополнение ответа Hello
С помощью foreach($posts as $id => $post), создается список с чекбоксами, значения которых потом попадают в $_POST['delete'] в виде массива, после нажатия кнопки "Удалить"

Спустя 1 час, 19 минут, 24 секунды (23.08.2012 - 12:16) Guest написал(а):
то есть когда отмечаю допустим 3 чекбокса и жму кнопку удалить то значения уходят в $_POST['delete']
и когда идет цикл

for($i = 0; $i < count($delete); ++$i)
{
// Когда номер поста совпадет со значением отмеченного чекбокса,
// заменяем его внутренности
$posts[$delete[$i]]['name'] = '';
$posts[$delete[$i]]['mess'] = 'Удалено модератором';
}

$i < 3 будет увеличиваться $i пока не будет равна 3-м

Я так понял? wink.gif

Спустя 8 минут, 45 секунд (23.08.2012 - 12:25) Guest написал(а):
то есть пока нету отмеченных чек боксов и не нажато удалить, то $delete будет равно пустому массиву, если мы отмечаем пару чек боксов и жмем удалить то уже будет не пустой массив он будет равен количеству чек боксов, и мы в цикле это количество прогоняем пока $i не будет равна количеству отмеченных чек боксов

какой ужс(

Спустя 1 час, 35 минут, 12 секунд (23.08.2012 - 14:00) oleg_n написал(а):
Guest
Все верно cool.gif
Почему же ужас? Таковы уж принципы программирования rolleyes.gif

Спустя 10 минут, 45 секунд (23.08.2012 - 14:11) Игорь_Vasinsky написал(а):
Цитата
Почему же ужас? Таковы уж принципы программирования

да ну))

а так?

Цитата
$delete = !empty($_POST['delete']) ? $_POST['delete'] : null; 



Спустя 11 минут, 41 секунда (23.08.2012 - 14:23) Guest написал(а):
спасибо всем за помощь, вроде бы как разобрался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.