stiw
17.01.2011, 21:47:24
Witam, na swojej stronie uzylem skryptu
Z TEJ STRONY do stworzenia prywatnych wiadomosci.
No i mam pewien problem :/ Wysylanie wiadomosci dziala ok, wiadomosci odczytac moge tylko te ktore wysle sam do siebie, kasowac tez moge tylko swoje wiadomosci (nadawczej tylko te ktore do siebie wyslalem, te ktore wyslalem do innego uzytkownika juz nie moge usunac)
Jak wysle jakas wiadomosc do drugiego uzytkownika to nie moge jej podgladnac w skrzynce nadawczej, a ten drugi nie moze jej odczytac w odbiorczej chociaz widnieje u niego na liscie , nie moze zobaczyc jej tresci .
Nie wiem za bardzo o co w tym chodzi bo zielony w tym jestem, takze prosilbym o wszelkie wskazowki, pozdrawiam.
Kshyhoo
17.01.2011, 21:53:16
Testowałem kiedyś (jakieś 3 miesiące temu) ten skrypt i u mnie działał bez zarzutu... nawet dorobiłem sobie nieco funkcji - odpowiadanie ze skrzynki nadawczej i odbiorczej, wiadomości grupowe.
Kopiowałeś kod ze strony, czy użyłeś
tego archiwum?
stiw
17.01.2011, 21:55:06
Skrypt jest pobrany z archiwum, nie jest kopiowany ze strony.
Kshyhoo
17.01.2011, 21:58:58
No to problem leży u Ciebie. Jedynym mankamentem rozwiązania w tym skrypcie jest znikanie wiadomości. Jak odpowiesz na wiadomość, zapisywana jest w skrzynce z wysłanymi a znika z odebranych. Można to jednak "naprawić", dodając odpowiednie warunki albo zmieniając nieco (dodając pole) w bazie danych.
stiw
17.01.2011, 22:16:39
Kurcze no nie wiem co jest nie tak . Jedyne co zmieniam w kodzie to polaczenie z baza danych a to chyba nie powinno generowac tego typu problemow ?
Jutro postaram sie przedstawic moze troche dokladniej ten problem, teraz jeszcze sam troche powalcze :/
Kshyhoo
17.01.2011, 22:28:40
Spróbuj zmienić w skrypcie odbiorczej z wiad_czyj=0 na wiad_czyj=1 i analogicznie w nadawczej.
stiw
18.01.2011, 08:56:16
Zmienilem pierwotne wiad_czyj=1 w nadawczej na 0, a wiad_czyj=0 w odbiorczej na 1 i nic :/ Ciagle to samo, z odbiorczej moge usunac tylko wiadomosci otrzymane od siebie samego, natomiast odczytac nie moge zadnych. W nadawczej natomiast nie moge odczytac i skasowac wiadomosc od siebie , natomiast nie moge nic zrobic jak ktos mi cos wysle :|
Moze to kwestia bazy danych ? Mam ja zrobiona na cba.pl . Typ tych 2 tabeli to innoDB . Nie mam pojecia gdzie moze lezec blad :/ W kodzie modyfikowalem tylko polaczenie z baza. W sesje :
mysql_connect("localhost", "root", "");
mysql_select_db("test");
na
$host = "mysql.cba.pl";
$user = "***";
$pass = "***";
$connect = mysql_connect($host,$user,$pass) or die("Sprawdz polaczenie z serwerem");
mysql_set_charset('utf8',$connect);
mysql_select_db('***_cba_pl',$connect) or die('nie wybrano bazy');
Oraz rejestruj
mysql_connect("localhost", "root", "")or die("Nie mo¿na nawi¹zaæ po³¹czenia z baz¹"); //po³¹czenie z baz¹ danych
mysql_select_db("test")or die("Wyst¹pi³ b³¹d podczas wybierania bazy danych");
na to samo co wyzej :
$host = "mysql.cba.pl";
$user = "***";
$pass = "***";
$connect = mysql_connect($host,$user,$pass) or die("Sprawdz polaczenie z serwerem");
mysql_set_charset('utf8',$connect);
mysql_select_db('***_cba_pl',$connect) or die('nie wybrano bazy');
No ale to chyba nie powinno miec zadnego wplywu na dzialanie skryptu ?
Kshyhoo
18.01.2011, 09:25:10
Coś mi świta, że na początku miałem jakiś problem, ale szybko się z nim uporałem. Wszystko jest sprawą odpowiednich warunków w zapytaniu i wyświetleniu danych. Przemyśl je na spokojnie - na logikę...
EDIT:
Ty masz jakichś userów w bazie danych? Z tego, co widzę, jestem tylko ja...
stiw
18.01.2011, 09:37:13
uzytkownicy to login : 1 haslo : 1 , oraz taki uzytkownik 2, haslo 2
Kshyhoo
18.01.2011, 09:40:14
Założyłem sobie konto

Widzę tylko siebie, mogę wysyłać tylko do siebie i czytać tylko swoje. Coś pokićkałeś w kodzie.
stiw
18.01.2011, 09:42:35
Hm, jak widzisz tylko siebie ? Jak sie chce wyslac wiadomosc masz do wyboru uzytkownikow, 1, 2, oraz siebie. No a w kodzie nic nie pokickalem bo jest zywcem wyjety z archiwum :/
Kshyhoo
18.01.2011, 09:43:50
Teraz widzę teraz usera 1 i 2, widzę wiadomość od usera 1 ale nie mogę jej przeczytać, więc warunki leżą...
stiw
18.01.2011, 09:46:11
O rety to ja juz nie wiem co jest zle :/ Czy to moze byc kwestia serwera cba albo bazy ? :/
Nadawcza.php
<?
require "sesje.php";
require "naglowek.php";
if($_GET["id"]){
$id=intval($_GET["id"]);//zamieniamy zmiennš na liczbe, zapobiega to atakom typu sql injection if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$id and wiad_czyj=0 and wiad_do=".$_SESSION["zalogowany"]))){ mysql_query("delete from wiadomosci where wiad_id=$id"); //sprawdzamy czy wiadomoœć którš użytkownik chce usunšć faktycznie ależy do niego echo "Usunięto wiadomoœć!<br>"; }
}
else if($_GET["co"]){
$co=intval($_GET["co"]);//zamieniamy zmiennš na liczbe, zapobiega to atakom typu sql injection if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$co and wiad_czyj=0 and wiad_do=".$_SESSION["zalogowany"]))){ $wynik=mysql_query("select * from wiadomosci where wiad_id=$co and wiad_czyj=0"); //po raz kolejny sprawdzamy czy wiadomoœć należy do użytkownika echo "<br><br><table border=1><tr><td>Odbiorca: ".$odbiorca["user_login"]."</td><td>Data: ".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='odbiorcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>"; echo "<tr><td colspan=3>Temat: ".$rekord["wiad_temat"]."</td></tr>"; echo "<tr><td colspan=3>".$rekord["wiad_tresc"]."</td></tr>"; }
}
else{
$wynik=mysql_query("select * from wiadomosci where wiad_od=".$_SESSION["zalogowany"]." and wiad_czyj=0 order by wiad_data "); echo "<table><tr><td>Odbiorca</td><td>Temat</td><td>Data</td><td> </td></tr>"; if(!mysql_num_rows($wynik))echo "<tr><td colspan=4 style='text-align:center'>Nie masz żadnych wiadomoœci!</td></tr>"; echo "<tr><td>".$odbiorca["user_login"]."</td><td><a href='nadawcza.php?co=".$rekord["wiad_id"]."'>".$rekord["wiad_temat"]."</td><td>".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='nadawcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>"; }
}
require "stopka.php";
?>
Odbiorcza.php
<?
require "sesje.php";
require "naglowek.php";
if($_GET["id"]){
$id=intval($_GET["id"]); //zamieniamy zmiennš na liczbe, zapobiega to atakom typu sql injection if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$id and wiad_czyj=1 and wiad_od=".$_SESSION["zalogowany"]))){ mysql_query("delete from wiadomosci where wiad_id=$id"); //sprawdzamy czy wiadomoœć którš użytkownik chce usunšć faktycznie ależy do niego echo "Usunięto wiadomoœć!<br>"; }
}
else if($_GET["co"]){
$co=intval($_GET["co"]); //zamieniamy zmiennš na liczbe, zapobiega to atakom typu sql injection if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$id and wiad_czyj=1 and wiad_od=".$_SESSION["zalogowany"]))){ mysql_query("update wiadomosci set wiad_przeczytane=1 where wiad_id=$co"); //po raz kolejny zostaje sprawdzony warunek, $wynik=mysql_query("select * from wiadomosci where wiad_id=$co and wiad_czyj=1"); //który również sprawdza właœciciela wiadomoœci echo "<br><br><table><tr><td>Nadawca: ".$nadawca["user_login"]."</td><td>Data: ".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='odbiorcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>"; echo "<tr><td colspan=3>".$rekord["wiad_temat"]."</td></tr>"; echo "<tr><td colspan=3>".$rekord["wiad_tresc"]."</td></tr>"; }
}
else{
$wynik=mysql_query("select * from wiadomosci where wiad_do=".$_SESSION["zalogowany"]." and wiad_czyj=1 order by wiad_data");
echo "<table><tr><td>Nadawca</td><td>Temat</td><td>Data</td><td> </td></tr>"; if(!mysql_num_rows($wynik))echo "<tr><td colspan=4 style='text-align:center'>Nie masz żadnych wiadomoœci!</td></tr>"; $kw1="";$kw2="";
if(!$rekord["wiad_przeczytane"]){$kw1="<b>";$kw2="</b>";}
echo "<tr><td>".$nadawca["user_login"]."</td><td><a href='odbiorcza.php?co=".$rekord["wiad_id"]."'>$kw1".$rekord["wiad_temat"]."$kw2</td><td>".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='odbiorcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>"; }
}
require "stopka.php";
?>
newmsg.php
<?
require "sesje.php";
require "naglowek.php";
if($_POST["tresc"] && $_POST["do"] && $_POST["temat"]){
echo "<br><br>Wysłano wiadomoœć!<br>"; }
else if($_POST["submit"]){
echo "<br><br>Nie uzupełniono wszystkich pól!<br>"; }
echo "<form action='newmsg.php' method=post>"; echo "<br>Temat: <input name=temat size=30>"; echo "<br>Do kogo: <select name=do>"; $wynik=mysql_query("select user_login, user_id from users order by user_login"); echo "<option value=".$rekord["user_id"].">".$rekord["user_login"]; }
echo "Treœć: <br><textarea name='tresc' rows=8 cols=50></textarea>"; echo "<br><input type=submit value='wyœlij wiadomoœć' name=submit>"; require "stopka.php";
?>
Kshyhoo
18.01.2011, 09:48:57
Raczej nie, to sprawa warunków, tak jak napisałem wcześniej. Mam ten skrypt w wersji podstawowej. Daj mi trochę czasu, to może do czegoś dojdę.
stiw
18.01.2011, 09:52:05
Ok dzieki

Mam nadzieje ze Ci sie uda dojsc co i jak . Wyzej wstawilem 3 kody, nadawcza odbiorcza i newmsg , bo tam pewnie gdzies tkwi problem.
Ja tez przepatrze co i jak, a nuz cos wynajde :|
Pozdrawiam.
Kshyhoo
18.01.2011, 10:22:17
U mnie:
1. Skrzynka odbiorcza działa dobrze:
- pokazuje listę wiadomości
- mogę odczytać wszystkie przychodzące wiadomości
2. Skrzynka nadawcza działa źle:
- wyświetla listę wiadomości
- nie mogę odczytać wysłanych wiadomości
Wnioski:
Zapytanie w nadawcza.php:
if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$co and wiad_czyj=1 and wiad_do=".$_SESSION["zalogowany"]))) {
powinno wyglądać:
if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$co and wiad_czyj=1 and wiad_od=".$_SESSION["zalogowany"]))) {
Czyli dwa razy trzeba zmienić
wiad_do na
wiad_odTo tyle, mam nadzieję, że już wszystko będzie ok (chyba, że coś skopałeś).
stiw
18.01.2011, 10:28:58
Ok, teraz nadawcza juz dziala tzn moze zobaczyc wiadomosc ktora wyslalem do kogos innego, nie tylko do siebie, natomiast dalej nie dziala w nadawczej kasowanie

Odbiorcza dalej ten sam problem co byl.
Kshyhoo
18.01.2011, 13:14:57
Zobaczę, co się dzieje. U mnie odbiorcza działa, więc potem podeślę kod.
To kody, które działają u mnie poprawnie:
odbiorcza.php<?
require "sesje.php";
require "naglowek.php";
if($_GET["id"]) {
$id=intval($_GET["id"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$id and wiad_czyj=0 and wiad_do=".$_SESSION["zalogowany"]))) { mysql_query("delete from wiadomosci where wiad_id=$id"); //sprawdzamy czy wiadomość którą użytkownik chce usunąć faktycznie ależy do niego echo "Usunięto wiadomość!<br>"; }
} else if($_GET["co"]) {
$co=intval($_GET["co"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection if(mysql_num_rows(mysql_query("select wiad_od from wiadomosci where wiad_id=$co and wiad_czyj=0 and wiad_do=".$_SESSION["zalogowany"]))) { mysql_query("update wiadomosci set wiad_przeczytane=1 where wiad_id=$co"); //po raz kolejny zostaje sprawdzony warunek, $wynik=mysql_query("select * from wiadomosci where wiad_id=$co and wiad_czyj=0"); //który również sprawdza właściciela wiadomości echo "<br><br><table><tr><td>Nadawca: ".$nadawca["user_login"]."</td><td>Data: ".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='odbiorcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>"; echo "<tr><td colspan=3>".$rekord["wiad_temat"]."</td></tr>"; echo "<tr><td colspan=3>".$rekord["wiad_tresc"]."</td></tr>"; }
} else {
$wynik=mysql_query("select * from wiadomosci where wiad_do=".$_SESSION["zalogowany"]." and wiad_czyj=0 order by wiad_data"); echo "<table><tr><td>Nadawca</td><td>Temat</td><td>Data</td><td> </td></tr>"; if(!mysql_num_rows($wynik))echo "<tr><td colspan=4 style='text-align:center'>Nie masz żadnych wiadomości!</td></tr>"; $kw1="";
$kw2="";
if(!$rekord["wiad_przeczytane"]) {
$kw1="<b>";
$kw2="</b>";
}
echo "<tr><td>".$nadawca["user_login"]."</td><td><a href='odbiorcza.php?co=".$rekord["wiad_id"]."'>$kw1".$rekord["wiad_temat"]."$kw2</td><td>".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='odbiorcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>"; }
}
require "stopka.php";
?>
nadawcza.php<?
require "sesje.php";
require "naglowek.php";
if($_GET["id"]) {
$id=intval($_GET["id"]);//zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection if(mysql_num_rows(mysql_query("select wiad_do from wiadomosci where wiad_id=$id and wiad_czyj=1 and wiad_od=".$_SESSION["zalogowany"]))) { mysql_query("delete from wiadomosci where wiad_id=$id"); //sprawdzamy czy wiadomość którą użytkownik chce usunąć faktycznie ależy do niego echo "Usunięto wiadomość!<br>"; }
} else if($_GET["co"]) {
$co=intval($_GET["co"]); //zamieniamy zmienną na liczbe, zapobiega to atakom typu sql injection if(mysql_num_rows(mysql_query("select wiad_do from wiadomosci where wiad_id=$co and wiad_czyj=1 and wiad_od=".$_SESSION["zalogowany"]))) { $wynik=mysql_query("select * from wiadomosci where wiad_id=$co and wiad_czyj=1"); //po raz kolejny sprawdzamy czy wiadomość należy do użytkownika echo "<br><br><table border=1><tr><td>Odbiorca: ".$odbiorca["user_login"]."</td><td>Data: ".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='odbiorcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>"; echo "<tr><td colspan=3>Temat: ".$rekord["wiad_temat"]."</td></tr>"; echo "<tr><td colspan=3>".$rekord["wiad_tresc"]."</td></tr>"; }
} else {
$wynik=mysql_query("select * from wiadomosci where wiad_od=".$_SESSION["zalogowany"]." and wiad_czyj=1 order by wiad_data "); echo "<table><tr><td>Odbiorca</td><td>Temat</td><td>Data</td><td> </td></tr>"; if(!mysql_num_rows($wynik))echo "<tr><td colspan=4 style='text-align:center'>Nie masz żadnych wiadomości!</td></tr>"; echo "<tr><td>".$odbiorca["user_login"]."</td><td><a href='nadawcza.php?co=".$rekord["wiad_id"]."'>".$rekord["wiad_temat"]."</td><td>".date("d/m/Y H:i", strtotime($rekord["wiad_data"]))."</td><td><a href='nadawcza.php?id=".$rekord["wiad_id"]."'>usuń</a></td></tr>"; }
}
require "stopka.php";
?>
stiw
18.01.2011, 13:22:16
Ok, nadawcza dziala juz calkowicie poprawnie, moge odczytywac i kasowac wszystkie wiadomosci . Problem polegal na tym ze tam byly 2 zapytania takie same, te ktore wymieniles wyzej by zmienic, ja zmienilem tylko jedno .
Natomiast teraz w odbiorczej nic nie dziala

Poza kasowaniem tylko swoich wiadomosci. Tez cos pewnie nie tak z tymi wiad_do, wiad_od :/
EDIT : dopiero teraz zauwazylem twoj wpis. Juz odbiorcza dziala, wszystko elegancko


Jeszcze potestuje, ale wielkie dzieki Ksyhoo, nie wiem co sie za blad tam wkradl :|:|
Kshyhoo
18.01.2011, 13:35:01
Nie wiedzieć czemu, widzę tylko kilka znaków w tytule i w treści... Nie grzebałeś coś w bazie danych?
stiw
18.01.2011, 13:39:51
No własnie wykłada sie przy polskich znakach nie wiem dlaczego . W bazie grzebał mój znajomy także popytam go co on tam nabroił, ale to jest najmniejszy problem w tej chwili. Teraz muszę rozwiązać inny problem,otóż mam 3 tabele z użytkownikami i muszę to zbić w jedna całość, żeby przy wyborze użytkownika widoczni byli wszyscy z 3 tabel a nie tylko z 1 jak w tym skrypcie, jak to zrobić ?
Kshyhoo
18.01.2011, 13:56:46
A dlaczego masz aż 3 tabele? A baza jedna? Struktura...
stiw
18.01.2011, 14:03:01
Są 3 tabele DANE_DZIEKANATU (ID, IMIE, NAZWISKO, LOGIN itd), DANE_STUDENTA(ID, IMIE, NAZWISKO, LOGIN itd) i DANE_WYKLADOWCY (ID, IMIE, NAZWISKO, LOGIN itd) ... Tak kolega zrobil baze no i trudno .
newmsg.php
<?
require "sesje.php";
require "naglowek.php";
if($_POST["tresc"] && $_POST["do"] && $_POST["temat"])
{
echo "<br><br>Wysłano wiadomość!<br>"; }
else if($_POST["submit"])
{
echo "<br><br>Nie uzupełniono wszystkich pól!<br>"; }
echo "<form action='newmsg.php' method=post>"; echo "<br>Temat: <input name=temat size=30>"; echo "<br>Do kogo: <select name=do>"; $wynik=mysql_query("select LOGIN, ID from DANE_STUDENTA order by LOGIN"); {
echo "<option value=".$rekord["ID"].">".$rekord["LOGIN"]; }
echo "Treść: <br><textarea name='tresc' rows=8 cols=50></textarea>"; echo "<br><input type=submit value='wyślij wiadomość' name=submit>"; require "stopka.php";
?>
Tak wybiera juz ok dane z tabeli studenta : $wynik=mysql_query("select LOGIN, ID from DANE_STUDENTA order by LOGIN"); , ale jak zrobic by wybieralo jeszcze z tych 2 innych tabel ?
Kshyhoo
18.01.2011, 14:47:07
Generalnie:
(SELECT id, login, imie, nazwisko FROM dane_dziekanatu)
UNION ALL
(SELECT id, login, imie, nazwisko FROM dane_wykladowcy)
UNION ALL
(SELECT id, login, imie, nazwisko FROM dane_studena)
ORDER BY login ASK
Warunek - ta sama ilość kolumn i te same typy danych.
UNION lub
UNION ALL działa szybciej ale dopuszcza duplikaty danych.
Nie wiem też, czy się sprawdzi.
stiw
18.01.2011, 15:12:24
Ok dzieki

Ale zalezy mi tylko na wyciagnieciu ID i Loginu z tych tabel i podstawienie do tego :
$wynik=mysql_query("select LOGIN, ID from DANE_STUDENTA order by LOGIN");
Jak to podstawic ? Bo edytor mi koloruje ze blad jest
Kshyhoo
18.01.2011, 15:32:13
Jaki edytor, jaki błąd?
Jeżeli chcesz bez nazwisk, to tak:
(SELECT id, login FROM dane_dziekanatu)
UNION ALL
(SELECT id, login FROM dane_wykladowcy)
UNION ALL
(SELECT id, login FROM dane_studena)
ORDER BY login ASK
I podmieniasz swoje zapytanie:
$wynik=mysql_query("select LOGIN, ID from DANE_STUDENTA order by LOGIN");
na:
$wynik=mysql_query("(SELECT id, login FROM dane_dziekanatu) UNION ALL
(SELECT id, login FROM dane_wykladowcy)
UNION ALL
(SELECT id, login FROM dane_studena)
ORDER BY login");
Dałem zapytanie o więcej danych, bo myślałem o:
echo "<option value=".$rekord["ID"].">".$rekord["imie"]." ".$rekord["nazwisko"]." (".$rekord["LOGIN"].")";
Czyli na liście wyświetlało by się:
Jan Kowalski (Zgredek), bo przecież nie każdy musi znać wszystkie loginy
stiw
18.01.2011, 15:55:17
Wielkie dzieki Kshyhoo

Dziala elegancko , jestes wielki

Fajnie ze chcialo Ci sie pomoc

To teraz tylko przerobie nadawcza i odbiorcza i lux

Tylko jeszcze bede musial jakos logowanie zrobic, wyrzucic ta rejetracje, bo logowanie juz jest na stronie, jakos sesje bede musial porobic ;D
Jeszcze raz wielkie dzieki

Mozliwe ze jeszcze tu cos napisze , takze nie uciekaj ;D
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.