Autor Zpráva
jakubroz
Profil
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 *
chyba v mysql dotazu, nebo můžeš mít i špatně hodnoty v tabulce...
jakubroz
Profil
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
Co je toto za prikaz?
(mysql_num_rows($sql))


Nemalo by to byt
if (mysql_num_rows($sql)) { }
jakubroz
Profil
dik, když jsem tam dal if tak už to píše jenom tu 1. chybu.
jakubroz
Profil
tak tohle je zatim vyřešeno. v dotazu jsem měl 2x WHERE
jakubroz
Profil
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&amp;odpoved_id=<?=$row[0]?>">
		Odpovědět</A></td>
       <td<? echo $bgcolor; ?> align="center"> 
		<A HREF="?str=cist&amp;id=<?=$row[0]?>">
		Číst</A></td>
      <td<? echo $bgcolor; ?> align="center"> 
		<A HREF="?str=vzkazy_cist&amp;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
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
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
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
SELECT * FROM vzkazy WHERE pro_id = '$proo_id' AND smazat = 0 ORDER BY od_id
jakubroz
Profil
jo to bude ono. vyzkoušim
jakubroz
Profil
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
tak už mi jde i tohle
TSD
Profil
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
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
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&amp;maz=a&amp;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
nevíte jak bych to měl udělat. už to zkoušim furt dokola, ale nevim proč to nejde
jakubroz
Profil
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&amp;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
tak mi poraďte čim to je?prosim
TSD
Profil
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
dodatek: bude tam i sloupec smazano_adresat, který bude fungovat obdobně. Víc polopaticky to neumím.
jakubroz
Profil
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
tak nevíte čim to je? já furt hledam čim to je ale nic mě nenapadá.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: