Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сместить данные на строку выше
 
 автор: predator   (17.08.2009 в 05:30)   письмо автору
 
 

Здравствуйте.
Столкнулся с вот такой проблемой:
допустим есть код

<?php
  $cb1 
=true;
  
$cb2 =true;
  
$cb3 =true;
  echo 
"
<table border=1>
<tr> 
<td> 1</td><td> "
.$cb1."</td>
</tr> 
<tr> 
<td> 2</td><td> "
.$cb2."</td>
</tr> 
<tr> 
<td> 3</td><td> "
.$cb3."</td>
</tr> 
</table>"
;
?>


есть необходимость при $cb1 =false; сместить данные из $cb2 и $cb3 на одну строку выше.

Рисовать в цикле <tr><td> </td><td> ".$cb."</td></tr> тоже не выход потому что работаю с word, а там сам черт ногу сломит(.
очень надеюсь на вашу помощь.

  Ответить  
 
 автор: sim5   (17.08.2009 в 09:31)   письмо автору
 
   для: predator   (17.08.2009 в 05:30)
 

<?php 
  $cb1 
=true
  
$cb2 =true
  
$cb3 =true
?> 
<table border=1> 
<?php
  
if($cb1) {
?>
<tr>  
<td> 1</td><td><?php echo $cb1?></td> 
</tr>
<?php
  
}
?>  
<tr>  
<td> 2</td><td><?php echo $cb2?></td> 
</tr>  
<tr>  
<td> 3</td><td><?php echo $cb3?></td> 
</tr>  
</table>"

  Ответить  
 
 автор: predator   (17.08.2009 в 14:04)   письмо автору
 
   для: sim5   (17.08.2009 в 09:31)
 

Спасибо!
Но это немного не то. Саму таблицу нужно оставить так как есть, смещать нужно только данные из переменных.
Я думаю мне нужно что-то вроде вот такова

 
<?php
$cb1 
=true
  
$cb2 =true
  
$cb3 =true

//здесь нужно занести все переменные равные true в массив. а затем выводить их как-нибудь $cb[$key]

  
echo 
<table border=1> 
<tr>  
<td> 1</td><td> "
.$cb[$key]."</td> 
</tr>  
<tr>  
<td> 2</td><td> "
.$cb[$key]."</td> 
</tr>  
<tr>  
<td> 3</td><td> "
.$cb[$key]."</td> 
</tr>  
</table>"

?>


но вот только как такое реализовать ума не приложу.. 4й дня с этим бьюсь

  Ответить  
 
 автор: sim5   (17.08.2009 в 14:10)   письмо автору
 
   для: predator   (17.08.2009 в 14:04)
 

Тогда объясните, что значит "сместить"? Если первая переменная не равна истине, то не выводится первая переменная, ее занимает вторая, вторую третья.... Что должно занимать третью строку в этом случае, если в таблице должно оставаться три строки?

  Ответить  
 
 автор: predator   (17.08.2009 в 14:18)   письмо автору
 
   для: sim5   (17.08.2009 в 14:10)
 

в таком случае третья строка должна остатся пустой

  Ответить  
 
 автор: Рома   (17.08.2009 в 14:22)   письмо автору
 
   для: predator   (17.08.2009 в 14:18)
 

А что вам даст пустая строка таблицы?

  Ответить  
 
 автор: predator   (17.08.2009 в 14:26)   письмо автору
 
   для: Рома   (17.08.2009 в 14:22)
 

что даст ?.. ничего не даст
просто есть утвержденная форма.. которую я к своему большому сожалению не могу изменять по своему усмотрению...

  Ответить  
 
 автор: Рома   (17.08.2009 в 14:27)   письмо автору
 
   для: predator   (17.08.2009 в 14:26)
 

сорри. не досмотрел

  Ответить  
 
 автор: predator   (17.08.2009 в 14:33)   письмо автору
 
   для: Рома   (17.08.2009 в 14:27)
 

Да в примере действительно не форма. Это условный пример, просто мне хотелось именно разобраться, возможно ли такое и если да то как.
реальный код я не хотел здесь выкладывать потому как писал выше что работаю с word (точнее с экспортом неких данных в него) а там как вы знаете очень много мусора и код почти не читаемый.
Простите если ввел кого-то в заблуждение.

  Ответить  
 
 автор: sim5   (17.08.2009 в 14:59)   письмо автору
 
   для: predator   (17.08.2009 в 14:33)
 

Форма ни как не должна быть, так как в случае перемещения переменных, нужно перемещать и элементы формы, иначе вы можете получать от одного и того же элемента формы разные данные. Но коли вам нужно оставить третью строку пустой, то:
<?
$cb1 
0
$cb2 12
$cb3 24
$td1 $cb1 $cb1 $cb2;
$td2 $cb1 $cb2 $cb3;
$td3 $cb1 $cb3 "&nbsp;";
  echo 
"
<table border=1> 
<tr>  
<td>1</td><td>"
.$td1."</td> 
</tr>  
<tr>  
<td>2</td><td>"
.$td2."</td> 
</tr>  
<tr>  
<td>3</td><td>"
.$td3."</td> 
</tr>  
</table>"
;

  Ответить  
 
 автор: neadekvat   (17.08.2009 в 14:18)   письмо автору
 
   для: predator   (17.08.2009 в 14:04)
 

<?php
if ($cb1 == true$cb[] = $cb1;
if (
$cb2 == true$cb[] = $cb2;
if (
$cb3 == true$cb[] = $cb3;
?>
<table border=1>  
<tr>   
<td> 1</td><td> <?=$cb[0]?></td>  
</tr>   
<tr>   
<td> 2</td><td><? if isset($cb[1]) echo $cb[1]; ?></td>  
</tr>   
<tr>   
<td> 3</td><td><? if isset($cb[2]) echo $cb[2]; ?></td>  
</tr>   
</table>

  Ответить  
 
 автор: ride   (17.08.2009 в 16:12)   письмо автору
 
   для: neadekvat   (17.08.2009 в 14:18)
 

или я не правильно понял сути вопроса или же:
ну так а почему рисовать в цикле черт ногу сломит?
в данном случает ведь проще получится с массивом:
1. собирате массив $cb
2. $n - это макс значение ваших 1,2,3
3.

<table>
<?php
   $i
=1;
  foreach(
$cb){
     echo
'<tr><td>'.$i.'</td><td>'.$val.'</td></tr>';
     
$i++;
  }
  for(
$j=$i;$j<=$n;$j++) echo '<tr><td>'.$j.'</td><td>&nbsp;</td></tr>'
?>
</table>

  Ответить  
 
 автор: predator   (17.08.2009 в 18:17)   письмо автору
 
   для: ride   (17.08.2009 в 16:12)
 

Давайте я попробую еще раз все объяснить ) с самого начало и расстановкой .

В общем на сайте есть страничка "генерация счета"
она содержит 16 полей и 5 "чекбоксов" (на данном этапе (в дальнейшем их чекбоксов может быть больше или же меньше))

каждый из этих чекбоксов соответствует некому платежу .... т.е. человек может отметить либо 1 из них любо 2 либо все 5 любо еще как угодно (за исключением не отметить ничего)
дальше я генерирую word - овский файл вот таким образом

<?
$fp 
fopen("nu_$filename.doc"'w+'); 
$str->_codepage 0x04E3;
$str "<html xmlns:v=urn:schemas-microsoft-com:vml
xmlns:o=urn:schemas-microsoft-com:office:office
xmlns:w=urn:schemas-microsoft-com:office:word

// дальше начинается таблица ПРИМЕРНО вот такова вида
<table>
<tr>
<td>Наменование платежа</td><td>сумма </td>
</tr>
<tr>
<td> Вступительный членский взнос</td><td> 
$_POST[chb1]</td>
</tr>
<tr>
<td>Ежегодный членский взнос</td><td> 
$_POST[chb2]</td>
</tr>
<tr>
<td> Свидетельство о повышении квалификации</td><td> 
$_POST[chb3]</td>
</tr>
<tr>
<td> Членский билет</td><td> 
$_POST[chb4]</td>
</tr>
<tr>
<td>Взнос для юридического лиц</td><td> 
$_POST[chb5]</td>
</tr>
</table>
"

fwrite($fp$str); 
fclose($fp);
?>


в данном примере отмечены ВСЕ 5 чекбокса и таблица выглядит правильно
------------------------------------------------------------------------------------
|наименование платежа | сумма |
------------------------------------------------------------------------------------
| Вступительный членский взнос | 123 |
------------------------------------------------------------------------------------
| Ежегодный членский взнос | 333 |
------------------------------------------------------------------------------------
| Свидетельство о повышении квалификации | 423 |
------------------------------------------------------------------------------------
| Членский билет | 345 |
------------------------------------------------------------------------------------
| Взнос для юридического лиц | 600 |
------------------------------------------------------------------------------------

А теперь человек НЕ отметил чекбокс 1 и 3 и таблица будет выглядеть вот так

------------------------------------------------------------------------------------
|наименование платежа | сумма |
------------------------------------------------------------------------------------
| | |
------------------------------------------------------------------------------------
| Ежегодный членский взнос | 333 |
------------------------------------------------------------------------------------
| | |
------------------------------------------------------------------------------------
| Членский билет | 345 |
------------------------------------------------------------------------------------
| Взнос для юридического лиц | 600 |
------------------------------------------------------------------------------------

А надо чтобы она выглядела вот так

------------------------------------------------------------------------------------
|наименование платежа | сумма |
------------------------------------------------------------------------------------
| Ежегодный членский взнос | 333 |
------------------------------------------------------------------------------------
| Членский билет | 345 |
------------------------------------------------------------------------------------
| Взнос для юридического лиц | 600 |
------------------------------------------------------------------------------------
| | |
------------------------------------------------------------------------------------
| | |
------------------------------------------------------------------------------------

  Ответить  
 
 автор: ride   (17.08.2009 в 18:57)   письмо автору
 
   для: predator   (17.08.2009 в 18:17)
 

ну вот смотрите
вот ваши чекбоксы
<input type='checkbox' value='Вступительный членский взнос' name='chb[]'>
<input type='checkbox' value='Ежегодный членский взнос' name='chb[]'>
<input type='checkbox' value='Свидетельство о повышении квалификации' name='chb[]'>
<input type='checkbox' value='Членский билет' name='chb[]'>
<input type='checkbox' value='Взнос для юридического лиц' name='chb[]'>

<?php
   $str
='<html xmlns:v=urn:schemas-microsoft-com:vml
xmlns:o=urn:schemas-microsoft-com:office:office
xmlns:w=urn:schemas-microsoft-com:office:word
<table>'
;
   
$n=5;
   
$i=1;
   
$cb=$_POST['chb'];
   foreach(
$cb){
     
$str.='<tr><td>'.$i.'</td><td>'.$val.'</td></tr>';
     
$i++;
  }
  for(
$j=$i;$j<=$n;$j++) $str.= '<tr><td>'.$j.'</td><td>&nbsp;</td></tr>'
  
$str.='</table>';
?>

Разве рез-т не такой как надо?

upd
упс, рез-т немного не такой как нужен, но, впринципе, близок
покажите свою форму.

  Ответить  
 
 автор: sim5   (18.08.2009 в 04:25)   письмо автору
 
   для: predator   (17.08.2009 в 18:17)
 

Вам не смещать поля надо, а выводить только те, которые отметил пользователь, вот и вся арифметика.

  Ответить  
 
 автор: predator   (19.08.2009 в 08:31)   письмо автору
 
   для: sim5   (18.08.2009 в 04:25)
 

да ! я с вами согласен так было бы проще и удобнее, но заказщик простит сделать так как я описал выше.

если ничего не получится придется так и сделать (

  Ответить  
 
 автор: Trianon   (18.08.2009 в 10:12)   письмо автору
 
   для: predator   (17.08.2009 в 18:17)
 

>дальше я генерирую word - овский файл вот таким образом

Где код, который выполняет эту генерацию?

  Ответить  
 
 автор: predator   (19.08.2009 в 08:27)   письмо автору
127.2 Кб
 
   для: Trianon   (18.08.2009 в 10:12)
 

вот он, в приложении

$_POST[chb1] это и есть мои чекбоксы

  Ответить  
 
 автор: Trianon   (19.08.2009 в 08:54)   письмо автору
 
   для: predator   (19.08.2009 в 08:27)
 

Ок.
Где код, которые генерировал тело строки $str в приложенном скрипте?
Собственно, где - не так уж интересно.
Но изменения нужно вносить именно в него.

  Ответить  
 
 автор: predator   (19.08.2009 в 09:33)   письмо автору
4.2 Кб
 
   для: Trianon   (19.08.2009 в 08:54)
 

наверное вот так...

  Ответить  
 
 автор: Trianon   (19.08.2009 в 09:41)   письмо автору
 
   для: predator   (19.08.2009 в 09:33)
 

<tr>
<td width=25%><b><NOBR>Ежегодный членский взнос (5 МРП)</b></td>
<td>&#160;&#160;<INPUT TYPE=checkbox NAME=chb2 VALUE=".$cb2." ".$CHECKEDchb2."> ".$cb2." тенге<br></td> 
</tr>

Очевидно, каждую из этих групп нужно ставить под условие существования переменной $CHECKEDchb

  Ответить  
 
 автор: predator   (19.08.2009 в 09:57)   письмо автору
 
   для: Trianon   (19.08.2009 в 09:41)
 

Гениально ! ))
Сейчас попробую!
похоже опять я все усложнил

  Ответить  
 
 автор: predator   (19.08.2009 в 16:36)   письмо автору
 
   для: predator   (19.08.2009 в 09:57)
 

Да все отлично работает ! )))
огромное спасибо всем кто уделил свое драгоценное время

а вот код который получился в итоге

<?php
    $CHECKEDchb1 
"CHECKED";
//  $CHECKEDchb2 = "CHECKED";
    
$CHECKEDchb3 "CHECKED";
    
$CHECKEDchb4 "CHECKED";
    
$CHECKEDchb5 "CHECKED";
 
 if (
$CHECKEDchb1)
 {
 
$echo_nam_plat[] = "Вступительный членский взноc"$echo_sum[] = "$cb1";
 }
   if (
$CHECKEDchb2)
 {
 
$echo_nam_plat[] = "Ежегодный членский взнос"$echo_sum[] = "$cb2";
 }
   if (
$CHECKEDchb3)
 {
 
$echo_nam_plat[] = "Свидетельство о повышении квалификации"$echo_sum[] = "$cb3";
 }
   if (
$CHECKEDchb4)
 {
 
$echo_nam_plat[] = "Членский билет"$echo_sum[] = "$cb4";
 }
   if (
$CHECKEDchb5)
 {
 
$echo_nam_plat[] = "Взнос для юридического лица";  $echo_sum[] = "$cb5";
 }
  echo 
"  
<table border=1>  
<tr>   
<td> 1</td><td> "
.$echo_nam_plat[0] ."</td>  <td> ".$echo_sum[0] ."</td>  
</tr> 
  <tr>   
<td> 2</td><td> "
.$echo_nam_plat[1]."</td>  <td> ".$echo_sum[1] ."</td>  
</tr> 
  <tr>   
<td> 3</td><td> "
.$echo_nam_plat[2]."</td>  <td> ".$echo_sum[2] ."</td>  
</tr>   
<tr>   
<td> 4</td><td> "
.$echo_nam_plat[3]."</td>  <td> ".$echo_sum[3] ."</td>  
</tr>  
<tr>   
<td> 5</td><td> "
.$echo_nam_plat[4]."</td>  <td> ".$echo_sum[4] ."</td>  
</tr>  
</table>"

?>


может кому-нибудь пригодится.

  Ответить  
 
 автор: sim5   (19.08.2009 в 16:49)   письмо автору
 
   для: predator   (19.08.2009 в 16:36)
 

Навряд ли пригодится, много лишнего. Кстати, что значит "CHECKED"? Кто и исходя из каких условий это устанавливает?

  Ответить  
 
 автор: predator   (19.08.2009 в 16:58)   письмо автору
 
   для: sim5   (19.08.2009 в 16:49)
 

CHECKED нужен для того чтобы в случае возникновения ошибок (когда пользователя возвращает снова на форму) отмеченные ранее чекбоксы оставались отмеченными


<INPUT TYPE=checkbox NAME=chb3 CHECKED>

  Ответить  
 
 автор: sim5   (19.08.2009 в 17:01)   письмо автору
 
   для: predator   (19.08.2009 в 16:58)
 

И где же проверка того, что пользователь отметил чекбоксы? Ваш код годится, если полей 3-4, на более он слишком громоздок.

  Ответить  
 
 автор: predator   (19.08.2009 в 17:09)   письмо автору
 
   для: sim5   (19.08.2009 в 17:01)
 

на счет того что громоздок я согласен, но к сожалению по другому пока не умею.
А проверка есть, просто здесь я ее не показал.

 if (!empty($_POST[chb1])) 
   {
    $CHECKEDchb1 = "CHECKED";
   }


и еще на счет громоздкости. Как сделать менее громоздко ? К примеру вот тот код который я выложил и наивно полагал что он кому-нибудь может пригодится.

  Ответить  
 
 автор: sim5   (19.08.2009 в 17:36)   письмо автору
 
   для: predator   (19.08.2009 в 17:09)
 

if ($_POST[chb1]) $CHECKEDchb1 = "CHECKED";

Вот у вас громозкость и начинается уже с проверки, то есть, проверку выше (исправленное), можно не проводить отдельно, так как это "лишний посредник", а чтобы сократить и написать компактный код, вы должны знать, что элементы формы, это массив, и тогда......

  Ответить  
 
 автор: predator   (19.08.2009 в 17:43)   письмо автору
 
   для: sim5   (19.08.2009 в 17:36)
 

Спасибо
все проверки я поправлю так как вы показали.
А на счет "элементы формы, это массив" подумаю и постараюсь понять что вы имели ввиду.

  Ответить  
 
 автор: Рома   (17.08.2009 в 14:21)   письмо автору
 
   для: predator   (17.08.2009 в 14:04)
 

У вас не получится "сместить", хотя бы по той причине, что таблица не динамическая, а статическая. Sim5 предложил же вам хороший вариант. Другими словами, конечной переменной вывода, должна быть не просто переменная, а переменная заключенная в ряд таблицы. Сам ряд и есть переменная - если обозначена, значит выводить ряд, если пуста...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования