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

loois

Nuovo Utente
11 Giu 2017
14
1
3
23
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 ? ..
 

bubino8

Utente Attivo
28 Apr 2017
343
19
18
28
BZ
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="";
 

loois

Nuovo Utente
11 Giu 2017
14
1
3
23
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>
 

bubino8

Utente Attivo
28 Apr 2017
343
19
18
28
BZ
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.
 

bubino8

Utente Attivo
28 Apr 2017
343
19
18
28
BZ
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.
 

loois

Nuovo Utente
11 Giu 2017
14
1
3
23
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 ?
 

bubino8

Utente Attivo
28 Apr 2017
343
19
18
28
BZ
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
 

loois

Nuovo Utente
11 Giu 2017
14
1
3
23
No, non mi esce proprio nulla, mi da schermata bianca non mi carica nemmeno i post con le foto


- Loois
 

bubino8

Utente Attivo
28 Apr 2017
343
19
18
28
BZ
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).