LINUX.ORG.RU

кнопка удаление записей из таблицы PostgreSQL на php


0

1

Прописываю вот так

<?php while ($row = pg_fetch_row($get_db)) { ?>
   <tr >
       <td> <?php echo "$row[1]"; ?></td> 
       <td> <?php echo "$row[0]"; ?></td>
       <td>
          <form name="editWish" action="test.php" method="POST">
             <input type="submit" name="edittphp" value="Улалить">
             <?php 
              $tphp = $row[0];
          // echo "$tphp";
              $dell_db = pg_query($db, "DELETE FROM test_php WHERE t_php =  $row[0]");
               ?>
         </form>
      </td>
   </tr>
   <?php } ?>

переменная получает нужное зачение по моей логике она должа удалять строку из бд согласно получнному значению. Одако так не происходит удаляется сразу все и функция добавления перестаёт корректно работать.

Если я закоментирую строки

 $dell_db = pg_query($db, "DELETE FROM test_php WHERE t_php =  $row[0]");

то функция добавления работает отлично.

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

Заранее Спасибо.

ну будет N кнопок «edittphp». Как они будут обрабатываться? никак. Во всяком случае кода обработки здесь нет.

Hint: сделайте одну кнопку, и обработку этой кнопки. Потом делайте таблицу с N кнопками. А не наоборот.

drBatty ★★
()
Ответ на: комментарий от ilovewindows

то есть необходимо в той же таблице сделаь еще один while попробую потом отпишу

Огромное Спасибо

saidmir
() автор топика
Ответ на: комментарий от saidmir

Нужен еще один скрипт, который будет Вызван по нажатию кнопки. Ему надо передать в параметре уникальный номер записи для удаления.

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows

вроде ясно

Делаю вот так

test.php

<td>
   <form name="delWish" action="test.php" method="GET">
     <input type="button" value="Удалить" onclick="location.href='http://localhost/PhpProject1/remove.php?id=<?=$row[0]?>'" />
  </form>
</td>

remove.php

<?php
if (!empty($_GET['id'])) {
	if(pg_query($db, "DELETE FROM test_php WHERE t_php =  " . $_GET['id'])) {
		header('Location: /test.php');
	} else {
		print "Can't remove row\n";
                $a=$_GET['id'];
                echo "$a";
	}
}
?>

форма выглядит как надо но при нажатии кнопки у первой записи происходит следующее

Can't remove row 1

если поставить вот так

if(pg_query($db, "DELETE FROM test_php WHERE t_php =  " . (int)$_GET['id']))

не чего не изменяется

saidmir
() автор топика
Ответ на: комментарий от saidmir

Строчек соединения к базе в remove.php нет.

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

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows

Срединение с бд есть но все равно не удаляет

<?php

$db = pg_connect("host=localhost dbname=list user=saidmir password=123") or die('Could not connect: ' . pg_last_error());
echo pg_dbname($db);

if (!empty($_GET['id'])) {
    //$temp = pg_query($db, "DELETE FROM test_php WHERE t_php =  " . $_GET['id']);
	if(pg_query($db, "DELETE FROM test_php WHERE t_php =  " . $_GET['id'])) {
		header('Location: /test.php');
	} else {
            $temp = pg_query($db, "DELETE FROM test_php WHERE t_php =  " . $_GET['id']);
            echo "$temp";
		print "Can't remove row\n";
                $a=$_GET['id'];
                echo "$a";
                
	}
}
?>

выводит на экран

list Can't remove row 1 

где list имя бд

saidmir
() автор топика
Ответ на: комментарий от saidmir
if(pg_query($db, "DELETE FROM test_php WHERE t_php =  " . $_GET['id'])) {

Ну и про sql-инъекции не забываем.

udhv
()
Ответ на: комментарий от udhv

Спасибо вроде разобрался

все работает как нужно

осталось только правку делать научиться, но для начала попробую сам разойтись если не получиться то тему создам

Еще раз огромное спасибо!!!

saidmir
() автор топика
Ответ на: комментарий от saidmir

Плохо разобрался, давай я тебя в более правильное русло лучше направлю сразу

<?php
if (isset($_REQUEST['id']) && is_numeric($_REQUEST['id']) && $_REQUEST['id'] > 0) {
 if (isset($_REQUEST['sub']) && $_REQUEST['sub']=='remove') {
     echo 'Deleting row ['.$_GET['id'].'], resutl: '.pg_query($db, "DELETE FROM test_php WHERE t_php =  $row[0]").';<br />';
 } elseif (isset($_REQUEST['sub']) && $_REQUEST['sub']=='edit') {
   //  тут форма редактирования с каким-нибудь <input type="hidden" name="id" value="$_GET['id']"> и hidden name="sub" value="save"
 } elseif (isset($_REQUEST['sub']) && $_REQUEST['sub']=='save') {
   //  фильтруешь пришедшую форму из предыдущего блока и сохраняешь.
 }
}

while ($row = pg_fetch_row($get_db)) { ?>
   <tr >
       <td> <?php echo "$row[1]"; ?></td> 
       <td> <?php echo "$row[0]"; ?></td>
       <td>
          <form name="editWish" action="test.php" method="POST">
             <input type="radio" name="sub" value="edit" /> Изменить<br/>
             <input type="radio" name="sub" value="remove" /> Удалить<br />
             <input type="hidden" name="id" value="<?=$row[0];?>" />
             <input type="submit" name="edittphp" value="Сделать хорошо">
         </form>
      </td>
   </tr>
   <?php } ?>

Хотя кнопки удалить и изменить я бы сделал просто ссылками, зачем их передавать формой? не так красиво.

<a href="test.php?id=<?=$row[0];?>&sub=remove">Удалить</a>
<a href="test.php?id=<?=$row[0];?>&sub=edit">Изменить</a>
можно иконками сделать и т.д.

Суть какая: нет яваскриптовых редиректов, нет лишнего файла, гораздо меньше мест, где можно накосячить.

В нижнем блоке вайл ты ничего не делаешь, только печатаешь 2 ссылки. Когда ты идешь по одной из них - выполняется верхний блок ифов, так как у тебя в ссылках есть айди и действие (саб) и в зависимости от их комбинаций либо размещается форма редактирования, либо удаляется запись. После чего вполне успешно печатаются строчки.

Само собой, получать строки ты должен после блока ифов, так как если ты их удалял или изменял - этих изменений в ресурсе, полученном раньше их выполнения не будет. Получай их непосредственно перед вайлом.

BaBL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.