Else ág hibája


 Helló!
Készítettem egy egyszerű törlési progit, de nem ugy működik, ahogy kell.
Mert: kiírja, hogy "Nincs mit törölni", de ugyanakkor végrehajtódik a törlési metódus, tehát töröl is egyben! 
<? if ($_SESSION['belepett']== true) {
$sql="SELECT ID,KULDOSZAM FROM tabla WHERE (SZAMCIM='".$_SESSION['btelsz']."') AND (ID='".$tkid."')"; $query = mysql_query($sql); if (!$query ) { die('Érvénytelen lekérdezés' . mysql_error()); }
if (mysql_num_rows($query)!==0) { $sql="DELETE FROM tabla WHERE (SZAMCIM='".$_SESSION['btelsz']."') AND (ID='".$tkid."') LIMIT 1"; $query = mysql_query($sql); if (!$query ) { die('Érvénytelen lekérdezés' . mysql_error()); } echo "Törölve!"; } else { echo "Nincs mit törölni!"; }
} else { echo "Nincs jogosultsága megtekinteni az oldalt"; } ?>
Mit nem veszek észre? |
Biztos nem nézel el semmit?
Irasd ki mindenhol az $sql-eket, és akkor látod, merre jár.
|
$sql="SELECT ID,KULDOSZAM FROM tabla WHERE (SZAMCIM='".$_SESSION['btelsz']."') AND (ID='".$tkid."')";
$tkid hol kap értéket? |
Én ugy gondolom nem nézek el semmit, de a fő, hogy valóban letörli az adatbázisból az üzenetet, de mégis azt írja ki, hogy "Nincs mit törölni".
Most beírtam a törlési ágba egy echo "valami"; -t, de nem is írja ki, hogy "valami"....
Nem értem hol ronthattam el. |
| a fejlécben kap értéket/ index.php?tkid=2 / |
mysql_query($sql);
helyett
mysql_query($sql) or die(mysql_error());
Kiír valamit? |
Akkor
(ID='".$_GET['tkid']."')"; |
és van is valami módon átvitel vagy register_globals be van kapcsolva? Ha nincs bekapcsolva akkor nem képződik ilyen nevű változód.
Első esetben pl ilyenre gondolok:
$tkid = intval($_GET['tkid']);
|
Micu: kicseréltem (ID='".$_GET['tkid']."')";, de akkor is csak azt írja ki, hogy nincs mit törölni és ugyanúgy törli.
Frostech0: szépen kiírja a "21"-et, ha index.php?tkid=21 -ről linkelek. |
és ami érdekes, hogy
nem ír ki semmit, ha mondjuk bebiggyesztek egy ilyen sort
if (mysql_num_rows($query)!==0) {
echo "MŰKÖDJ!";
$sql="DELETE FROM tabla WHERE (SZAMCIM='".$_SESSION['btelsz']."') AND (ID='".$tkid."') LIMIT 1"; $query = mysql_query($sql); if (!$query ) { die('Érvénytelen lekérdezés' . mysql_error()); } echo "Törölve!"; }
Tehát töröl, de nem írja ki, hogy "MŰKÖDJ"  |
echo "MŰKÖDJ!";
die("----");
Mit csinál? |
| felettébb érdekes... nem hiszem hogy sokat számít de kicserélnéd a <? -t <?php -re? |
De már kértem:
Minden lekérdezés
Irasd ki mindenhol az $sql-eket, és akkor látod, merre jár.
|
Kiírja, hogy:
MŰKÖDJ----
De ha kiveszem a die-t, akkor ugyanúgy nem irja ki, hogy működj, tehát a die-kijavítja |
Szerintem újratölti az oldal magát 
if (mysql_num_rows($query)!==0) {
$sql="DELETE FROM tabla WHERE (SZAMCIM='".$_SESSION['btelsz']."') AND (ID='".$tkid."') LIMIT 1"; $query = mysql_query($sql) or die('Érvénytelen lekérdezés' . mysql_error());
echo $sql; echo "Törölve!"; die("-----"); }
Most mit csinál? |
| Kicseréltem, de nem az volt a hiba |
if (mysql_num_rows($query)!==0) {
echo "MŰKÖDJ!";
$sql="DELETE FROM tabla WHERE (SZAMCIM='".$_SESSION['btelsz']."') AND (ID='".$tkid."') LIMIT 1";
echo "1: $sql<br>"; die("---"); // Ha itt jó, vedd ki ezt a sort $query = mysql_query($sql) or die('Érvénytelen lekérdezés' . mysql_error());
echo "2"; die("---"); // Ha itt jó, vedd ki ezt a sort
echo "Törölve!";
die("---"); // Ha itt jó, ?????
}
|
a másodiknál már nem írja ki:
---
Tehát hibás a másodiknál. |
Tehát ha echo "1.." utáni die-t kivetted, akkor nem írta az echo 2-t?
mysql_query($sql) or die('Érvénytelen lekérdezés' . mysql_error()); |
nem írta ki echo 2-t, és akkor csak azt írta ki, hogy
"Nincs mit törölni!" |
és ugye még volt mit törölni?  |
| hát akkor nem, ha ujra betölti az oldalt, de nem töltetem be ujra |
nem értem még mindig, mi a hiba. 
Csak amit elmondtál, hogy lehet ujratölti az oldalt.... mert akkor már valóban nincs mit törölni.
Óóó, de bonyolult az élet  |
| Micu, a "die" az végül is miért javítja meg? |
| Azért, mert a die() megakadályozza, hogy az oldal újratöltéséért felelős rész lefusson. |
Értem.
De miért akarja újratölteni? Hol van az a sor, ami miatt ujratölti? |
| Valójában tényleg csak 1 rekordot akarsz törölni? Nem lehet, hogy ez az egész egy ciklusban van, és így ciklusfordulatonként egyessével törlöd az üzeneteket? Csak mert ekkor egyszerre kellene az SQL-lel az összes üzenetet törölni az IN (halmaz) módszerrel. A te hibád ebben az esetben az, hogy a ciklusfordulatonként nem módosítod se a $_SESSION['btelsz']-t, se a $tkid-t. Szóval ciklusban van az egész? |
Nincs ciklusba, de bemásoltam a kérdésembe a teljes forráskódot, ott láthatod te is.
|
Még mindig nem hagy nyugodni ez a probléma, ami végül is megoldódott a "die" beírásával, de nem értem a hibát, azaz hogy hol van benne a ciklus:
<? if ($_SESSION['belepett']== true) {
$sql="SELECT ID,KULDOSZAM FROM tabla WHERE (SZAMCIM='".$_SESSION['btelsz']."') AND (ID='".$tkid."')"; $query = mysql_query($sql); if (!$query ) { die('Érvénytelen lekérdezés' . mysql_error()); }
if (mysql_num_rows($query)!==0) { $sql="DELETE FROM tabla WHERE (SZAMCIM='".$_SESSION['btelsz']."') AND (ID='".$tkid."') LIMIT 1"; $query = mysql_query($sql); if (!$query ) { die('Érvénytelen lekérdezés' . mysql_error()); } echo "Törölve!"; } else { echo "Nincs mit törölni!"; }
} else { echo "Nincs jogosultsága megtekinteni az oldalt"; } ?>
Én nem tudok programozni, csak amennyit suliban tanultam turbo pascalt, szóval lehet, hogy valamit én nézek el |
|