Visualizzazione risultati 1 fino 13 di 13

Discussione: Explode su variabile PHP recuperata da DB Mysql

  1. #1
    Guest

    Exclamation Explode su variabile PHP recuperata da DB Mysql

    Ragazzi è tutto il giorno che cerco in rete, ma niente non riesco a trovare un codice funzionante! Vi espongo il mio problema.

    Ho una tabella mysql che contiene un capo di nome "user_read_uc" il quale è aggiornato ogni volta che viene visitata la pagina. All'interno vengono scritti i nick degli utenti, presi da un cookie salvato al momento del login.

    Sul database viene salvato in questo modo:

    Codice:
    utente1:utente2:utente3:utente4
    La mia necessità è quella di recuperare questa variabile, e dividire tutti i nick, e questo lo si fa con la funzione EXPLODE, che mi crea un array! Solo che non so come utilizzarlo.

    Lo script in sostanza mi deve analizzare ogni singolo nick salvato sul DB e confrontarlo con l'utente che stà visitando la pagina (quindi con la varibile presa dal cookie) e poi tramite un if, gestisco le varie funzioni.

    Per maggiore chiarezza questo è il codice che ho utilizzato, ma senza risultati.

    Codice PHP:

    $user_read_uc
    = $resrowuc[2]; //Variabile recuperata dalla query

    if($user_read_uc == ""){

    mysql_db_query($db_database,"update ultimo_commento set user_read_uc='".$nick_cookie."' WHERE id_topic_uc='".$id."'",$myconn);

    }else{

    $explode = explode(":",$user_read_uc);

    $numuser = count($explode);

    for(
    $i = 0; $i < count($explode); $i++)

    {

    for(
    $x=0; $x<$numuser; $x++)

    {

    if(
    $explode[$i] <> $nick_cookie){

    $nick_read = ":$nick_cookie";
    $update = "$user_read_uc$nick_read";

    mysql_db_query($db_database,"update ultimo_commento set user_read_uc='".$update."' WHERE id_topic_uc='".$id."'",$myconn);

    }
    }
    }

    }
    Non credo sia complicatissimo, ma non riesco proprio a trovare la luce!!

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Puoi risolvere tutto usando una singola query, evitando di scrivere righe di codice php.
    Codice PHP:
    mysql_query("UPDATE ultimo_commento SET user_read_uc = TRIM(CONCAT(user_read_uc, ' $nick_cookie')) WHERE a NOT RLIKE '[[:<:]]$nick_cookie[[:>:]]'");
    Questa query aggiunge $nick_cookie se non è presente all'interno del campo user_read_uc, nel quale i nick sono separati da uno spazio automaticamente (fa tutto la query).
    Puoi sostituire questa riga con tutto il codice che hai postato, incluso la query che estrae user_read_uc dal database.

    Ti consiglio, inoltre, di fare un controllo sul valore del cookie verificando che corrisponda effettivamente ad un nickname esistente nel database.

    P.S. mysql_db_query è una funzione deprecata, usa mysql_query invece.
    Ultima modifica di javascripter : 06-02-2012 alle ore 18.30.21

  3. #3
    Guest

    Predefinito

    mi da questo errore:

    Parse error: syntax error, unexpected '[', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /membri/theothers/view_offtopic.php on line 144

    EDIT: Ho eliminato l'errore inserendo la variabile tra ". ." in questo modo:

    Codice PHP:
    mysql_query("UPDATE ultimo_commento SET user_read_uc = TRIM(CONCAT(user_read_uc, ' $nick_cookie')) WHERE a NOT RLIKE '[[:<:]]".$nick_cookie."[[:>:]]' AND id_topic_uc='".$id."'");
    Ma non mi scrive nulla sul db, inoltre rispetto alla riga di codice che mi hai dato ho inserito anche un AND dove specifico l'id che deve modificare...Ma come ho detto sopra non scrive nulla =(
    Ultima modifica di javascripter : 06-02-2012 alle ore 19.25.27 Motivo: up/post consecutivo

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Come effettui la connessione al database?
    E controlla cosa ti restuisce mysql_error:
    Codice PHP:
    mysql_query("UPDATE ultimo_commento
    SET user_read_uc = TRIM(CONCAT(user_read_uc, '
    $nick_cookie'))
    WHERE a NOT RLIKE '[[:<:]]
    {$nick_cookie}[[:>:]]'
    AND id_topic_uc =
    $id") || die(mysql_error());

  5. #5
    Guest

    Predefinito

    Ho aggiunto la variabile della connessione al DB in questo modo:

    Codice PHP:
    mysql_query("UPDATE ultimo_commento SET user_read_uc = TRIM(CONCAT(user_read_uc, ' $nick_cookie')) WHERE a NOT RLIKE '[[:<:]]{$nick_cookie}[[:>:]]' AND id_topic_uc = $id", $myconn) || die(mysql_error());
    e mi da questo errore:

    Codice:
    Unknown column 'a' in 'where clause'

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Ah già :).
    Mi dispiace, è stata una mia svista...
    a deve essere user_read_uc, quindi:
    Codice PHP:
    mysql_query("UPDATE ultimo_commento SET user_read_uc = TRIM(CONCAT(user_read_uc, ' $nick_cookie')) WHERE user_read_uc NOT RLIKE '[[:<:]]{$nick_cookie}[[:>:]]' AND id_topic_uc = $id", $myconn);

  7. #7
    Guest

    Predefinito

    Funziona tutto! Perfetto, Solo una cosa, questo funziona quando nel DB esiste quella riga con quell'id specifico, ma come faccio a fare un controllo che verifica l'esistenza di quella riga con quell'id? senza l'ausilio di un IF, utilizzando questo codiche che mi hai fornito tu. Facendo si che se non esiste la crea, e se esiste la aggiorna con il codice che mi hai dato, sono stato chiaro?
    Ultima modifica di theothers : 06-02-2012 alle ore 19.55.31

  8. #8
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Se il campo id è una primary key, puoi benissimo usare la sintassi INSERT INTO ... ON DUPLICATE KEY UPDATE ...

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Se il campo id è una primary key, puoi benissimo usare la sintassi INSERT INTO ... ON DUPLICATE KEY UPDATE ...
    no il campo con l'id che mi serve non è primario...

  10. #10
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Allora puoi renderlo primario oppure fare un controllo con una query aggiuntiva.

  11. #11
    Guest

    Predefinito

    non riuscivo a renderlo primario, ma ho risolto, avevo un auto_increment, che ho reso "manuale" e ho risolto, senti ora torno al punto di partenza, quasi, Adesso tutto funziona come deve, l'utente visualizza la pagina e il suo nick si aggiunge alla lista, ora però ho la necessità di estrapolare da quell'unica variabile ogni singolo nick e fare un controllo con un IF, come posso procedere?


    EDIT:


    ho trovato una soluzione, solo che questo metodo mi ignora il primo nick dell'aray quello contrassegnato con il numero "[0]" mi parte sempre dal numero [1], quindi se l'array ha questa composizione: utente1:utente2:utente3, l'IF mi esegue il controllo solo utente2 e utente3, come posso risolvere?


    Codice PHP:
    $resrowa = mysql_fetch_row($resulta);
    $user_read_uc = $resrowa[0];
    $titolo_uc = $resrowa[1];

    $users = explode(" ",$user_read_uc);

    foreach (
    $users as $user)
    {

    if (
    $user == $nick_cookie)

    {
    $color="#ffffff";
    }else{
    $color="#cfb429";
    }
    }



    echo
    "<a style='color:$color;' href='#'>$titolo_uc</a><br />";
    Ultima modifica di theothers : 07-02-2012 alle ore 11.50.57

  12. #12
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Strano.
    Se nel db i valori vengono salvati in questo modo: utente1:utente2:utente3, devi cambiare il primo parametro di explode.

    Controlla il valore effettivo dell'array restituito da explode (con var_dump o print_r).
    Inoltre, per controllare se un valore è presente in un array, puoi usare la funzione in_array evitando di usare foreach (e qualsiasi altro tipo di loop).
    Ultima modifica di javascripter : 07-02-2012 alle ore 15.35.57

  13. #13
    Guest

    Predefinito

    Risolto così:

    Codice PHP:
    $querya = "SELECT user_read_uc, titolo_uc FROM ultimo_commento ORDER BY id_order_uc DESC";
    $resulta = mysql_query($querya, $myconn) or die('Errore...3a');
    $numrowsa = mysql_num_rows($resulta);

    if (
    $numrowsa == 0) {
    echo
    "<tr><td><b> Non segui nessun topic. </b></td></tr>";
    } else {
    for(
    $x = 0; $x < $numrowsa; $x++) {
    $resrowa = mysql_fetch_row($resulta);
    $user_read_uc = $resrowa[0];
    $titolo_uc = $resrowa[1];

    $users = explode("#", $user_read_uc);

    $color = "#cfb429";
    if (
    in_array($nick_cookie, $users)) {
    $color = "#ffffff";
    }

    echo
    "<a style='color:$color;' href='#'>$titolo_uc</a><br />";
    }
    }
    ?>
    Ultima modifica di theothers : 07-02-2012 alle ore 16.25.19

Regole di scrittura

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