Ho un problema nella creazione di un sistema di commenti in PHP

loois

Nuovo Utente
11 Giu 2017
14
1
3
27
Salve, il mio sito web è http://www.socialedge.altervista.org e ho un problema con la gestione dei commenti, in pratica non riesco a creare uno script adatto a cio che voglio.. qualcuno protrebbe darmi delle dritte ?

Il mio sito web è tipo un social dove si pubblicano foto ovvero ho un login quindi sono gia autenticati una volta entrati, e vorrei aggiungere la funzione commenti alle foto.
In praica ho creato una tabella sql

user_id, photo_id, commento

ho creato e trovato script online ma nessuno funziona, qualcuno potrebbe aiutarmi ? ..
 
allora è sufficente fare solo la query la tabella l'hai già creata.
PHP:
INSERT INTO commenti (user_id, photo_id, commento ) VALUES ("", "", "");
e per recuperare i commenti
PHP:
SELECT * FROM commenti WHERE user_id="";
 
Ti ringrazio per le risposte, in pratica dimmi se ho capito bene

commenti.sql
PHP:
CREATE TABLE `commenti` (
  `user_id` int(8) NOT NULL,
  `photo_id` int(8) NOT NULL,
  `commento` text NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`)
);

commenti.php
PHP:
<?php
// Si suppone di avere le opportune funzioni di connessione alla base di dati, ecc.
function database_connect() {
    $link = mysqli_connect("localhost", "socialedge", "", 'my_socialedge');
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    return $link;
}

function commenta($user_id, $photo_id) {
    $link = database_connect();

    $query = "INSERT INTO `commenti` (user_id, photo_id, commento) VALUES ($user_id, $photo_id, $commento)";
    $result = mysqli_query($link, $query);
    if (!$result) {
        die (mysqli_error($link) . " while executing query: " . $query);
    }
}


function rimuovi_commenti($user_id, $photo_id) {
    $link = database_connect();

    $query = "DELETE FROM `like` WHERE user_id = $user_id AND photo_id = $photo_id AND commento = $commento";
    $result = mysqli_query($link, $query);
    if (!$result) {
        die (mysqli_error($link) . " while executing query: " . $query);
    }
}

function commenti($user_id, $photo_id) {
    $link = database_connect();

    $query = " SELECT * FROM commenti WHERE user_id = $user_id and commento = $commento" ;
    $result = mysqli_query($link, $query);
    if (!$result) {
        die (mysqli_error($link) . " while executing query: " . $query);
    }
}
?>

home.php
PHP:
<?php include(commenti.php) ?>
<form action="commenta" method="post">
Commento:<br />
<textarea name="commenta" cols="30" rows="10"></textarea><br />
<input name="photo_id" type="hidden" value="<?php echo $photo_id;?>">
<input name="submit" type="submit" value="Invia">
</form>
 
Si pero alcune modifiche.

Nella tabella del DB aggiungi una prima colonna chiamata "id" e quella sarà "Auto increment".
Mentre nelle funzioni delle query se vuoi passare anche il commento devi andare a modificare in questo modo
PHP:
function commenta($user_id, $photo_id, $commento) {
    $link = database_connect();

    $query = "INSERT INTO commenti (user_id, photo_id, commento) VALUES ('$user_id', '$photo_id', '$commento')";
    $result = mysqli_query($link, $query);
    if (!$result) {
        die (mysqli_error($link) . " while executing query: " . $query);
    }
}
Aggiungendo alla funzione anche la variabile del commento.


Il file home.php invece
PHP:
<?php
include('commenti.php');

if(isset($_POST['photo_id'])){
    $user_id = $_POST['user_id'];
    $photo_id = $_POST['photo_id'];
    $commento = $_POST['commenta'];
    echo "Eseguo la query";
    commenta($user_id, $photo_id, $commento);
}

?>
<form action="#" method="post">
    Commento:<br />
    <textarea name="commenta" cols="30" rows="10"></textarea><br />
    <input name="photo_id" type="hidden" value="<?php echo $photo_id;?>">
    <input name="user_id" type="hidden" value="<?php echo $user_id;?>">
    <input name="submit" type="submit" value="Invia">
</form>

Ovviamente nella home.php devi già avere le variabili dell' id foto e dell'utente.
 
Descrivimi l'errore che riscontri e posta ciò che vedi su browser.

A me funziona per creare il commento.
Io ho adattato solo la function commenta(), ma devi adattare anche le altre.
 
Non mi da nessun errore ma non mi fa visualizzare nulla, ma solo una pagina bianca..

PHP:
CREATE TABLE `commenti` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(8) NOT NULL,
  `photo_id` int(8) NOT NULL,
  `commento` text NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`, `id`)
);


commenti.php
PHP:
<?php
// Si suppone di avere le opportune funzioni di connessione alla base di dati, ecc.
function database_connect() {
    $link = mysqli_connect("localhost", "socialedge", "", 'my_socialedge');
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    return $link;
}

function commenta($user_id, $photo_id, $commento) {
    $link = database_connect();

    $query = "INSERT INTO `commenti` (user_id, photo_id, commento) VALUES ($user_id, $photo_id, $commento)";
    $result = mysqli_query($link, $query);
    if (!$result) {
        die (mysqli_error($link) . " while executing query: " . $query);
    }
}


function rimuovi_commenti($user_id, $photo_id, $commento) {
    $link = database_connect();

    $query = "DELETE FROM `like` WHERE user_id = $user_id AND photo_id = $photo_id AND commento = $commento";
    $result = mysqli_query($link, $query);
    if (!$result) {
        die (mysqli_error($link) . " while executing query: " . $query);
    }
}

function commenti($user_id, $photo_id, $commento) {
    $link = database_connect();

    $query = " SELECT * FROM commenti WHERE user_id = $user_id and commento = $commento" ;
    $result = mysqli_query($link, $query);
    if (!$result) {
        die (mysqli_error($link) . " while executing query: " . $query);
    }
}
?>

home.php
PHP:
<?php
// Inizio della pagina, agisce come un controller.
require_once 'mipiace.php';
include('commenti.php');


// Aggiunge un like o dislike
if (isset($_POST['action'])) {
    $userid = $_SESSION['user']; // !!! Va letto dalla sessione
    $photo_id = $_POST['photo_id'];
    $action = $_POST['action'];

    if ($action == 'like') {
        add_like($userid, $photo_id);
    }
    elseif ($action == 'dislike') {
        remove_like($userid, $photo_id);
    }
}

if(isset($_POST['photo_id'])){
    $userid = $_SESSION['user'];
    $photo_id = $_POST['photo_id'];
    $commento = $_POST['commenta'];
    echo "Eseguo la query";
    commenta($user_id, $photo_id, $commento);
}

//  Restituisce una rappresentazione testuale del tempo trascorso.
function _ago($tm,$rcs = 0) {
    $cur_tm = time();
    $dif = $cur_tm-$tm;
    $pds = array('secondo','minuto','ora','giorn','settimana','mese','anno');
   $pdsp = array('secondi', 'minuti', 'ore', 'giorni', 'settimane', 'mesi', 'anni');
    $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
    for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
        $no = floor($no);
        if($no <> 1)
            $pds[$v] = $pdsp[$v];
        $x = sprintf("%d %s ",$no,$pds[$v]);
        if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0))
            $x .= time_ago($_tm);
           $x .= " fa";
        return $x;
}


// Restituisce le foto degli utenti seguiti.
// Restituisce un vettore associativo delle foto, oppure un vettore vuoto
// se non ci sono foto.
function get_photos($followed) {
    $photos = array();
  
    if (empty($followed)) {
        return $photos;
    }
  
    // Costruisce le clausole relatve agli utenti seguiti
    $clauses = array();
    foreach ($followed as $user_id) {
        $clauses[] = "photo.userid=" . $user_id;
    }
  
    // Costruisce il testo dell'interrogazione e la esegue
    $query = "SELECT * FROM photo INNER JOIN users ON photo.userid = users.userId WHERE ";
    $query .= implode(" OR ", $clauses);
    $query .= " ORDER BY timestamp DESC LIMIT 0,30";
  
    $result = mysql_query($query);
    if (!$result) {
        echo mysql_error() . " while executing: \"$query\"";
        exit();
    }
  
    // Recupera tutti i dati e li inserisce in un vettore associativo
    while ($row = mysql_fetch_assoc($result)) {
        $photos[] = $row;
    }
  
    return $photos;
}


// Inizio dell'esecuzione, vengono recuperate tutte le informazioni necessarie
array_push($seguiti, $userid);
$photos = get_photos($seguiti);
?>


<!-- Il resto della pagina... -->

<center>
  <div class="page-header">
    <h2>SocialEdge</h2>
  </div>
</center>

<center>
  <div class="home-wrapper">
    <?php
    // Se sono presenti foto, vengono mostrate
    foreach ($photos as $photo):
      $photo_id = $photo['id'];
      $photo_userid = $photo['userid'];
      $photo_username = $photo['userName'];
      $photo_timestamp = $photo['timestamp'];
      $timeago = _ago($photo_timestamp, 0);
      $users_who_liked = photo_get_like_information($photo_id);
    ?>
    <div class="home-foto-profilofoto-wrapper">
      <a href="<?php echo $baseurl . "/" . $photo_username ?>"><img src="./core/getimg.php?profiloimg=<?php echo $photo_userid ?>" class="home-foto-profilofoto" /></a>
    </div>

    <div class="home-foto-username">
      <a href="<?php echo $baseurl . "/" . $photo_username; ?>"><?php echo $photo_username; ?></a>
    </div>

    <div class="home-foto-timeago">
      <?php echo $timeago ?>
    </div>

    <div class="home-foto-wrapper">
      <img src="./core/getimg.php?img=<?php echo $photo_id ?>" class="home-foto" />
<br>
      <?php if (user_likes_photo($userid, $photo_id)): ?>
        <!-- Pulsante "non mi piace" -->
        <form method="POST" align="left" >
          <button type="submit" class="btn btn-lg"><i class="glyphicon glyphicon-thumbs-down"></i> Non mi piace</button>
          <input type="hidden" name="action" value="dislike">
          <input type="hidden" name="photo_id" value="<?php echo $photo_id; ?>">
        </form>

      <?php else: ?>
        <!-- Pulsante "mi piace" -->
        <form method="POST" align="left">
          <button type="submit" class="btn btn-lg"><i class="glyphicon glyphicon-thumbs-up"></i> Mi piace</button>
          <input type="hidden" name="action" value="like">
          <input type="hidden" name="photo_id" value="<?php echo $photo_id; ?>">
        </form>
      <?php endif; ?>

      <!-- Informazioni sulla foto -->
      <span>La foto piace a <?php echo count($users_who_liked); ?> utenti</span>
  
   <form action="#" method="POST">
    Commento:<br />
    <textarea name="commenta" cols="30" rows="10"></textarea><br />
    <input name="photo_id" type="hidden" value="<?php echo $photo_id;?>">
    <input name="user_id" type="hidden" value="<?php echo $user_id;?>">
    <input name="reply" type="submit" value="Invia">
    </form>
   </div>
    <?php endforeach; ?>
 
    <?php
    // Se non sono presenti foto viene mostrato un messaggio informativo
    if (empty($photos)):
      echo "<h3>Nessuna immagine da visualizzare</h3>";
    endif;
    ?>
  </div>
</center>

questo è tutto il cuore della mia home, forse c'e un conglitto con il codice..

Una domanda e per visualizzare i commenti ? .. escono in automastico sotto o si deve ricolegare a qualche pagina esterna ?
 
Adesso do un occhiata.
Quando aggiungi un commento te lo va a salvare nel DB?

Ovviamente per farli visualizzare no non escono in automatico ma devi andare a fare una query
PHP:
SELECT * FROM commenti WHERE photo_id = $photo_id;

E fare un eventuale ciclo se ci sono più commenti
 
No, non mi esce proprio nulla, mi da schermata bianca non mi carica nemmeno i post con le foto


- Loois
 
E un po difficile testare cosi, perché fai altri collegamenti.
Se vuoi provare a mandarmi i file in MP quando ho tempo controllo, anche se sono convinto che sbagli a posizionare il codice, perchè le funzioni di INSET SELECT e DELETE devono funzionano (a me funzionano).
 

Discussioni simili