Visualizzazione risultati 1 fino 11 di 11

Discussione: Mostrare testo (o parte di esso) in base a utente

  1. #1
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito Mostrare testo (o parte di esso) in base a utente

    Ciao a tutti.
    Ho un form impostato su un select:

    Codice HTML:
    <form action="main.php?page=values" method="post">
        <select name=values>
        <option value="A">1</option>
        <option value="B">2</option>
        <option value="C">3</option>
        </select>
        </form>
    Nella pagina values, eseguo l'insert e, in base all'opzione scelta, codifico un testo:

    Codice PHP:
    if (query('get',$_POST['values'])=='A') {
    $text = "Text A (Sub-text A)";
    } elseif (
    query('get',$_POST['values'])=='B') {
    $text = "Text B (Sub-text B)";
    } elseif (
    query('get',$_POST['values'])=='C') {
    $text = "Text C (Sub-text C)";
    }

    query_ok("INSERT INTO chat (id, user, text) VALUES ('$id', '$login', '$text')");
    Una volta eseguito l'insert, nella fase di SELECT, quando specifico risultato deve essere mostrato, dovrei mostrarlo in maniera diversa in base all'utente che legge.
    Nello specifico:

    a) If user == $login -> Text A/B/C (Sub-text A/B/C)
    b) If user != $login -> Text A/B/C

    Questa è la parte dove seleziono i risultati:

    Codice PHP:
    $show= query_ok("SELECT chat.*, user.*
    FROM chat
    LEFT JOIN user ON user.name = chat.user
    WHERE chat.id = "
    .$_SESSION['id_chat']."
    ORDER BY id"
    , 'result');

    while (
    $row = query_ok($show, 'fetch'))
    {
    //results
    }

  2. #2
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito

    Ho provato ad agire tramite array:

    Codice PHP:
    if (query('get',$_POST['values'])=='A') {
    $text = [
    'user' => 'Text A (Sub-text A)',
    'not_user' => 'Text A'
    ];
    } elseif (
    query('get',$_POST['values'])=='B') {
    $text = [
    'user' => 'Text B (Sub-text B)',
    'not_user' => 'Text B'
    ];
    } elseif (
    query('get',$_POST['values'])=='C') {
    $text = [
    'user' => 'Text C (Sub-text C)',
    'not_user' => 'Text C'
    ];
    }
    in modo da valorizzare poi:

    a) If user = $login -> $text['user]

    b) If user != $login -> $text['not_user]

    ma nella fase di INSERT mi esce solo la parola "Array".

    Hm sono confuso.

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,708

    Predefinito

    Nel primo codice, a naso dovrebbe funzionare. In quel caso, cosa vale la query?
    Codice PHP:
    query_ok("INSERT INTO chat (id, user, text) VALUES ('$id', '$login', '$text')");
    Nell'ultimo codice, se $text è un array, non può essere una stringa, a meno che tu non specifichi la chiave dell'array.

    Comunque, dovresti fare un po' di debug spargendo "echo" o "var_dump()" o simil nei punti di interesse per vedere se quel codice viene eseguito correttamente (ad esempio, se il codice esegue gli assegnamenti delle stringhe).

    Ciao!
    Ultima modifica di alemoppo : 08-01-2023 alle ore 15.15.50

  4. #4
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Nel primo codice, a naso dovrebbe funzionare. In quel caso, cosa vale la query?
    Codice PHP:
    query_ok("INSERT INTO chat (id, user, text) VALUES ('$id', '$login', '$text')");
    Ti ringrazio della risposta.
    In questo caso funziona solo parzialmente, giacché il messaggio viene inserito nella tabella nella sua interezza (ossia "Text a/b/c (sub-text a/b/c" - In base all'opzione scelta), dunque sia che chat.user sia $login o meno, il testo stampato è quello.

    Il mio obiettivo, invece è che quel testo:
    - Se chat.user che legge il risultato è = $login > Text A/B/C (Sub-text a/b/c)... Dunque testo intero

    - Se chat.user che legge il risultato NON è = $login > Text A/B/C... Dunque solo prima parte del testo

    Per questo stavo pensando ad un array, sebbene non sappia come valorizzarlo

  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,708

    Predefinito

    Potresti mostrare il codice "intero"? Cioè non capisco bene, ad esempio dove è la parte dove dovrebbe esser assegnata solo la prima parte del testo (nell'implementazione senza array).

    Ciao!

  6. #6
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Potresti mostrare il codice "intero"? Cioè non capisco bene, ad esempio dove è la parte dove dovrebbe esser assegnata solo la prima parte del testo (nell'implementazione senza array).

    Ciao!
    Ti ringrazio ancora della risposta.
    Guarda, in realtà il codice è pressoché il medesimo mostrato. Nel dettaglio:

    pagina_comandi.inc.php

    Codice HTML:
    <form action="main.php?page=values" method="post">
        <select name=values>
        <option value="Oggetto">Usa l'oggetto</option>
        <option value="Dialogo">Usa il dialogo</option>
        <option value="Arma">Usa l'arma</option>
        </select>
        </form>
    values.inc.php (è una pagina "invisibile", che si chiude subito e che serve a operare un valore)

    Codice PHP:
    $login = $_SESSION['login'];
    $id = $_SESSION['id_chat'];

    //setto messaggio intero da inserire nella tabella chat

    if (query('get',$_POST['values'])=='Oggetto') {
    $text = "$login sceglie di usare l'oggetto (questo oggetto ti permette di bla bla)";
    } elseif (
    query('get',$_POST['values'])=='Dialogo') {
    $text = "$login sceglie di usare il dialogo (il dialogo ti permette di bla bla)";
    } elseif (
    query('get',$_POST['values'])=='Arma') {
    $text = "$login sceglie di usare arma (arma ti permette di bla bla)";
    }

    query_ok("INSERT INTO chat (id, user, text) VALUES ('$id', '$login', '$text')");

    echo
    "<script type='text/javascript'> document.location = 'main.php?page=pagina_comandi'; </script>";
    /*Redirigo alla pagina dei comandi*/
    Tutto questo funziona perfettamente, e non ho alcun problema con l'inserimento del testo.
    Il testo viene inserito nella sua interezza.

    Questo testo poi lo recupero con il SELECT nella pagina in cui compaiono tutti i risultati relativi a $id:

    Codice PHP:
    $show= query_ok("SELECT chat.*, user.*
    FROM chat
    LEFT JOIN user ON user.name = chat.user
    WHERE chat.id = "
    .$_SESSION['id_chat']."
    ORDER BY id"
    , 'result');

    while (
    $row = query_ok($show, 'fetch'))
    {
    //results
    }
    Tutto funziona perfettamente,
    Il mio unico problema è che, usando il form select di pagina_comandi.inc.php, il risultato deve essere visulizzato in 2 modi diversi, ossia:

    se chat.user == $login -> vede tutto $text (incluso il messaggio tra le due parentesi)
    se chat.user != $login -> vede solo la prima parte di $text (senza il messaggio tra le due parentesi)

    è qui che nasce il mio gap.
    Non so come rendere questa funzionalità e non so se agire direttamente nell'insert o agire nel SELECT/WHILE
    Ultima modifica di personalthings : 08-01-2023 alle ore 19.27.43

  7. #7
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,708

    Predefinito

    Ma la prima parte del testo è salvata da qualche parte? Oppure occorre eliminarla? Se occorre eliminarla, potresti fare una cosa del tipo:
    Codice:
    $show= query_ok("SELECT chat.*, user.*
    FROM chat
    LEFT JOIN user ON user.name = chat.user
    WHERE chat.id = ".$_SESSION['id_chat']."
    ORDER BY id", 'result');
    
    while ($row = query_ok($show, 'fetch'))
    {
      $messaggio = $row['chat.text'];
      if($row['chat.user'] != $_SESSION['login'])
      {
        //elimino tutti i caratteri dopo la aperta tonda
        $messaggio = substr($messaggio, 0, strpos($messaggio, '('));
      }
    }
    Ciao!
    Ultima modifica di alemoppo : 08-01-2023 alle ore 19.46.33

  8. #8
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Codice:
    $show= query_ok("SELECT chat.*, user.*
    FROM chat
    LEFT JOIN user ON user.name = chat.user
    WHERE chat.id = ".$_SESSION['id_chat']."
    ORDER BY id", 'result');
    
    while ($row = query_ok($show, 'fetch'))
    {
      $messaggio = $row['chat.text'];
      if($row['chat.user'] != $_SESSION['login'])
      {
        //elimino tutti i caratteri dopo la aperta tonda
        $messaggio = substr($messaggio, 0, strpos($messaggio, '('));
      }
    }
    Questa potrebbe essere una soluzione. Tuttavia, il problema si porrebbe per tutte quelle frasi postate in chat che, con il select "values" non hanno nulla a che fare e che contengono una (

  9. #9
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,708

    Predefinito

    Occorre trovare un pattern comune (lunghezza, contenuti, presenza caratteri, etc).
    Oppure queste stringhe sono salvate da qualche parte?

    Ciao!

  10. #10
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Occorre trovare un pattern comune (lunghezza, contenuti, presenza caratteri, etc).
    Oppure queste stringhe sono salvate da qualche parte?

    Ciao!
    No, non sono salvate da nessuna parte. È direttamente il form select che genera quel messaggio.
    Quando parlo di altri messaggi inseriti che con il select non hanno nulla a che fare, mi riferisco al fatto che è una semplice chat.
    Dunque c'è la barra in cui l'utente scrive liberamente ciò che vuole:

    Codice PHP:
    <form action="pages/chat.inc.php?ref=10&chat=yes" method="post" target="chat_frame" id="chat_form_messages">

    <input name="text" value="">
    <input type="submit" value="<?php echo query_filter('out', $MESSAGE['interface']['forms']['submit']); ?>" />
    <input type="hidden" name="op" value="new_chat_message" />

    </form>

    //insert stesso di su
    Di fianco questo form ho quel select.

  11. #11
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Beh io vedo l'istruzione SQL INSERT INTO che memorizza i dati.
    Il difficile è perché il form HTML conserva solo i dati necessari e non una scelta. Non puoi semplicemente chat.user != $login perché manca la correlazione con il form HTML a limite come proposto da @alemoppo con chat.user != $login recuperi la prima parte di testo (una sottostringa) da chat.text indipendentemente se un semplice messaggio o che fù creato dal form html.
    Ultima modifica di darbula : 10-01-2023 alle ore 00.03.34

Regole di scrittura

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