Оптимизация проекта

Craftman

Новичок
Оптимизация проекта

У меня имеется следующий скрипт.
PHP:
echo '<tr bgcolor='.$inv.' >
   		 <td><font size="-5">'.$row['ces'].'</font>
   		 <td><font size="-5">'.$row['uzel'].'</font>
   		 <td><font size="-5">'.$row['istok'].'</font>
   		 <td><font size="-5">'.$row['name'].'</font>
   	 	 <td><font size="-5">'.$row['meropriat'].'</font>
   		 <td><font size="-5">'.$row['itvetst'].'</font>
   		 <td><font size="-5">'.$row['kontrol'].'</font>
   	 	 <td><font size="-5">'.$D.'</font>
         <td> '.$sost.'
   	 	 <td><A HREF="test.php?idtb_problem='.$row['idtb_problem'].'&idtb_cat='.$idtb_ceh.'"><IMG SRC="button_edit.png" border=0></A>
         <td><A HREF="dele.php?idtb_problem='.$row['idtb_problem'].'&idtb_cat='.$idtb_ceh.'"><IMG SRC="button_drop.png" border=0></A></tr>';
Последние два столбца являются ссылками на скрипты выполняющими функйии стирания и удоления строки. Вопрос соостоит в следующем: Возможно ли сделать так что бы эти ссылки вызывали описанные заранее функции. Нужно мне это для того что бы сократить число файлов в проекте.
 

Mozart

Новичок
Довольно-таки частое решение..
href=index.php?action=edit&idtb_problem... bla bla

И так проверяешь
if ($_GET['action'] == edit){bla bla}
 

dvp

Новичок
сделай один файл action.php и добавляй ему параметр выполняемого действия.
Например:

action.php?action=delete&idtb_problem='.$row['idtb_problem'].'&....

А внутри файла сделать switch параметра action по всем функциям

-~{}~ 01.09.05 15:21:

А вообще-то лично я считаю плохим тоном делать ссылки через <a> на страницы, выполяющие какие-то действия типа удаления или обновления данных.
Почему? Потому что эти ссылки остаются в кэше открытых адресов браузера. Что в этом плохого? Ничего, если это удаление строки из БД по её ключу (id), но если это например удаление 10 последних строк, то крайне неприятно нечаянно из кэша выбрать такую ссылку.

Я в таких случаях делаю <form method="post">...
 

dvp

Новичок
Ок. Предположим есть файл action.php, который при вызове

action.php?action=insert&what=dogs

добавляет запись о собаке в таблицу базы данных.

Если где-то будет тавкая ссылка на это действие:

<a href="action.php?action=insert&what=dog">Добавить собаку</a>

то после прохождения по ней, она запомнится в браузере в списке посещённых страниц. Когда вы в следующий раз будете открывать этот сайт, вы (и я тоже) можете ненароком выбрать из списка предлагаемых браузером посещённых адресов именно этот и добавите ненужную собаку.

а вот если вы вместо этой ссылки будуте делать форму
Код:
<form action="action.php" method="post">
  <input type="hidden" name="action" value="insert" />
  <input type="hidden" name="what" value="dog" />
  <input type="submit" value="Добавить собаку" />
</form>
То адрес файла action.php нигде не будет запомнен

-~{}~ 01.09.05 20:31:

Автор оригинала: Panchous
а это как?
а например так:
[SQL]DELETE FROM tbl
ORDER BY add_date DESC
LIMIT 10;[/SQL]
:)
 

Dreammaker

***=Ф=***
Кстати для варианта с ссылками:

index.php?action=delete&id=12

PHP:
<?php

function delete(){
    echo "удалили";
    ;}

$action=(isset($_GET['action']))?$_GET['action']:'';

IF  (function_exists($action))
      $action();
ELSE  
     echo "функции нет";

?>

id в функцию передавать по вкусу... :)
 

SiMM

Новичок
> IF (function_exists($action))
что позволит вызывать ЛЮБУЮ функцию, имеющуюся в программе. Короче, код небезопасен.
 

Craftman

Новичок
dvp
Вариант с POST не катит. Ты же видишь что в приведенном мной фрагменте скрипта выводится таблица. В последних столбцах которой выводятся картинки, которые в свою очередь являются ссылками на другие скрипты. Один из них удаляет запись из БД, другой позволяет редактировать а третий меняет одно поле в строке на противоположное (выполнение задачи если 0 задача выполнена если еденица выполняется). Вот я и хочу собрать эти три скрипта в один файл.
 

Alive4U

Новичок
Так чем тебя POST не устраивает?
Для каждой картинки делаешь свою форму, а картинку ставишь тегом <button type="image" ...>
 

ksnk

прохожий
Возможно будет полезным посмотреть на манагер один. До полного понимания и осмысления подражать ему не стоит, но пристального изучения сей скрипт достоин!!!
phpRemoteView - файловый менеджер, сделанный в технике, "все в одном флаконе":
* Free download from http://php.spb.ru/remview/
* (c) Dmitry Borodin, [email protected], http://php.spb.ru
 

Фанат

oncle terrible
Команда форума
ksnk
совсем ты не в тему привёл эту ссылку

-~{}~ 02.09.05 09:57:

Craftman
пойми одну простую вещь.
на твой примитивный вопрос про собрать всё в один файл ДАВНО УЖЕ ответили.
и забыли.
и обсуждают другой вопрос.
который, надо признать тебе пока не по силам.

то, что тебе надо, делается с помощью оператора IF
тебе знаком такой оператор?

Вот, смотри, как реализуется ЧАСТЬ того, что тебе надо.
никаких функций здесь не нужно.
больше того - функцию РЕДАКТИРОВАНИЯ написать НЕВОЗМОЖНО. Поскольку редактирование состоит из НЕСКОЛЬКИХ этапов. Ты хоть это понимаешь?
PHP:
<? 
mysql_connect();
mysql_select_db("new");
$table="test";
if($_SERVER['REQUEST_METHOD']=='POST') { 
  if ($id=intval($_POST['id'])) {
    $query="UPDATE $table SET name='".mysql_real_escape_string($_POST['name'])."' WHERE id=$id";
  } else {
    $query="INSERT INTO $table SET name='".mysql_real_escape_string($_POST['name'])."'";
  }
  mysql_query($query);
  header("Location: [url]http://[/url]".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); 
  exit; 
} 
if (!isset($_GET['id'])) { 
  $LIST=array();
  $query="SELECT * FROM $table"; 
  $res=mysql_query($query);
  while($row=mysql_fetch_assoc($res)) $LIST[]=$row;
  include 'list.php';
} else { 
  if ($id=intval($_GET['id'])) {
    $query="SELECT * FROM $table WHERE id=$id"; 
    $res=mysql_query($query);
    $row=mysql_fetch_assoc($res);
    foreach ($row as $k => $v) $row[$k]=htmlspecialchars($v);
  } else {
    $row['name']='';
    $row['id']=0;
  }
  include 'form.php';
} 
?>

form.php
<form method="POST">
<input type="text" name="name" value="<?=$row['name']?>"><br>
<input type="hidden" name="id" value="<?=$row['id']?>">
<input type="submit"><br>
<a href="?">Return to the list</a>
</form>

list.php
<a href="?id=0">Add item</a>
<? foreach ($LIST as $row): ?>
<li><a href="?id=<?=$row['id']?>"><?=$row['name']?></a>
<? endforeach ?>
Здесь есть добавление (про него ты почему-то забыл) и редактирование.
удаления здесь нет. и изменения статуса - тоже.
делаются эти вещи так, как сказали тебе выше - формочками с кнопками пост, плюс - в обработчике, с помощью оператора IF, ты обрабатываешь свои кнопки.
Начинает доходить?
 

Dreammaker

***=Ф=***
Автор оригинала: SiMM
> IF (function_exists($action))
что позволит вызывать ЛЮБУЮ функцию, имеющуюся в программе. Короче, код небезопасен.
почти оффтопик (человеку Фанат, в свойственной ему манере уже почти всё объяснил, но для себя тоже интересно):

А если такой вариант:
PHP:
$ActArray = array( 1 => 'edit', 2 => 'delete', 3 => 'insert' );

IF  
  (isset($_GET['action']))  { 
          IF  (in_array($_GET[action]),$ActArray) 
               {$action=$_GET[action]; $action();
          }
ELSE   {
               echo "функции нет";
 

dvp

Новичок
А не проще так?
PHP:
if (array_key_exists('action', $_GET)) {
  switch ($_GET['action']) {
    case 'delete':
      // ... some delete
      break;
    case 'insert':
      // ... some insert
      break;
    case 'edit':
      // ... some edit
  }
}
И функций никаких создавать не обязательно и выпендрёжи поменьше :)
 

Фанат

oncle terrible
Команда форума
if (array_key_exists('action', $action)) {
$action = $_GET['action'];
а это-то зачем?
почему нельзя сразу сделать switch ($_GET['action'])?

И вообще - при чём тут гет? Решили же уже, что гет вреден.

-~{}~ 02.09.05 20:28:

Dreammaker
оффтопик-не оффтопик, но по моему мнеию тут функции вообще не нужны никакие, а тем более - переменные.

однако вариант с переменными функциями красивее кейса.
 

dvp

Новичок
Автор оригинала: Фанат
а это-то зачем?
почему нельзя сразу сделать switch ($_GET['action'])?

И вообще - при чём тут гет? Решили же уже, что гет вреден.

-~{}~ 02.09.05 20:28:
Нельзя сделать срузу switch без array_key_exists потому что ключа может не быть в массиве, а вот GET действительно не при чём. POST нужен
 

Фанат

oncle terrible
Команда форума
а при чём здесь вообще массив, если у вас используется СВИТЧ?
выберите что-нибудь одно и не плодите бесполезные конструкции.
 
Сверху