Dodawanie komentarzy do produktów

0

Robię na zaliczenie prosty sklep internetowy, chciałbym aby użytkownik miał możliwość oceny danego produktu, a także dodania komentarza pod produktem, niestety nie mam pojęcia jak to zrobić. W załączniku wstawiam tabelę.
Aktualnie tak wygląda wyświetlenie produktu:

<?php

require('header.php');
?>
<?php
function showProduct($id){

global $pdo ,$session;

$stmt = $pdo ->prepare("SELECT * FROM products WHERE id = :id");
$stmt -> bindValue(':id', $id, PDO::PARAM_INT);
$stmt -> execute();

while($row= $stmt -> fetch(PDO::FETCH_ASSOC)){
   echo "<div>";
   echo "<h2>".$row['name']."</h2>";
   echo "<h3>Cena netto: ".$row['net_prize']."</h3>";

   foreach (getProductPictures($row['index'])as $image){
       echo "<a href='images/$image'>";
       echo "<img src='images/thumbs/$image'>";
       echo "</a>";
       echo "<br>";
   }
   echo $row['description'];
   echo "<br><br>";
   $id= $row['id'];
   echo "<a href='addToCart.php?id=$id'>Dodaj do koszyka</a>";
   echo"</div>";
}
}
if(isset($_GET['product_id'])){

    showProduct($_GET['product_id']);
    echo "<br>";
    echo "<br>";
    echo '<form action="wyslij.php" method="post">
            <input type="text" name="autor" placeholder="Twój nick"/> <br/>
            <textarea name="tresc" placeholder="Treść kometarza"></textarea><br/>
            <input type="submit" value="Wyślij"/>
        </form> ';
        

                }
?>
<?php require('footer.php');
?> ```php

A tak wygląda plik wyślij.php który próbowałem zrobić na podstawie poradnika ale nie zwraca mi żadnych informacji w bazie.
```php
<?php
    
    if(!isset($_POST['autor'])){
        header('Location: product.php');
    }

    $autor = $_POST['autor'];
    $text = $_POST['text'];

    if(strlen($nick) == 0 || strlen($text) == 0){
        $_SESSION['blad'] = "Żadne pole nie może być puste!";
        header('Location: product.php');
    }
    else{
                
                $date = date("d-m-Y | h:i:s");
                
                $stmt = $pdo->prepare("INSERT INTO comments (id, text, autor, date) VALUES (NULL, :text, :nick, :date)");
    $stmt->bindValue(':autor', $autor, PDO::PARAM_STR);
    $stmt->bindValue(':text', $text, PDO::PARAM_STR);
    $stmt->bindValue(':date',$date,PDO::PARAM_STR);
    $stmt->execute();
            }
?> ```php
Dziękuje za pomoc
Pozdrawiam, Oskar.
1

Dla komentarzy zrób dodatkową tabelę z kluczem obcym produktu. Do tej tabeli będziesz insertować komenty dla danych produktów. Przy wyświetlaniu produktu po prostu wyświetlisz wszystkie komentarze z nim powiązane.

4

Jeszcze proponuję, żebyś do tego o czym napisał @Spine dodał sprawdzanie, czy dany użytkownik już nie oceniał/komentował. Raczej chcemy uniknąć sytuacji, w której jedna osoba wystawia wiele komentarzy, więc podczas ładowania strony z formularzem do dodania opinii (czy jakkolwiek inaczej chcesz to rozwiązać) sprawdzaj najpierw w bazie, czy dany user wystawił już dla danego produktu ocenę. Jeśli jej nie ma, to po prostu trzeba dodać, natomiast w przypadku stwierdzenia, że komentarz był wystawiony... tutaj tylko Twoja fantazja Cię ogranicza. Możesz po prostu wyświetlić informację, że komentarz już jest dodany i nie da się nic zrobić, możesz dać formularz do wpisania jego treści wraz z ostrzeżeniem, że zapisanie nowego komentarza spowoduje usunięcie poprzedniego. możesz odpalić formularz dodania opinii i załadować do niego treść wcześniej wprowadzonego komentarza. Opcji jest pełno, musisz coś wybrać - bo nie polecam zostawienia tego bez kontroli. Zresztą, skoro to projekt na zaliczenie, to wykładowca też może się doczepić do takiego braku kontroli/umożliwienia wielokrotnego wystawienia oceny.

0

Jak robiłem wszystko od początku to dałem radę ogarnąć, teraz jak już mam wszystko gotowe trochę się gubię, gdzie co mam dodawać. Musze ogarnąć jeszcze wygląd do tego bo mam sucha stronę bez niczego, a przez te komentarze nie wiem, czy przejdę.

0

Może pokaże jak to teraz wygląda w ogóle. W załącznikach wstawiłem. Chciałbym aby każdy mógł dodać komentarz np. pod napisem dodaj do koszyka i żeby te komentarze tam się wyświetlały. Tak samo do innych produktów. Admin ma możliwość dodawania kolejnych produktów.

1

No to na stronie produktu dodaj listę komentarzy pobieranych z bazy danych. Jak nie znajdzie dla danego produktu żadnych komentarzy, to i tak nic nie wyświetli, bo będzie pętla dla zerowej liczby elementów.
A pod tą listą komentarzy dodaj formularz pozwalający na dodanie komentarza.

0

Tak wygląda komentarz.php, danych nie pobiera ani nie pokazuje na stronie, wizualnie w załączniku.

<div class="panel-heading">Submit Your Comments</div>
  <div class="panel-body">
  	<form method="post">
  	  <div class="form-group">
	    <label for="exampleInputEmail1">Name</label>
	    <input type="text" name="name" class="form-control" id="exampleInputEmail1" placeholder="Name">
	  </div>
	  <div class="form-group">
	    <label for="exampleInputEmail1">Email address</label>
	    <input type="email" name="email" class="form-control" id="exampleInputEmail1" placeholder="Email">
	  </div>
	  <div class="form-group">
	    <label for="exampleInputPassword1">Subject</label>
	    <textarea name="subject" class="form-control" rows="3"></textarea>
	  </div>
	  <button type="submit" class="btn btn-primary">Submit</button>
	</form>
  </div>
</div>```
```php
<?php
function newComment(){
    global $pdo;
	$name = $_POST['name'];
	$email =$_POST['email'];
	$subject =$_POST['subject'];
    $date = date("d-m-Y | h:i:s");

	$stmt = $pdo->prepare ('INSERT INTO comments (name, email, subject, submittime, status) VALUES (:name, :email, :subject, :date, :draft)');
    $stmt->bindValue(':name',$name,PDO::PARAM_STR);
    $stmt->bindValue(':email',$email,PDO::PARAM_STR);
    $stmt->bindValue(':subject',$subject,PDO::PARAM_STR);
    $stmt->bindValue(':date', $date, PDO::PARAM_STR);
    $stmt->execute();
 
}
function showComment($id){
    global $pdo;
    $stmt = $pdo->prepare("SELECT * FROM comments WHERE id= :id");
    $stmt->bindValue(':id', $id, PDO::PARAM_INT);
    $stmt->execute();
    while ($row= $stmt ->fetch(PDO::FETCH_ASSOC)){
        echo "<div>";
        echo "<h2>".$row['name']."</h2>";
        echo "<h3>E-mail: ".$row['email']."</h3>";
        echo "<h4>Data: ".$row['submittime']."</h4>";
        echo $row['subject'];


    }
}
require('footer.php');
?> ```php

1 użytkowników online, w tym zalogowanych: 0, gości: 1