Mesaje intre useri

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Komfort
Mesaje:157

Mesaje intre useri

Am un table cu userii inregistrati. Cum as putea sa fac sa poata sa trimita mesaje intre ei? Cum e pe orice forum sau orice joc de tip browser: "ai 1 mesaj nou" Ceva de gen, o idee?
Multumesc.

MarPlo Mesaje:4343
Ideea ar fi asa:
1. Un tabel cu: id - user - fromuser - subiect - mesaj - data - vazut
2. In pagina utilizatorului un formular care apare cand e vizitata de un utilizator logat. Cu un camp "hidden" cu numele celui logat, Subiect si Mesaj.
3. Cand formularul e trimis, se face Insert in tabel, cu "0" la coloana "vazut".
4. Cand utilizatorul autentificat viziteaza pagina lui, se face Select in tabel, dupa randurile cu numele utilizatorului si "vazut" 0.
5. Daca sunt rezultate, afiseaza un link cu text "Ai nr. mesaje noi".
6. Link-ul deschide o pagina unde se face acelasi Select, dar afiseaza mesajele selectate, cu Nume de la cine, Data, Subiect.
7. Face Update din 0 in 1 la coloana "vazut" la randurile cu numele utilizatorului si "vazut" 0.
8. La fiecare mesaj se adauga un buton checkbox cu id-ul mesajului la "value", si name tip array: name="del[]".
9. Un buton pt. Delete, care trimite la un fisier PHP butonele selectate.
10. Script-ul PHP preia id-ul butoanelor si sterge randuriile cu acel id din tabel.

Komfort Mesaje:157
Pana acum e bine oare?

Cod: Selectaţi tot

function messages(){
?>
<div style="position:absolute;top:400px;left:570px"><form method=post action="?sheepfarm=Messages">
<input type=hidden name=your_nickname>
To:<div style="position:absolute;top:3px;left:66px"><input type=text name=to></div><br>
Subject:<div style="position:absolute;top:27px;left:66px"><input type=text name=subject></div><br>
Message:<div style="position:absolute;top:50px;left:66px"><input type=text name=message></div><br><br>
<input type=submit name=submit><br></div>
<?php
if(isset($_POST['to'])) {
$your_nickname=username();
$to=$_POST['to'];
$subject=$_POST['subject'];
$message=$_POST['message'];
mysql_query("INSERT INTO mesaje (user, fromuser, subiect,mesaj)
VALUES ('$to', '$your_nickname','$subject','$message')");
}
}
?>
si inbox

Cod: Selectaţi tot

function inbox(){

if(is_online()){
	$cerereSQL0="SELECT fromuser,subiect,mesaj FROM mesaje WHERE user='".username()."'   ";
					$rezultat0 = mysql_query($cerereSQL0);
					$rand = mysql_fetch_row($rezultat0);
					
						$fromuser=$rand[0];
						$subiect=$rand[1];
						$mesaj = $rand[2];
						
						echo 'ai un mesaj de la';
						echo $fromuser;
						echo '<br>';
						echo 'subiect:'; echo $subiect; echo '<br>';
						echo 'mesaj:';  echo $mesaj;
						}
						}
				

MarPlo Mesaje:4343
Tu stii daca e bine, prin testele pe care le faci.
Nu am baza ta de date ca sa testez, si nu ma bag in crearea acestui script.

Komfort Mesaje:157
Pai prin testele care le fac reiesi ca la inbox ia numai primul mesaj...pt ca defiecare data cand trimit mesaj se face mai multe linii cu acelasi user de ex...trimit odata la userul test...el primeste....apoi mai trimit odata--->nu=l mai vede pentru ca zic eu sunt 2 linii cu acelasi user.
Ar daca mi-ai da un exemplu, ca nu am mai incercat sa fac asa ceva pan` acum.

steell Mesaje:190
salut marplo.
Nu prea am inteles partea aceasta
8. La fiecare mesaj se adauga un buton checkbox cu id-ul mesajului la "value", si name tip array: name="del[]".
si anume cum diferentiez fiecare buton si cum fac ca scriptul php sa le stearga daca sunt mai multe de 1.
adica eu am asa:

Cod: Selectaţi tot

<?php
echo $_POST['vehicle'];
?>

<form action="bbb.php" method="post">
<input type="checkbox" name="vehicle" value="Bike" /> I have a bike<br />
<input type="checkbox" name="vehicle" value="Car" /> I have a car <br />
<input type="submit" value="trm" />
</form>
Cand bifez unul si dau send imi arata aces value, dar cand le selectez pe amandoua imi arata doar p primu, cum fac sa le diferentiez si s mi le arate pe toate cele selectate? daca inteleg asta pot sa fac si conectarea la baza de date si sa le stearag doar pe cele selectate.
Cred ca la asta sa incurcat si el cum sa le diferentieze.
Arata-ne in exemplul meu cum sa le afiseze doar pe cele selectate (in acest caz amandoua).
Multumesc.

MarPlo Mesaje:4343
Ca sa obtii valoarea mai multor butoane checkbox selectate, care au acelasi nume, tehnica e sa adaugi paranteze patrate [] la nume, la fiecare checkbox, ca sa reprezinte un array.

Cod: Selectaţi tot

<form action="bbb.php" method="post">
<input type="checkbox" name="vehicle[]" value="Bike" /> I have a bike<br />
<input type="checkbox" name="vehicle[]" value="Car" /> I have a car <br />
<input type="submit" value="trm" />
</form>
In scriptul PHP, variabila $_POST['vehicle'] va contine un array cu valorile butoanelor selectate, indexate in ordine: 0, 1, 2, ...

Cod: Selectaţi tot

<?php
print_r $_POST['vehicle'];
?>
- Iar cu implode() se pot adauga valorile din array intr-un sir, separate unele de altele prin ce vrei.
- Vezi si tutorialul Get the value of multiple selected checkboxes with same name , arata si modul de stergere din baza de date pe cele selectate.

evident Mesaje:168
Salut Komfort,

Am sa iti zic aici o idee destul de simpla pe care eu am folosit-o la mine pe site cu mesaje private intre useri.
Faci un tabel in baza de date cu urmatoarele:

Cod: Selectaţi tot

id_mesaj
de_la_userul
pentru_userul
titlu_mesaj
continut_mesaj
citit_necitit    enum '0','1'
data
Daca nu sti cum sa faci tipul acestora dami un pm sau scrie aici!

Pasul 2:
Faci inbox
Faci o afisare din baza de date a tuturor mesajelor dupa numele sesiunii user.selectezi idul, titlul si daca vrei continutul.
Cand afisezi mesajele le pui un link ceva de genu:
<a href="citeste.php?idmesaj=' . $row['id_mesaj'] . '">
Apoi faci un fisier citire.php si acolo preiei datele pe care le primesti din inbox.php
Apoi in acest citeste.php faci un get idmesaj si afisezi continutul dupa idmesaj:

Cod: Selectaţi tot

$userfinal=$_SESSION['nume'];
$idmesaj = $_GET['idmesaj'];[/b]
$message = mysql_query("SELECT * FROM messages WHERE id_mesaj = '$idmesaj' AND pentru user = '$userfinal'");
Si poti pune aici sa iti puna enum pe 1 dupa ce iti face afisarea ceea ce rezulta ca mesajul a fost citit.Cu aceasta poti sa faci un script frumos dupa.Adica faci cu un if daca citit_necitit e pe 0 in baza de date sa iti apara o anumita imagine iar daca e pe 1 sa iti apara o alta imagine, nu stiu daca m-ai inteles...Dami pm si te ajut.
Iar dupa iti personalizezi scriptul asa cum vrei tu,
Posteaza aici sau dami pm...
Stima.