Autor | Zpráva | ||
---|---|---|---|
jakubroz Profil |
#1 · Zasláno: 17. 5. 2008, 08:42:51
ahoj, co může zpusobovat tyhle chyby:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/web5/.../vzkazy_cist.php on line 44 Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/web5/.../vzkazy_cist.php on line 63 Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /var/www/web5/.../vzkazy_cist.php on line 97 Dik za pomoc. |
||
Lojzik Profil * |
#2 · Zasláno: 17. 5. 2008, 09:09:20
chyba v mysql dotazu, nebo můžeš mít i špatně hodnoty v tabulce...
|
||
jakubroz Profil |
#3 · Zasláno: 17. 5. 2008, 09:11:25
no tak tady je ten dotaz
$sql = mysql_query("SELECT * FROM vzkazy WHERE WHERE pro_id = '7' ORDER BY od_id"); // pokud je v databázi alespoň jeden článek // zobrazíme tabulku se statistikami (mysql_num_rows($sql)) ?> <table border=0 cellspacing=0 cellpadding=1 WIDTH="100%"> <tr bgcolor=#C0C0C0> <td bgcolor=#C0C0C0><b>Vzkaz <? if($zobraz=="on" or $zobraz=="op") echo "pro"; else echo "od"; ?>:</b></td> <td bgcolor=#C0C0C0 align="center"><b> Předmět: </b></td> <td bgcolor=#C0C0C0 align="center"><b> Odpověď na vzkaz:</b></td> <td bgcolor=#C0C0C0 align="center"><b> Číst: </b></td> <td bgcolor=#C0C0C0 align="center"><b> Smazat: </b><</td> </tr> <? $i = 0; // pomocná proměnná // pro každý záznam v databázi se opakuje smyčka, ve které // postupně zobrazíme všechny uživatele while ($row = mysql_fetch_row($sql)) { // pokud je číslo liché, vložíme do proměnné bgcolor // šedou barvu. Jinak bude proměnná prázdná if ($i%2==0) $bgcolor=''; else $bgcolor=" bgcolor=#C0C0C0"; ?> <tr<? echo $bgcolor; ?>> <td<? echo $bgcolor; ?>> <b> <? if($zobraz=="op" or $zobraz=="on") $kdo=$row[2]; else $kdo=$row[1]; $a=mysql_query("SELECT jmeno FROM uzivatele WHERE id='$kdo'"); $b=mysql_fetch_row($a); echo $b[0];?></b></td> <td<? echo $bgcolor; ?> align="center"> <? echo $row[3];?></td> <td<? echo $bgcolor; ?> align="center"> <A HREF="vzkazy.php?odpoved_id=<?=$row[0]?>"> Odpovědět</A></td> <td<? echo $bgcolor; ?> align="center"> <A HREF="cist.php?id=<?=$row[0]?>"> Číst</A></td> <td<? echo $bgcolor; ?> align="center"> <A HREF="vzkazy_cist.php?did=<? echo $row[0]; if($zobraz=="on") echo "&mazat=true"; ?>" ONCLICK="return confirm('Opravdu chcete zprávu smazat?')"> Smazat</A></td> </tr> <? // zvýšíme proměnnou i o 1. $i++; } // uvolníme výsledek mysql_free_result($sql); ?> |
||
srigi Profil |
#4 · Zasláno: 17. 5. 2008, 09:34:58
Co je toto za prikaz?
(mysql_num_rows($sql)) Nemalo by to byt if (mysql_num_rows($sql)) { } |
||
jakubroz Profil |
#5 · Zasláno: 17. 5. 2008, 09:44:04
dik, když jsem tam dal if tak už to píše jenom tu 1. chybu.
|
||
jakubroz Profil |
#6 · Zasláno: 17. 5. 2008, 09:52:55
tak tohle je zatim vyřešeno. v dotazu jsem měl 2x WHERE
|
||
jakubroz Profil |
#7 · Zasláno: 17. 5. 2008, 10:33:46
ted můžete mi poradit jak mam udělat aby uživatele mohli mazat zprávy(ale jen u sebe)
Ted to funguje tak, že když to smažu jako 1, tak se nic nestane a když 2x tak se to z db vymaže komplet. Jak bych to měl udělat aby mohl třeba jenom odesílatel si jí smazat z odeslanejch a příjemci zůstala? nebo naopak. tady mam kod stranky:(jestli se v tom nebudete chcít přehrabovat, tak to napište jenom teoreticky. dik <? $did = $_GET['did']; require_once "../login/db.php"; include "../head.php"; $proo_id = $_SESSION['UserId']; $u=mysql_query("SELECT smazat FROM vzkazy WHERE id='$did'"); $v=mysql_fetch_array($u); if($v[0]!=0 or $mazat=="true") @$j=MySQL_query("DELETE FROM vzkazy WHERE id='$did'"); else @$j=MySQL_Query("UPDATE vzkazy SET smazat='$proo_id' WHERE id='$did'"); if($j) $zprava="Vzkaz byl smazán."; ?> <h3>Vzkazy</h3> <? echo "$proo_id" ?> <?=$zprava?> <A HREF="vzkazy.php">Napsat vzkaz</A> <?php $sql = mysql_query("SELECT * FROM vzkazy WHERE pro_id = '$proo_id' ORDER BY od_id"); // pokud je v databázi alespoň jeden článek // zobrazíme tabulku se statistikami if(mysql_num_rows($sql) > 0) { ?> <table border=0 cellspacing=0 cellpadding=1 WIDTH="100%"> <tr bgcolor=#C0C0C0> <td bgcolor=#C0C0C0><b>Vzkaz <?php if($zobraz=="on" or $zobraz=="op") echo "pro"; else echo "od"; ?>:</b></td> <td bgcolor=#C0C0C0 align="center"><b> Předmět: </b></td> <td bgcolor=#C0C0C0 align="center"><b> Odpověď na vzkaz:</b></td> <td bgcolor=#C0C0C0 align="center"><b> Číst: </b></td> <td bgcolor=#C0C0C0 align="center"><b> Smazat: </b><</td> </tr> <? $i = 0; // pomocná proměnná // pro každý záznam v databázi se opakuje smyčka, ve které // postupně zobrazíme všechny uživatele while ($row = mysql_fetch_row($sql)) { // pokud je číslo liché, vložíme do proměnné bgcolor // šedou barvu. Jinak bude proměnná prázdná if ($i%2==0) $bgcolor=''; else $bgcolor=" bgcolor=#C0C0C0"; ?> <tr<? echo $bgcolor; ?>> <td<? echo $bgcolor; ?>> <b> <? if($zobraz=="op" or $zobraz=="on") $kdo=$row[2]; else $kdo=$row[1]; $a=mysql_query("SELECT jmeno FROM uzivatele WHERE id='$kdo'"); $b=mysql_fetch_row($a); echo $b[0];?></b></td> <td<? echo $bgcolor; ?> align="center"> <? echo $row[3];?></td> <td<? echo $bgcolor; ?> align="center"> <A HREF="?str=vzkazy&odpoved_id=<?=$row[0]?>"> Odpovědět</A></td> <td<? echo $bgcolor; ?> align="center"> <A HREF="?str=cist&id=<?=$row[0]?>"> Číst</A></td> <td<? echo $bgcolor; ?> align="center"> <A HREF="?str=vzkazy_cist&did=<? echo $row[0]; if($zobraz=="on") echo "&mazat=true"; ?>" ONCLICK="return confirm('Opravdu chcete zprávu smazat?')"> Smazat</A></td> </tr> <? // zvýšíme proměnnou i o 1. $i++; } // uvolníme výsledek @mysql_free_result($sql); ?> </table> <? } // pokud není nikdo v databázi - nemožné, ale co kdyby... else { ?> <h3><font color="#FF0000"><b>Nenalezen žádný záznam !!!</b></font></h3> <? } ?> |
||
TSD Profil |
#8 · Zasláno: 17. 5. 2008, 11:26:35
Přehrabovat se v tom nechci, ale když čtu Jak bych to měl udělat aby mohl třeba jenom odesílatel si jí smazat z odeslanejch a příjemci zůstala? , tak to se řešilo tady.
|
||
jakubroz Profil |
#9 · Zasláno: 17. 5. 2008, 12:02:55
no, dik. pročetl jsem to, ale k žádnému závěru se tam nedošlo.
Pořád nevim jak udělat to mazání. |
||
jakubroz Profil |
#10 · Zasláno: 17. 5. 2008, 12:14:32 · Upravil/a: jakubroz
tak sem do tabulky s vzkazama dal sloupec smazat který má výchozí 0 a po kliknutí na smazat se udělá UPDATE na 1
to jde, ale i když má 1 tak se furt zobrazuje. můžete mi do toho kodu napsat asi nějakou podmínku která vypíše pouze když je smazat 0. dik |
||
TSD Profil |
#11 · Zasláno: 17. 5. 2008, 12:37:13
SELECT * FROM vzkazy WHERE pro_id = '$proo_id' AND smazat = 0 ORDER BY od_id
|
||
jakubroz Profil |
#12 · Zasláno: 17. 5. 2008, 12:50:29
jo to bude ono. vyzkoušim
|
||
jakubroz Profil |
#13 · Zasláno: 17. 5. 2008, 12:53:05
tak to jde, ale to se to potom neukáže ani v odeslanejch toho odesílatele ne(protože už to bude 1)? nebo jak bych to měl udělat
|
||
jakubroz Profil |
#14 · Zasláno: 17. 5. 2008, 13:01:40
tak už mi jde i tohle
|
||
TSD Profil |
#15 · Zasláno: 17. 5. 2008, 13:05:16
Probůh, myslím že v tom threadu, na který jsem tě odkázal, je to popsané srozumitelně, nebo ne?
Nová zpráva = přidání řádku do databáze. V té tabulce budou dva sloupce, ve kterých bude informace o tom, že ji smazal adresát a smazal odesílající. Tím že to smaže jeden, se nahodí do sloupce jednička. Když smaže i druhý, ověřím, jestli ten jeho protějšek nemá jedničku. Jestli ne, updatnu jedničku, jestli ano, smažu. To je jedno řešení. Druhé jsem tam navrhoval já, a sice, že se zpráva po odeslání vloží do databáze dvakrát a jeden z těch exemplářů uvidí (a bude moct smazat) odesílající a druhý adresát. |
||
jakubroz Profil |
#16 · Zasláno: 17. 5. 2008, 13:23:13
jo, kdyť píšu že už mi to chodí. ted už akorád musim řešit aby se po smazání(jenom u jednoho) dala jako přečtená, aby se nezobrazovala jí to nezobrazovalo pořád jako nepřečtenou. (mam tam ještě výpis kolik jich je nových)
Zatim mi to jde pouze po opravdovém přečtení zprávy. ale to by neměl být velký problém |
||
jakubroz Profil |
#17 · Zasláno: 17. 5. 2008, 13:39:42 · Upravil/a: jakubroz
tak jsem myslel že změnu stavu udělam takhle :
UPDATE vzkazy SET smazat='$proo_id' AND stav='$maz' WHERE id='$did' normálně bych tu proměnou maz vzal z adresy poocí GET nějak takhle ?str=vzkazy_cist&maz=a&did=<? echo $row[0]; ale to nejde. tak nevim co mam blbě. prostě pokud klikne na smazat tak by to mělo do adresního řádku dát proměnou maz=a a tim by se to i vložilo do db jako stav a a už by se jako nová nezobrazovalo. nejde to |
||
jakubroz Profil |
#18 · Zasláno: 17. 5. 2008, 16:02:07
nevíte jak bych to měl udělat. už to zkoušim furt dokola, ale nevim proč to nejde
|
||
jakubroz Profil |
#19 · Zasláno: 17. 5. 2008, 18:04:07
tak jsem to udělal takhle :
kod smaz.php $spoj = mysql_query("SELECT * FROM vzkazy WHERE pro_id = '$proo_id' AND smazat = 0 ORDER BY od_id"); while($Vysledek = mysql_fetch_array($spoj)){ if ($Vysledek['smazat'] > 0) { echo"jsem přečtená"; } else { $smazat = mysql_query("UPDATE vzkazy SET stav='a' WHERE id='$did'"); } } a pak ten odkaz na smazání vypadá takhle: <A HREF="?str=smaz&did=<? echo $row[0]; (nepíšu to sem uplně se všim) A ted, funguje to. když dají smazat tak to automaticky zprávu označí za přečtenou aby se furt nezobrazovala jako nová. no a takhle třeba když tam mam 6 zpráv tak 5 jich jde normálně a 6 se akorád jakoby smaže(nezobrazí se) ale už se neprovede UPDATE stavu. nevíte proč? |
||
jakubroz Profil |
#20 · Zasláno: 17. 5. 2008, 21:40:56
tak mi poraďte čim to je?prosim
|
||
TSD Profil |
#21 · Zasláno: 17. 5. 2008, 22:26:08
Jak souvisí smazání s přečtením? Myslím že nijak.
Pleteš to dohromady. Napíšu to ještě jednou. Zpráva má odesilatele a adresáta. Když ji "smaže" jeden z nich, nahodíš jí třeba smazano_odesilatel na 1 a přestaneš mu ji zobrazovat. Když ji pak smaže adresát a ty zijstíš, že smazano_odesilatel=1, tak ji smažeš. |
||
TSD Profil |
#22 · Zasláno: 17. 5. 2008, 22:35:34
dodatek: bude tam i sloupec smazano_adresat, který bude fungovat obdobně. Víc polopaticky to neumím.
|
||
jakubroz Profil |
#23 · Zasláno: 18. 5. 2008, 15:50:01
asi jste mě nepochopili.
Už jsem si smazání udělal, to mě funguje. Ale mam tam další sloupec "stav" který je bud "n"(nový) nebo "a" (přečtený) A já tim jak kliknou na smazat 1) UPDATE v "smazat" a za 2) if ($Vysledek['smazat'] > 0) { echo"jsem přečtená"; } else { $smazat = mysql_query("UPDATE vzkazy SET stav='a' WHERE id='$did'"); Tim pádem zaručim že když jí někdo smaže ještě než jí přečte tak se označí jako přečtená. Jde to, ale jen trochu. Pokud je v přijatých zprávách 10 výsledků tak když jich 9 dá smazat(ještě před přečtením) tak se smažou a označí za přečtenou, ale ta 10 se jenom smaže, ale už se neoznačí jako "a"(přečtená) Takhle to je, a to nevim proč se děje. |
||
jakubroz Profil |
#24 · Zasláno: 18. 5. 2008, 20:42:29
tak nevíte čim to je? já furt hledam čim to je ale nic mě nenapadá.
|
||
Časová prodleva: 17 let
|
0