Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie do bazy - DELETE FROM xxx WHERE ID
Forum PHP.pl > Forum > PHP
Marusz
Chcac brnac dalej w tajniki php i MySQL, natrafilem na kolejny klopot - tym razem w logach pusto. Stworzylem linka:
Kod
echo "<a href='$PHP_SELF?action=delete_record&row=$row[3]'>skasuj</a><br>";

i potem funkcje:
Kod
function delete_record() {

$roz_del_db = "DELETE FROM adresy WHERE ID = $_GET[row]";

$rezultat = mysql_query($roz_del_db);

}

No i gdy klikam na linka, przegladarka dobrze go rozpoznaje (w zaleznosci od ID wpisu): http://serwer/php/baza.php?action=delete_record&row=31 ale nic sie nie kasuje. W logach, jak wspomnialem na wstepie, cisza. Gdzie jest problem? Powiem tylko, ze napisalem sobie to na podstawie ksiazki i kurcze nie wychodzi sad.gif
DeyV
zrób tak:
[php:1:c0de10c95f]<?php
$pyt = "DELETE FROM adresy WHERE ID = $_GET[row] ";
$rezultat = mysql_query($pyt) or die ("Błąd w pytaniu $pyt);
?>[/php:1:c0de10c95f]
Jeżeli się wyświetli błąd, wrzuć otrzymane zapytanie do PHPmyAdmin i zobacz, co się stanie.
I jeszcze cos - przed wprowadzeniem danych do zapytania, należy je choć odrobinę skontrolować, choćby [php:1:c0de10c95f]<?php
$row= addslashes($_GET[row] );
?>[/php:1:c0de10c95f]
Marusz
No i kurcze nie dziala. Wkleje calosc jaka mam:
[php:1:d7bab28120]<?
$wynik = mysql_query("SELECT * FROM adresy ORDER BY $sort_b");

while($row = mysql_fetch_row($wynik)) {
echo "uin: " . $row[3] . "<br>";
echo "imie: " . $row[0] . "<br>";
echo "nazwisko: " . $row[1] . "<br>";
echo "<b>numer gg: </b>" . $row[2] . "<br>";
global $PHP_SELF;
echo "<a href='$PHP_SELF?action=delete_record&row=$row[3]'>skasuj</a><br>";
echo "<br>";
}

function delete_record() {

$pyt = "DELETE FROM adresy WHERE ID = $_GET[row] ";
$rezultat = mysql_query($pyt) or die ("Błąd w pytaniu $pyt");

}

?>[/php:1:d7bab28120]

Tak to wyglada po modyfikacji zrobionej przez Ciebie. Dalej nie wywala nigdzie bledu, wszystko niby OK, a rekord nadal istnieje...
DeyV
A ... to bedzie nieco idiotyczne pytanie - gdzie wywołujesz, uruchamiasz ta funkcję? Bo w podanym przez Ciebie kodzie brakuje zapisu typu :
[php:1:bdb2f9a9d0]<?php
if ($_REQUEST['action'] == 'delete_record'){
delete_record()
}
?>[/php:1:bdb2f9a9d0]
Fo
a zerznales poprostu przez copy/paste to co napisal DeyV ? bo tutaj --> [php:1:b0a46b1214]<?php
$pyt = "DELETE FROM adresy WHERE ID = $_GET[row] ";
$rezultat = mysql_query($pyt) or die ("Błąd w pytaniu $pyt);
?>
[/php:1:b0a46b1214] chyba brakuje jednego -->"<-- koncowka powinna byc taka chyba [php:1:b0a46b1214]$rezultat = mysql_query($pyt) or die ("Błąd w pytaniu $pyt"); [/php:1:b0a46b1214]

heh a wlasnie gdzie masz wywolanie do funkcji ktora usuwa questionmark.gif
Marusz
Nie. nie zerznalem (to nie w moim stylu) winksmiley.jpg A co do
Cytat
heh a wlasnie gdzie masz wywolanie do funkcji ktora usuwa questionmark.gif

Chyba nie rozumiem. Generalnie zrobilem teraz tak:

[php:1:df4887cf92]<?php
while($row = mysql_fetch_row($wynik)) {
echo "uin: " . $row[3] . "<br>";
echo "imie: " . $row[0] . "<br>";
echo "nazwisko: " . $row[1] . "<br>";
echo "<b>numer gg: </b>" . $row[2] . "<br>";
global $PHP_SELF;
echo "<a href='$PHP_SELF?action=delete_record&row=$row[3]'>skasuj</a><br>";
echo "<br>";
}

if ($_REQUEST['action'] == 'delete_record'){
delete_record()
}

function delete_record() {

$pyt = "DELETE FROM adresy WHERE ID = $_GET[row] ";
$rezultat = mysql_query($pyt) or die ("Błąd w pytaniu $pyt");

}
?>[/php:1:df4887cf92]
No i dalej nie dziala. I tak jak mowilem wczesniej: nie wyskakuje w ogole blad ani nic.
kurtz
Cytat
No i dalej nie dziala. I tak jak mowilem wczesniej: nie wyskakuje w ogole blad ani nic.
troszke dziwne ale:
1) dodaj echo $pyt; przed wykonaniem.
2) dodaj na koniec pliku echo mysql_error();

tak czy siak cosik na oko tutaj nie gra..


pozdrawiam
Marusz
Ha, niezly numer! Oczywiscie zrobilem wszystko co mi kazaliscie... i cos sie ruszylo. Kod obecnie wyglada tak:
[php:1:34e9579a9e]<?php
if ($_REQUEST["action"] == "delete_record"){
delete_record();
}

function delete_record() {

$pyt = "DELETE FROM adresy WHERE ID = $_GET[row] ";
$rezultat = mysql_query($pyt) or die ("Błąd w pytaniu $pyt");

}
?>[/php:1:34e9579a9e]
Jak "latwo" zauwazyc, pozmienialem z apostrofow na cudzyslowy w regule $_REQUEST. I dziala! Ale! Aby skasowac jakikolwiek rekord, musze klikac na linka skasuj po 2 razy! Dlaczego?
[fisher]
[php:1:cfbe37b4d9]<?php
function delete_record() {

global $_GET[row];

$pyt = "DELETE FROM adresy WHERE ID = $_GET[row] ";
$rezultat = mysql_query($pyt) or die ("Błąd w pytaniu $pyt");
}
?>[/php:1:cfbe37b4d9]

nie wnikalem zbytnio, ale widze brak global'a w funkcji, wiec moze tak pojdzie ... ?
Wankster
Cytat
[..]You don't need to do a global $_GET; to access it within functions or methods, as you do with $HTTP_GET_VARS.[..]


[php:1:db98c5549f]<?php

if ( $_REQUEST["action"] == "delete_record" )
{
delete_record();
}

function delete_record() {
$pyt = mysql_query( "DELETE FROM adresy WHERE ID = " . $_GET['row'] ) or die( mysql_error() );
}

?>[/php:1:db98c5549f]

A tak?
KaMeLeOn
Cytat
"][php:1:97406cae9b]<?php
[...]
global $_GET[row];
[...]
?>[/php:1:97406cae9b]
nie wnikalem zbytnio, ale widze brak global'a w funkcji, wiec moze tak pojdzie ... ?

No Ty chyba żartowałeś... biggrin.gif
global dla tablicy $_GET :?:
[fisher]
Cytat
No Ty chyba żartowałeś...  :D  
global dla tablicy $_GET  :?:


fakt, wymsknelo mnie sie smile.gif


zdrovka zycze
Marusz
[php:1:912fb3bbb4]<?php

if($_GET["action"] == "del"){
delete_record();
}

function delete_record() {

$pyt = "DELETE FROM adresy WHERE ID = $_GET[row]";
$rezultat = mysql_query($pyt);
}

$wynik = mysql_query("SELECT * FROM adresy ORDER BY $sort_b");

while($row = mysql_fetch_row($wynik)) {
echo "uin: " . $row[3] . "<br>";
echo "imie: " . $row[0] . "<br>";
echo "nazwisko: " . $row[1] . "<br>";
echo "<b>numer gg: </b>" . $row[2] . "<br>";
global $PHP_SELF;
echo "<a href='$PHP_SELF?action=del&row=$row[3]'>skasuj</a><br>";
echo "<br>";
}

?>[/php:1:912fb3bbb4]
Przeczytalem wszystkie Wasze porady i napisalem sobie takie cos, co widzicie powyzej, i... dziala! biggrin.gif Dzieki za pomoc!
DeyV
Jedna uwaga - przydatna na przyszłość.
Jeżeli zamieżasz korzystać z jakiejś funkcji, to dobrym nawykiem jest jej zdefiniowanie przed użyciem.
W php 4 nie ma to znaczenia, ale w innych jezykach, (również w php 5) inaczej może nie zadziałać.
Marusz
Czy w ostatnim listingu ktory wkleilem zrobilem dobrze? Bo napisalem funkcje wyzej niz kod ktory owa funkcje wywoluje smile.gif Mam jeszcze ostatnie pytanie do tego watku. W petli wyciagajacej dane z bazy mysql zrobilem sobie:
[php:1:d8c72ba74b]<?php

echo "<b>numer gg: </b>" . "$gg";

?>[/php:1:d8c72ba74b]
i zdefiniowalem wyzej:
[php:1:d8c72ba74b]<?php

$gg = "<a href="gg:" . $row[2] . ""><img src="http://www.gadu-gadu.pl/users/status.asp?id=" . $row[2] . "" alt="Status GG" align="absmiddle" width="16" height="16" hspace="3" border="0"></a>";

?>[/php:1:d8c72ba74b]

wszystko by bylo dobrze, gdyby nie fakt, ze zmienna $gg musze wsadzic rowniez do petli, a nie gdzies w stopce strony - dlaczego tak sie dzieje? Jesli wstawie gdzies wyzej, to zamiast numerka, pojawia sie $row[2]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.