smazání tabulky

CHtěl bych smazat všechny záznamy vložené registrovaným uživatelem kromě toho posledního, vymyslel jsem to takhle:

<?

if (isset($_POST[submit]))

{

require_once(pripoj.php');

$select = mysql_query("SELECT * FROM info WHERE login = '$_SESSION[login]' order by desc limit 1");
$count = mysql_fetch_assoc($select);
$lastid = $count[id];
// vyberu poslední ID uloženého příspěvku


$detete = ("DELETE FROM tabulka WHERE id < $lastid and login = '$_SESSION[login]'");
// smažu

}
?>

<body>
<form method=post action="stranka.php">
<input type=submit name=submit value=smaž>
</form>
</body>



jenže to neprovede píše mi to:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/r/rhea/bla/bla.php on line 10
mysql_error();
<HTML>>>order by desc limit 1
Tady chybí, podle čeho se to má řadit.</HTML>
mno vidíš to...ani jsem si nevšiml...opraveno ale i tak to nefunguje...

když dám echo $lastid; tak mi to nejde správný ID ale nesmaže to:( není možný že $lastid bere sice z tabulky číslo ale prezentuje ho jako string?
$detete = ("DELETE FROM tabulka WHERE (id < '$lastid') AND (login like '$_SESSION[login])'");
4-b.xf.cz (4-b.xf.cz)
apostrof na konci a davas pole do retezce a to nelze jen tak:
$detete = ("DELETE FROM tabulka WHERE (id < '$lastid') AND (login like '$_SESSION[login]===>)'<===");

$detete = ("DELETE FROM tabulka WHERE (id < '$lastid') AND (login LIKE '".$_SESSION[login]."')");
mysql_query($delete) or die($dotaz."<hr>".mysql_error());
je to divný ale nejde to...


<?


if (isset($_POST[submit]))

{

$login = "homeworld";
$chyba = null;

require_once('DB_mysql_connect.php');

$select = mysql_query("SELECT * FROM tabulka WHERE (login = '".$login."') order by ID desc limit 1");
$count = mysql_fetch_row($select);
$lastid = $count[0];

if ($select)

{
$detete = ("DELETE FROM tabulka WHERE (id < '$lastid') AND (login LIKE '".$login."')"); mysql_query($delete) or die($dotaz."<hr>".mysql_error());
}
else
{
$chyba .= "chyba";
}
}
?>

<body>
<form method=post action="stranka.php">
<input type=submit name=submit value=smaž>
</form>
</body>



trošku jsem to upravil...nick už nebere ze session ale z proměnný, je to abych se nemusel pořád přihlašovat..oveřuju i select a všechno je v pohodě ale mysql_erorr u DELETE napíše se:

Query was empty

echo $lastid; pořád funguje ale prostě asi těch 70 záznam nechce z tabulky smazat, název tabulky je taky správně a action formuláře je názec stránky a nejde to:(
clovek kouka a clovek se hrozi :)

prvni radek budes mit:
error_reporting(E_ALL); //chyby = on

hned pod nim by mel byt asi include, ktery obsahuje pripojeni na mysql a start session (teda jestli session pouzivas)

echo "xxx = ".$_POST[submit];
vsadim se, ze tohle krici chyby
$_POST['submit']

if (isset($_POST[submit]))
{}
else {echo "neni POST"}

$chyba = null;
? $chyba = "";
(ja teda davam chyby do pole a na zaver udelam pole.implode("\n"), ale detail)

$select = mysql_query("SELECT * FROM tabulka WHERE (login = '".$login."') order by ID desc limit 1");
tady by to chtelo videt strukturu tabulky. Domnivam se, ze ID s velymi pismeny by to mohlo ignorovat, zjisti se takto (sql prikazy pisi velkymi pismeny, ale tez detail, ktery nema na nic vliv):
$dotaz = "SELECT * FROM tabulka WHERE login = '$login' ORDER BY ID DESC LIMIT 1";
$select = mysql_query($dotaz) or die("chyba prvni SQL".$dotaz."<hr>".mysql_error());
(opet klasicky DIE retezec a vypis SQL chybu)
(opet rikam, muze to bit dobre, ale jestlize neni, vypise se cely SQL dotaz a v nem pak vidiz, ze treba v $login neni nic)

$count = mysql_fetch_row($select);
nemuzes delat fetch_row, kdyz je tam chyba. Resp ted si nejsem jist, ja vse ladim s tim error_reporting a die, takze to pri chybe zastavi script (die a to error... pak u funkcni verze nezapomen zakomentovat)

$chyba .= "chyba";
...
echo $chyba mas kde?

$detete = ("DELETE FROM tabulka WHERE (id < '$lastid') AND (login LIKE '".$login."')"); mysql_query($delete) or die($dotaz."<hr>".mysql_error());
To je vsechno skvele, ale ty pises or die($dotaz) a pritom dotaz mas v $delete. Takze si to ujasni a bud $delete zmen na $dotaz nebo u DIE 4dotaz na $delete, aby se ti zobrazilo, co se tam vlastne dela.

Dale bych doporucoval zobrazit si z principu kazdy dotaz:

echo $dotaz;
mysql_query($dotaz) or die("chyba prvni ...")

$detete = ("DELETE FROM tabulka WHERE (id < '$lastid') AND (login LIKE ..."
echo $delete;
mysql_query($delete) ...

input type=submit name=submit
to muze a nemusi odeslat hodnotu v submit. stavajici verze lepsich prohlizecu odesilaji. Starsi verze nekdy ano, jindy ne.
já už jsem fakt zoufalej pořád to nejde i když jsem to přepsal podle tebe:


nejdřív jsem zkusil tohle:

--------------------------------------------------------------------------------
<?
if (isset($_POST['odesli']))
{
include('connect.php');

$login = "homeworld";

$dotaz = ("SELECT * FROM tabulka WHERE login = '$login' ORDER BY ID DESC LIMIT 1");
$dotaz_select = mysql_query($dotaz) or die("chyba prvni SQL".$dotaz."<hr>".mysql_error());

$row = mysql_fetch_row($dotaz_select);
$cislo = $row[0];

echo $cislo;
}
?>

<body>
<form method=post action="stranka.php">
<input type=submit name=odesli value=smaž>
</form>
</body>

--------------------------------------------------------------------------------
vepsalo mi to správně 99 což je poslední ID který chci najít

pokud však vypíšu delete:
--------------------------------------------------------------------------------
<?
if (isset($_POST['odesli']))
{
include('connect.php');

$login = "homeworld";

$dotaz = ("SELECT * FROM tabulka WHERE login = '$login' ORDER BY ID DESC LIMIT 1");
$dotaz_select = mysql_query($dotaz) or die("chyba prvni SQL".$dotaz."<hr>".mysql_error());

$row = mysql_fetch_row($dotaz_select);
$cislo = $row[0];

$detete = ("DELETE FROM tabulka WHERE (ID < '".$cislo."') AND (login LIKE '".$login."')");
mysql_query($delete) or die($dotaz."<hr>".mysql_error());



}

?>

<body>
<form method=post action="stranka.php">
<input type=submit name=odesli value=smaž>
</form>
</body>

--------------------------------------------------------------------------------
vepsalo to tuhle chybu:


SELECT * FROM info WHERE login = 'Apostol' ORDER BY ID DESC LIMIT 1
--------------------------------------------------------------------------------
Query was empty


p.s. samozřejmě ve scriptu je správný název tabulky
homeworld (rhea.wz.cz)
jak uz jsem psal, bez scriptu a struktury ...

- pise ti to chybu na SELECT, jenze ty tvrdis, ze u prvniho scriptu ti to chybu nepise a pritom je to uplne stejny select a mel by psat uplne stejnou chybu.

- pak tu pises:
pr1: "SELECT * FROM tabulka WHERE login = '$login' ORDER BY ID DESC LIMIT 1"
pr2: "SELECT * FROM tabulka WHERE login = '$login' ORDER BY ID DESC LIMIT 1"
ale chyba pr2:
SELECT * FROM info WHERE login = 'Apostol' ORDER BY ID DESC LIMIT 1
tak si z nas delas legraci? SELECT je smerovani na tabulku s nazvem "tabulka", ale chyba je z uplne jineho dotazu, kde se pouziva tabulka s nazvem "info" o kterem tady nemas ani carku.

- pr2:
$dotaz = ("SELECT * FROM tabulka WHERE login = '$login' ORDER BY ID DESC LIMIT 1");
$dotaz_select = mysql_query($dotaz) or die("chyba prvni SQL".$dotaz."<hr>".mysql_error());

$row = mysql_fetch_row($dotaz_select);
$cislo = $row[0];

$detete = ("DELETE FROM tabulka WHERE (ID < '".$cislo."') AND (login LIKE '".$login."')");
mysql_query($delete) or die($dotaz."<hr>".mysql_error());

... mysql_query($dotaz) or die("chyba prvni SQL".$dotaz."<hr>".mysql_error());
OK, ALE:
... mysql_query($delete) or die($dotaz."<hr>".mysql_error());
proc tam mas or die($dotaz, kdyz text dotazu mas v $delete ? O tom jsem ti posledne psal a bud to oprav nebo tu nepis chybu typu:
SELECT * FROM info WHERE login = 'Apostol' ORDER BY ID DESC LIMIT 1
--------------------------------------------------------------------------------
Query was empty
Az ted mi dochazi, ze problem je na dotazu s DELETE , ale protoze pri DIE ti to zobrazi promennou $dotaz, misto $delete, tak opet nic nevime.
Jinymi slovy, zobrazi to mysql_error z DELETE, coz je oki, ale k tomu se zobrazi uplne jiny text dotazu.
ja mam treba vyrobenou funkci sq(), kam zadam jen text dotazu a ona uz v sobe ma DIE a pod.
function sq($query) {$res = mysql_query($query) or die("<hr>Err: $query<hr>".mysql_error()); return $res;}
mno chybu jsem opravil tudíž po die je $delete a píšemi to: query is empty
homeworld (rhea.wz.cz)
a ten dotaz to pise jaky pred tim query empty?
resp, co to napise na
echo "delete=---".$delete."---end";
protoze $x = ($aaa) to take muze znamenat dotaz na existenci a tez to muze vratit true/false
Píše to Query is empty, nebo
Error 1065: Query was empty?

pokud to druhé, tak další dotaz: $login a $heslo bereš odkud? Z $_POST, $_GET, $_SESSION a spol?
Pokud jo, tak vyzkoušej StripSlashes(); čas od času to pomáhá, protože register_globals stojí za ho... za houby! :)
Tom

to druhé ne :-)



$detete = ("DELETE FROM info WHERE (ID < '".$lastid."') AND (login LIKE '".$login."')");
mysql_query($delete) or die("chyba druha".$delete."<hr>".mysql_error());


napíše to přesně:

chyba druhá
<hr>---------------------------------------------------
Query was empty
"to druhé ne :-)" a hlavně že to druhé jo, viď ;)
Query was empty == Query was empty =)

Tuhle chybu většinou dostaneš, když se ti register_globals <slusne_receno>sere</slusne_receno> do proměnných.
Zkus nejprve použít ten stripslashes() a pokud to nepomůže, tak ty proěnné $login, $delete, $lastid a spol přejmenuj tak, aby se ti do jich nemohl register_globals vrtat.
Třeba já s úsěpěchem využívám polí: $login => $_PROMENNA['login'], $delete = $_PROMENNA['delete'] ,... atd.
A pokud nepomůže ani tohle, tak kdo ví co se kde posralo ;)
Tom (manual.wz.cz) :)
Ja myslim, ze jsme skoncili u toho, co jsem rikal :)
"protoze $x = ($aaa) to take muze znamenat dotaz na existenci a tez to muze vratit true/false"
jinymi slovy:
$detete = ("DELETE FROM info WHERE (ID < '".$lastid."') AND (login LIKE '".$login."')");
===> $delete = ("ahoj"); //uplne stejny vysledek, protze se to evalije jako podminka, viz $a = ($b>1) ? 'ano' : 'ne';
===> $delete = true
echo $delete ===> ""
mysql_query("") = 0 , protoze dotaz je opravdu prazdny :)

pokud by byl totiz problem s promennymi, pak by die() s tou mou konstrukci muselo vypsat dotaz typu:
DELETE FROM info WHERE (ID < '') AND (login LIKE '')
ale ono to nevypsalo ani n. tim padem v $delete nic neni
děkuju všem za trpělivost, zčista­jasna to začalo fungovat, i když opravdu nevím, kde byla chyba, ale celý script funguje

naviděnou u dalšího problému:-)
peta: "ale ono to nevypsalo ani n. tim padem v $delete nic neni"
Tudíž je problém s proměnnými. Register globals se sere do skriptu a přepisuje $delete svou hodnotou (v tomto případě bych to viděl false).
Stejně ty reg. globals akorát obtěžujou...

homeworld: "zčista­jasna to začalo fungovat," i počítač je jenom člověk ;)

"naviděnou u dalšího problému:-)" už se těšíme ;)
Tom (manual.wz.cz)
Aha, to by mohlo byt. Ja to prave moc nepouzivam, takze nevim, ktere global to prepisuje.