Visualizzazione risultati 1 fino 8 di 8
Like Tree2Likes
  • 2 Post By mzanella

Discussione: Script "mi piace" e "non mi piace"

  1. #1
    socialedge non è connesso Utente giovane
    Data registrazione
    24-07-2016
    Residenza
    Aversa
    Messaggi
    60

    Exclamation Script "mi piace" e "non mi piace"

    Ho un grandissimo problema, da un po sto cercado uno scritp php e mysql che mi permetta di aggiungere la funzione mi piace e non mi piace a tutte le foto del mio sito.
    Il problema e che ne ho provati tanti ma nessuno fa al caso mio.
    Qualcuno che sa programmare, mica può darmi una mano? sto letteralmente sclerando da giorni ormai.

    per favore cerco un aiuto sostanziale.

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Senza le specifiche del sistema che intendi realizzare è difficile aiutarti.



  3. #3
    socialedge non è connesso Utente giovane
    Data registrazione
    24-07-2016
    Residenza
    Aversa
    Messaggi
    60

    Predefinito

    che tramite il clic sul bottone mi piace aggiunge la reazione alla tabella nel db chiamata photo.
    solo che non riesco a mettere in atto la cosa ad esempio ho provato a creare questa tabella

    CREATE TABLE IF NOT EXISTS `photo` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `userid` int(11) NOT NULL,
    `descrizione` varchar(150) NOT NULL,
    `dimensione` varchar(20) NOT NULL,
    `mipiace` longtext,
    `timestamp` int(12) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=54 ;
    mentre questo è lo scritp creato attorno

    <?php
    if (isset($_POST['btn-mipiace'])) {
    array_push($mipiace, $photo_id);
    $mipiaceserialize = serialize($mipiace);
    $query = "UPDATE photo SET mipiace='".$mipiaceserialize."' WHERE Id = $id";
    mysql_query($query);
    }
    elseif (isset($_POST['btn-nonmipiace'])) {
    $key = array_search($photo_id, $mipiace);
    unset($mipiace[$key]);
    $mipiaceserialize = serialize($mipiace);
    $query = "UPDATE photo SET mipiace='".$mipiaceserialize."' WHERE userId = $id";
    mysql_query($query);
    }
    ?>
    dove sta scritto where Id= $id"; voglio specificare ogni volta che venga cliccato il mi piace venga aggiunsto all'id della foto.

    mentre questo voglio che venga visto a schermo

    <div class="home-foto-wrapper">
    <?php
    include ("core/mipiace.php");
    array($photo_id, $mipiace)) {
    ?>
    <form method="post" action="">
    <button type="submit" class="btn-nonmipiace" name="btn-nonmipiace"><span>Non mi piace</span></button>
    </form>
    <?php
    } else { ?>
    <form method="post" action="">
    <button type="submit" class="btn-mipiace" name="btn-mipiace">Mi piace</button>
    </div>
    se hai capito e vuoi consigliarmi puoi modificare direttamente questi codici cosi mi dai una grande mano.
    mentre nel caso in cui è tutto sbagliato dammi qualche dritta.. per favore

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Continuano a non essere chiare le specifiche.
    Ad esempio:
    1. chi può indicare like o dislike ad una foto? Chiunque? Utenti registrati?
    2. il like/dislike può essere annullato (mettendo a disposizione un tasto "non mi piace più")?
    3. ad una foto è associato solo il numero di like/dislike o occorre tener traccia degli utenti che hanno espresso la preferenza?
    4. like e dislike sono due informazioni distinte (ad es. "10 people like the photo, 3 dislike it") oppure concorrono ad un unico valore (ad es. "the photo has 7 likes (10 like - 3 dislike)")?
    5. vanno memorizzate informazioni addizionali, come la data in cui un utente ha espresso la preferenza?
    6. OOP o procedurale?
    7. gli oggetti come sono/devono essere rappresentati nella base di dati?
    8. sincrono con ricamento della pagina o asincrono?
    9. ...


    Quello script è piuttosto strano, soprattutto perché inserisce nella base di dati la serializzazione di un vettore...

  5. #5
    socialedge non è connesso Utente giovane
    Data registrazione
    24-07-2016
    Residenza
    Aversa
    Messaggi
    60

    Predefinito

    1) solo gli utenti registrati possono mettere mi piace
    2) si il mi piace può essere annullato mettendo un tasto non mi piace
    3-4) si occorre tenere traccia degli utenti che hanno messo mi piace "luigi ha messo mi piace" oppure "luigi e altri 15 persone hanno messo mi piace " oppure "luigi ha messo un like" e a "Gianfranco non piace la foto"
    5) penso che quando l'utente ha messo mi piace
    6) gli oggetti devono essere rapprenderesti nella base dei dati
    7) procedurale
    8) il caricamento deve essere sincrono

    Si lo so lo script non va bene infatti non funziona manco .. ecco perché sto avendo problemi in questa cosa non so dove mettere le mani ..

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Supponendo di avere già una tabella per gli utenti ed una per le foto, entrambe con un campo id numerico, bisogna creare una tabella che rappresenti la relazione di like tra utenti e foto (relazione con attributi, molti a molti):
    Codice:
    CREATE TABLE IF NOT EXISTS `like` (
      `user_id` INT(11) NOT NULL,
      `photo_id` INT(11) NOT NULL,
      `timestamp` TIMESTAMP DEFAULT NOW(),
      PRIMARY KEY(`user_id`, `photo_id`)
    );
    A fare i fini andrebbe anche indicato che user_id e photo_id sono chiavi esterne che referenziano le tabelle degli utenti e delle foto.

    Dopodiché serve la parte PHP per interfacciarsi con la base di dati. Le funzioni da prevedere sono (almeno):
    • aggiunta di un like ad una foto da parte di un utente
    • rimozione di un like da una foto da parte di un utente (dislike)
    • recuperare la lista di utenti che ha espresso like per una foto
    • recuperare la lista di foto per cui un utente ha espresso un like
    • un predicato che indica se ad un utente piace una foto

    Che si traduce:
    Codice PHP:
    // Si suppone di avere le opportune funzioni di connessione alla base di dati, ecc.
    function database_connect() {
    $link = mysqli_connect(...);
    if (
    mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
    }

    return
    $link;
    }


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

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


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

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



    function
    photo_get_like_information($photo_id) {
    $link = database_connect();

    // Recupera le informazioni dalla base di dati
    $query = "SELECT user_id, timestamp FROM like WHERE photo_id = $photo_id";
    $result = mysqli_query($link, $query);
    if (!
    $result) {
    die (
    mysqli_error($link) . " while executing query: " . $query);
    }

    // Inserisce le informazioni in un vettore
    $data = array();
    while (
    $row = mysqli_fetch_assoc($result)) {
    $data[] = $row;
    }

    return
    $data;
    }



    function
    user_get_like_information($user_id) {
    $link = database_connect();

    // Recupera le informazioni dalla base di dati
    $query = "SELECT photo_id, timestamp FROM like WHERE user_id = $user_id";
    $result = mysqli_query($link, $query);
    if (!
    $result) {
    die (
    mysqli_error($link) . " while executing query: " . $query);
    }

    // Inserisce le informazioni in un vettore
    $data = array();
    while (
    $row = mysqli_fetch_assoc($result)) {
    $data[] = $row;
    }
    mysqli_free_result($result);

    return
    $data;
    }


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

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

    return
    mysqli_num_rows($result) != 0;
    }
    Potrebbero esserci errori di sintassi, e in ogni caso sarebbe bene usare i prepared statement.

    Ti serve quindi la logica di un controller:
    Codice PHP:
    if (isset($_POST['action'])) {
    $user_id = ... // letto probabilmente dalla sessione
    $photo_id = $_POST['photo_id'];
    $action = $_POST['action'];

    if (
    $action == 'like') {
    add_like($user_id, $photo_id);
    }
    elseif (
    $action == 'dislike') {
    remove_like($user_id, $photo_id);
    }
    }
    ed infine la vista con i moduli del caso:
    Codice PHP:
    <?php
    $user_id
    = ... // Letto probabilmente dalla sessione
    $photo_id = ... // Letto probabilmente da un parametro GET, rappresenta l'id della foto che si sta visualizzando

    $users_who_liked = photo_get_like_information($photo_id);
    ?>
    <div class="home-foto-wrapper">
    <img src="http://forum.it.altervista.org/php-mysql-e-apache-htaccess/path..." alt="...">

    <?php if (user_likes_photo($user_id, $photo_id): ?>
    <!-- Pulsante "non mi piace" -->
    <form method="POST">
    <button type="submit" class="btn-nonmipiace">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">
    <button type="submit" class="btn-mipiace">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>
    </div>
    Anche qui occhio a possibili errori di sintassi.

    Questo è più o meno il succo, i dettagli dipendono poi da cosa ti servirà.
    Ultima modifica di mzanella : 22-05-2017 alle ore 14.43.05
    darkwolf and socialedge like this.

  7. #7
    socialedge non è connesso Utente giovane
    Data registrazione
    24-07-2016
    Residenza
    Aversa
    Messaggi
    60

    Predefinito

    Ricapitolando inserisco la tabella che mi hai dato poi creo un file chiamato

    "core/like.php"
    Codice PHP:

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

    return
    $link;
    }


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

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


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

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



    function
    photo_get_like_information($photo_id) {
    $link = database_connect();

    // Recupera le informazioni dalla base di dati
    $query = "SELECT user_id, timestamp FROM like WHERE photo_id = $photo_id";
    $result = mysqli_query($link, $query);
    if (!
    $result) {
    die (
    mysqli_error($link) . " while executing query: " . $query);
    }

    // Inserisce le informazioni in un vettore
    $data = array();
    while (
    $row = mysqli_fetch_assoc($result)) {
    $data[] = $row;
    }

    return
    $data;
    }



    function
    user_get_like_information($user_id) {
    $link = database_connect();

    // Recupera le informazioni dalla base di dati
    $query = "SELECT photo_id, timestamp FROM like WHERE user_id = $user_id";
    $result = mysqli_query($link, $query);
    if (!
    $result) {
    die (
    mysqli_error($link) . " while executing query: " . $query);
    }

    // Inserisce le informazioni in un vettore
    $data = array();
    while (
    $row = mysqli_fetch_assoc($result)) {
    $data[] = $row;
    }
    mysqli_free_result($result);

    return
    $data;
    }


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

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

    return
    mysqli_num_rows($result) != 0;
    }
    "page/home.php"

    Codice PHP:
    <?php
    include ("core/mipiace.php");
    if (isset(
    $_POST['action'])) {
    $user_id = ... // letto probabilmente dalla sessione
    $photo_id = $_POST['photo_id'];
    $action = $_POST['action'];

    if (
    $action == 'like') {
    add_like($user_id, $photo_id);
    }
    elseif (
    $action == 'dislike') {
    remove_like($user_id, $photo_id);
    }
    }
    ?>
    <html>
    <head>
    </head>
    <body>
    <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" />
    </div>
    <?php
    $user_id
    = ... // Letto probabilmente dalla sessione
    $photo_id = ... // Letto probabilmente da un parametro GET, rappresenta l'id della foto che si sta visualizzando

    $users_who_liked = photo_get_like_information($photo_id);
    ?>
    <?php if (user_likes_photo($user_id, $photo_id): ?>
    <!-- Pulsante "non mi piace" -->
    <form method="POST">
    <button type="submit" class="btn-nonmipiace">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">
    <button type="submit" class="btn-mipiace">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>
    </div>

    </body>
    </html>
    giusto ?
    Ultima modifica di darkwolf : 23-05-2017 alle ore 09.45.15 Motivo: +php

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Sì, ovviamente sostituendo al posto dei puntini le informazioni opportune.

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •