login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Eerst reageren voordat je het ziet.

Offline br3nd4n - 17/01/2010 14:09
Avatar van br3nd4nNieuw lid Beste mensen,

Ik heb een ideetje in me hoofd alleen weet ik niet hellemaal waar ik moet beginnen.

Ik heb een heel script waarmee je topics kan plaatsen en dan via een bepaalde link iets kan downloaden bijv een mp3'tje, Ook zit er een reactie systeem in zodat mensen kunnen reageren.

Nu wil ik iets doen waardoor je eerst een "reactie" moet geven voordat je de download link ziet.

Bijvoorbeeld

Link is: www.********.nl
Maar de gebruiker heeft nog geen reactie gegeven dan moet er komen te staan:

Link is: Verborgen laat eerst een reactie achter.

Als dan de gebruiker een reactie plaatst dan komt de link pas te voorschijn.

Kan iemand mij mischien hiermee op weg helpen?

Greetz,
brendan.

12 antwoorden

Gesponsorde links
Offline Filip - 17/01/2010 15:02
Avatar van Filip IRC guru Er zijn wel mods voor forumscripts zoals phpbb die dat gebruiken. Misschien die eens bekijken en dat gebruiken als basis voor je script?

Als ik me niet vergis was het de 'hide' tag bij phpbb, maar zeker ben ik niet..
Offline valles10 - 17/01/2010 15:06
Avatar van valles10 HTML interesse Je kan dit gemakkelijk met een session doen of een update in de db.

als de gebruiker een topic heeft gepost dat $_SESSION['show'] op 1 komt te staan. en dan bij de link if($_SESSION['show'] == 1){linkhier}else{post eerst...}
Offline br3nd4n - 17/01/2010 23:08
Avatar van br3nd4n Nieuw lid Hmm via session dus?

Dit is het stukje van de reacties:

  1. if ($_POST[addcomment] && !empty($_POST[comment])) {
  2. $post -> AddComment($_GET[id], 1);
  3. header("Location:details.php?id=" . $_GET[id]);
  4. }


Dus ik moet daarmee iets combineren?
Offline ArieMedia - 19/01/2010 10:19
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
ik zal het anders aanpakken, je zal namelijk te maken krijgen met mensen die de link direct gaan delen. Je moet dus een apart systeem er naast hangen om de downloads beschikbaar te stellen.
Offline Stijn - 19/01/2010 10:50
Avatar van Stijn PHP expert Waarom kijk je niet of er al een record bestaat in de reacties tabel. Je hebt zijn gebruikers id en het topic id. Als er geen reactie in staat, toon de inhoud niet.

  1. SELECT count(*) AS aantal FROM reacties WHERE topic=$topic_id AND user=$user_id
Offline br3nd4n - 20/01/2010 21:54 (laatste wijziging 20/01/2010 21:56)
Avatar van br3nd4n Nieuw lid Hallo ArieMedia & Stijn,

De link direct delen zal niet gebeuren. Heb er al een scriptje in staan dat bij elke link die erin staat dat het gewoon weggefilterd word. ( Zal ook niet gebeuren ivm dat het sneller is een reactie te zetten en meteen de link te krijgen dan copy/past. )

--

Stijn, Dit snap ik niet hellemaal ben nog niet super ver gevorderd in het database gebeuren.

De tabel reacties ziet er als volgt uit:

  1. --
  2. -- Tabelstructuur voor tabel `comments`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `comments` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `user_id` int(11) NOT NULL DEFAULT '0',
  8. `post_id` int(11) NOT NULL DEFAULT '0',
  9. `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  10. `comment` text NOT NULL,
  11. PRIMARY KEY (`id`)
  12. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=31 ;


Is het mogelijk omdat de user_id in de database gezet word dat het stukje kijk naar: if user_id? Dus dan kijkt het script welke user_id er in de tabel reacties staat als er dan bijvoorbeeld user_id 2 staat dat de user met id 2 de link kan zien?

Dus dat het geregeld word via user_id?
Mischien dat iemand mij hiermee op weg kan helpen.

Bedankt voor de reacties hierboven!
Offline Stijn - 21/01/2010 00:17 (laatste wijziging 21/01/2010 00:18)
Avatar van Stijn PHP expert Om even stoer te doen, ga ik eventjes jou CREATE TABLE wat aanpassen.

  1. CREATE TABLE IF NOT EXISTS `comments` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `user_id` int(11) NOT NULL,
  4. `post_id` int(11) NOT NULL,
  5. `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  6. `comment` text NOT NULL,
  7. PRIMARY KEY (`id`),
  8. FOREIGN KEY (user_id) REFERENCES users(id),
  9. FOREIGN KEY(post_id) REFERENCES posts(id)
  10. ) ENGINE=InnoDB;


Relaties tussen tabellen zijn nodig voor heel wat aspecten in de database wereld! Leer ze dan ook goed te gebruiken. De MyISAM engine is een slechte engine en raad ik compleet af. Eigenlijk is dit gewoon commentaar dat ik geef op je design. Beschouw dit dan ook als een goeie tip die ik je geef.

Nu ontopic. Je kan gebruik maken van stored functions in SQL. We kunnen een functie maken die kijkt of een gebruiker toegang heeft tot een bepaalde post.

  1. CREATE FUNCTION kanPostBekijken(p_post_id integer , p_user_id integer) returns BOOLEAN
  2. begin
  3. declare aantal integer;
  4.  
  5. SELECT count(*)
  6. INTO aantal
  7. FROM comments
  8. WHERE user_id = p_user_id AND post_id = p_post_id;
  9.  
  10. IF aantal = 0 then
  11. RETURN false;
  12. end IF;
  13.  
  14. RETURN true;
  15. end


Mag gebruiker met id 12 in post met id 245 kijken?

  1. SELECT kanPostBekijken(245 , 12)


of in PHP

  1. $post = 245;
  2. $gebruiker = 12;
  3. $q = mysql_query("select kanPostBekijken($post , $gebruiker)");


Om de posts op te halen die gebruiker 12 kan zien, dien je volgende code uit te voeren.

  1. SELECT *
  2. FROM posts
  3. WHERE kanPostBekijken(id , 12) = true


In PHP

  1. $gebruiker = 12; //waarschijnlijk is dit $_SESSION['id'] ofzo
  2. $q = mysql_query("select * from posts where kanPostBekijken(id , $gebruiker) = true");
  3.  
  4. while($row = mysql_fetch_assoc($q)) {
  5. echo $row['id'];
  6. }


Stored functions zijn handige dingen .
Offline br3nd4n - 25/01/2010 17:26
Avatar van br3nd4n Nieuw lid Hallo stijn,

Bedankt voor de hele uitleg en de stukjes code natuurlijk.
Alleen heb ik een klein probleempje heb alles erin gezet en nu kwam de volgende error:

Parse error: syntax error, unexpected T_FUNCTION in ... on line 8

De lijn is:

  1. create function kanPostBekijken(p_post_id integer , p_user_id integer) returns boolean


Heb het zelf al een beetje proberen optelossen maar kwam zelf niet op een oplossing!
Offline Jelmerholland - 25/01/2010 18:34
Avatar van Jelmerholland PHP beginner Ik weet niet 100% waar het over gaat? Maar moet je niet een ; op het einde plaatsen?
Offline br3nd4n - 25/01/2010 19:40 (laatste wijziging 02/02/2010 18:52)
Avatar van br3nd4n Nieuw lid Volgens mij niet, Heb dat ook al geprobeerd namelijk .

niemand?!?!
Offline TotempaaltJ - 02/02/2010 22:36 (laatste wijziging 02/02/2010 22:37)
Avatar van TotempaaltJ PHP interesse
br3nd4n schreef:
niemand?!?!
Jawel! Ik! Waar precies doe je die create function? Webinterface? PHP-scriptje? Belangrijke informatie 
Offline br3nd4n - 02/02/2010 23:39
Avatar van br3nd4n Nieuw lid Wat bedoel je met webinterface? het zit nu gewoon in een al bestaand php script dus een uitbreiding
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.24s