Jump to content
Sign in to follow this  
Daizuke

Sistem de comentarii pentru blog

Recommended Posts

Salutare! 

Am și eu o problemă, de fapt mai mult o întrebare.. am decis să învăț PHP că mna, mi se pare un limbaj de programare fain și m-am decis să fac un blog de la zero. Ideea e că am zis să adaug și un sistem de comentarii pentru fiecare post al blog-ului în parte. Am rezolvat partea în care afișez fiecare post din baza de date în parte, fără hard coding, apoi am introdus câteva comentarii în baza de date direct din phpmyadmin, ca mai apoi să le selectez și să le afișez pe fiecare în parte - fiecare comentariu/comentarii aparținând unui post. Acum am două probleme, pe care aș dori să le rezolv... și mai ales să știu unde am greșit, pentru a nu repeta iarăși greșeala.

Prima problemă: Am creat un if statement care să selecteze toate comentariile din baza de date, după cum am spus mai sus, fiecare comentariu aparținând unui post, lucru care a mers, iar ca else statement am spus echo "There are no comments yet!". Problema e că deși nu există niciun comentariu legat de un anumit post, else statement-ul nu este luat în considerare. 

A doua problemă: Form-ul prin care poți adăuga un nou comentariu la un post specific nu merge! Ideea e că după ce am terminat cu afișarea comentariilor, m-am apucat să fac partea de a adăuga un nou comentariu. Am creat form-ul de inserare a unui nou comentariu, iar apoi m-am pus pe treabă. Am decis să nu fac alt fișier pentru a procesa form-ul de inserare, așa că am lăsat spațiu gol la action. Apoi, am început să scriu codul pentru form. Am început cu if($_SERVER['REQUEST_METHOD'] == 'POST']) { } apoi încercând să afișez valorile variabilelor ( email-ul și comentariul ) doar așa, pentru testing. Lucru care nu a mers. Am încercat apoi să schimb if statement-ul cu if(isset($_POST['submit']) { } încercând iar să afișez valorile variabilelor, lucru care tot nu a mers. Apoi mi-a dat prin cap să testez dacă nu cumva e vreo problemă cu $_POST['submit'], adăugând ca else: header("Location: index.php?error"). Și de fiecare dată când încercam să intru pe pagina de post, mă redirecționa către index.php. Am încercat să schimb fișierul de la action, am încercat cu <?php echo $_SERVER['PHP_SELF']; ?> care nu a mers. Apoi am creat un fișier de test pentru a procesa form-ul, care tot nu a mers. Indiferent ce fișier puneam la action, rezultatul era același, mă redirecționa către index.php. Menționez faptul că url-ul paginii post.php arată cam așa: post.php?id=id-ul post-ului. Acum am lăsat action-ul gol..

Codul din post.php:

<?php include 'inc/header.php'; ?>

<?php
	if(!isset($_GET['id']) || $_GET['id'] == NULL) {
		header("Location: index.php");
	} else {
		$id = $_GET['id'];
	}
?>

	<div class="content-wrap group">
		<section id="main-content">
		<?php
			$query = "SELECT * FROM posts WHERE id='$id'";
			$post = $db->query($query);
			if($post) {
				while($result = $post->fetch()) {
		?>
		<article class="single-post group">
			<h1><?= $result['post_title']; ?></h1>
			<h4>Title description, <span><?= formatDate($result['date']); ?></span></h4>
			<img class="thumbnail" src="images/thumbnail.jpg" alt="thumbnail">
			<p><?= $result['post_body']; ?></p>
		</article>
		<?php } } else { echo "Error!"; } ?>

		<div class="comment-section">
			<h3 class="section-title">Comments</h3>
			<div class="comments">
				<?php 
					$q = "SELECT * FROM comments WHERE post_id='$id'";
					$c = $db->query($q);
					if($c) {
						while($r = $c->fetch()) {
				?>
				<div class="comment group">
					<img src="images/thumbnail.jpg">
					<h3><a href="#"><?= $r['author']; ?></a> - <span><?= formatDate($r['date']); ?></span></h3>
					<p><?= $r['comment']; ?></p>
				</div>
				<?php } } else { echo "No comments yet!"; } ?>
			</div>
			<h3 class="section-title" style="margin: 15px 0;">Add a comment</h3>
			<form action="" method="POST" class="contact">
				<label for="email">E-mail adress:</label>
				<input type="text" id="email" name="email" placeholder="E-mail adress">
				<label for="message">Comment:</label>
				<textarea id="message" name="message" placeholder="Message"></textarea>
				<input type="submit" name="submit" value="Comment">
			</form>
		</div>
		</section>

		<?php include 'inc/sidebar.php'; ?>
	</div>

<?php include 'inc/footer.php'; ?>

 

Share this post


Link to post
Share on other sites

Hmm, mie imi merge pe localhost. Am adaugat

if(isset($_POST['email'])) {
	print_r($_POST);
}

si imi afiseaza datele introduse in formular:

Array
(
    [email] => test@pctr
    [message] => Ana are mere
    [submit] => Comment
)
$query = "SELECT * FROM posts WHERE id='$id'";
$post = $db->query($query);

Cum arata $query daca $id are valoarea 3' OR '4' = '4  sau  3' OR '4' = '4'; DROP DATABASE bazadate; SELECT * FROM posts WHERE id='3

  • Like 1

Share this post


Link to post
Share on other sites

Mersi de ajutor, dar am rezolvat problemele în altfel. :)

Observasem că nici else-ul legat de post.php?id=id-ulpost-ului nu mergea. Dar le-am rezolvat pe toate. Am creat o funcție checkRows care să folosească funcția predefinită mysqli_num_rows și am folosit ca if: if(checkRows($post) > 0) {...} la fel și-n cazul comentariilor. Până la urmă, în mod miraculos am reușit să fac și formularul de contact să meargă. Slăvit fie Zeul PHP, aleluia! Oricum, mersi, Courage, că ți-ai făcut timp să răspunzi! :D

Edited by Daizuke
Corectare greșeli de scriere

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×