PM class

Door Yearupie Achternaamloos, 14 jaar geleden, 3.109x bekeken

Dit is een kleine class gemaakt voor PM berichten te verzenden tussen leden.

Mogelijkheden:
- Bericht versturen
- Bericht lezen
- Inbox bekijken
- verzonden berichten kijken
- ubb codes:
* smileys toevoegen
* plaatjes toevoegen
* Gekleurde letters

inclusief kleine voorbeeld scriptjes.
Dit is mijn eerste class en ik ontvang graag alle opmerkingen de class.

Gesponsorde koppelingen

PHP script bestanden

  1. pm-class

 

Er zijn 12 reacties op 'Pm class'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


14 jaar geleden
 
0 +1 -0 -1
str_replace accepteert gewoon array's hoor.
Het is altjid wel net om aan een plaatje een alt mee te geven.
Brr, bah, bah, bah, addslashes.
Vind dit niet echt OOP, meer een stapeltje functie's waar een fancy naam aan gegeven is.
Joren de Wit
Joren de Wit
14 jaar geleden
 
0 +1 -0 -1
Niet slecht om mee te beginnen, maar wel een aantal cruciale fouten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    function check_message($check){ // bericht beveiligen
    
        $check = htmlspecialchars($check);
        $check = bb_code($check);
      $check = addslashes($check);
    $check = nl2br($check);
    return $check;
    
    }
    
    function
check_subject($check){ // titel beveiligen
    
        $check = htmlspecialchars($check);
        $check = addslashes($check);
    return $check;
    
    }

?>

In de send() method gebruik je deze twee methods voor input die je naar de database stuurt. Waarom gebruik je dan in hemelsnaam functies als htmlspecialchars() en addslashes()?

De eerste is een functie die je alleen bij het outputten in een HTML omgeving gebruikt, nooit bij het wegschrijven naar een database. De tweede is een achterhaalde functie die je data alleen maar verkloot, het betere alternatief is mysql_real_escape_string(). Kies je toch voor deze methode, dan mis ik bij het ophalen van de data de functie stripslashes().

Hetzelfde geldt overigens voor de method bbcode(). Die zou je pas toe moeten passen na het uitlezen van de data uit de database. Onthoud dat je data altijd zo puur mogelijk in de database wilt hebben, dan kun je later nog alle kanten op. Jij kunt het nu alleen nog in een HTML omgeving presenteren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    function read($id){ // bericht teruggeven in array
    
        $gebruiker = $this->select_query('members', array('username'=>$_SESSION['username']));    
        return $this->select_query('pm', array('msg_to'=>$gebruiker[0]['id'],'id'=>$id));
        
    }

?>

Dit is een verdekte methode om een hele normale JOIN in je queries te omzeilen? Een erg lelijke oplossing als je het mij vraagt. Ook is hetgeen deze method terug geeft niet heel handzaam. Het is een array waarvan je zelf nog maar eens moet uitpluizen hoe die in elkaar zit. Dat kan stukken netter!

Tenslotte is dit script niet compleet. Ik mis het datamodel en dat is hier nu juist belangrijk aangezien je tabel- en kolomnamen hardcoded in je klasse hebt staan.

Kortom, een leuke eerste poging maar absoluut nog niet het predikaat OOP waardig. Je klasse is nu niet meer dan een verzameling van functies, iets dat vaak fout gaat in het begin.

ps. En voor een korte samenvatting van deze post, zie het eerste bericht van Karl :)
 
0 +1 -0 -1
Ik heb een aantal dingen veranderd:

* SQL voorbeeld toegevoegd.
* addslashes en htmlspecialchars eruit gehaald en vervangen door mysql_real_escape_string().
* Gebruik maken van JOIN
Joren de Wit
Joren de Wit
14 jaar geleden
 
0 +1 -0 -1
Het is al iets beter, maar je zou een grote slag kunnen slaan door echt de OOP denkwijze toe te passen en te gaan denken in objecten in plaats van in functie.

Dus een object 'user', een object 'message', enz. Een 'message' heeft dan eigenschappen als subject, body, date, etc. Vervolgens kun je dit object 'message' versturen van de ene 'user' naar de andere. Lees dan direct eens wat tutorials over het OO programeren in PHP5, want daar voldoet bovenstaande code in ieder geval niet aan.

Succes in ieder geval.
Wim E
Wim E
14 jaar geleden
 
0 +1 -0 -1
Off topic, netjes uitgelegd Blanche!
 
0 +1 -0 -1
Ik heb wat kleine veranderingen gedaan zodat alle voorbeelden een object krijgen. Dit bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$pm_class
= new messaging; #class aanroepen

$id = 6; # bericht id
$bericht = $pm_class->read($id); #bericht ophalen
foreach($bericht AS $bericht)
{

    echo "Van:".$bericht->msg_from."<br/>";
    echo "Aan:".$bericht->msg_to."<br/>";
    echo "Onderwerp:".$bericht->subject."<br/>";
    echo "Bericht:".$bericht->message."<br/><hr/>";
}

?>


Dit bedoelde je er toch mee, als ik het goed begrijp?

edit: Verder heb ik nog de inbox,outbox en read functie eruit gehaald.
Dit kan ook gewoon zonder!
Joren de Wit
Joren de Wit
14 jaar geleden
 
0 +1 -0 -1
Nee, nu klopt het nog steeds niet. Het probleem is dat jouw klasse geen echte OOP klasse is, maar gewoon een verzameling van functies.

Ik zou je aanraden om eerst eens wat over de OOP denkwijze te gaan lezen. Als ik me niet vergis staat er hier op phphulp wel een goede tutorial over...
Roel -
Roel -
14 jaar geleden
 
0 +1 -0 -1
Ik vind dit niet echt netjes gescript.
 
0 +1 -0 -1
Hoithebest komt dit doordat niet alles recht staat?
Volgens mij klopt dat niet aan phphulp want in mijn editor staat alles recht zonder al die verschuivingen


14 jaar geleden
 
0 +1 -0 -1
Nee, niet qua opmaak, maar qua scripting.
Het is dus geen OOP.
 
0 +1 -0 -1
Oke dan,
Voor de rest heb ik het uitgebreid met een database class die gebruik maakt van PDO.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Joren de Wit
Joren de Wit
14 jaar geleden
 
0 +1 -0 -1
Maar nu mis ik juist het deel om een inbox, outbox en individuele berichten weer te geven. Dat hoort ook onderdeel te zijn van de messaging klasse. Wat je nu doet is in je procedurele code, buiten je messaging klasse om, de database benaderen.

Die database klasse ben ik ook niet echt een fan van, PDO is namelijk al een klasse om de verbinding met je database te structureren. Je hebt er nu alleen weer een extra laag overheen gebouwd. Als je niet helemaal tevreden bent met de functionaliteit die de PDO klasse biedt, wat ik me goed kan voorstellen, bouw dan je eigen klasse of extend de PDO klasse. Maar pak het niet op deze manier aan.

Het is al beter dan in eerste instantie, maar het is nog steeds geen OOP. Heb je die tutorial over de OO denkwijze al gevonden?

ps. Deze bedoel ik dus: http://www.phphulp.nl/php/tutorials/8/632/

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. pm-class

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.