Visualizzazione risultati 1 fino 14 di 14

Discussione: Estrarre piu' parole da un solo input text

  1. #1
    Guest

    Predefinito Estrarre piu' parole da un solo input text

    Salve, vorrei sapere se c'è modo per far sì che in input text ci siano varie parole (esempio: ciao,ciao2,ciao3) e col php si prendano tali parole (e quindi la virgola funge da divisore tra le parole)..

  2. #2
    palla000 non è connesso Utente attivo
    Data registrazione
    12-07-2008
    Residenza
    trieste
    Messaggi
    278

    Predefinito

    certo che c'è il modo ;) basta che usi la funzione explode

  3. #3
    Guest

    Predefinito

    In PHP puoi usare explode(",",$string) per crearti un array delle varie parole

  4. #4
    Guest

    Predefinito

    mmm da php.net c'era questo:

    array explode ( string $delimiter , string $string [, int $limit ] )

    quindi diventa

    Codice PHP:
    $parole = explode(';', $variabiledallinput);
    giusto? (PS: ho messo punto e virgola, era meglio della virgola dato che alcuni nickname la contengono)

    Già che ci sono si può agire sull' array creato con un foreach? ovvero crea tante query quante sono le parole trovate con explode..E (scusate ancora) c'è un modo per stampare tutte le parole a video?
    Ultima modifica di exabyte : 20-04-2011 alle ore 22.46.24

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

    Predefinito

    Per il foreach(), perché non provi prima di postare? ...il risultato dell'explode è un array, quindi non vedo perché non si potrebbe usare.

    Per contare il numero di elementi, c'é count()

    Ciao!

  6. #6
    Guest

    Predefinito

    sì ma rimane un problema.. Praticamente lui deve inserire in un db una query per ogni parola trovata con l' explode() , quindi come faccio? Ovviamente ogni query deve inserire una parola diversa. Se ad esempio ci sono due parole: ciao e lol , lui crea una query dove inserirà ciao e una dove inserirà lol ..

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da exabyte Visualizza messaggio
    Se ad esempio ci sono due parole: ciao e lol , lui crea una query dove inserirà ciao e una dove inserirà lol ..
    Codice PHP:
    $stringa="ciao, lol, pippo";
    $arParole=explode(',', $stringa);

    for (
    $i=0; $i < count($arParole); $i++) {
    $parola=trim($arParole[$i]);

    $sql = "INSERT INTO nomeTabella (nome_campo) VALUES ('$parola')";
    mysql_query($sql);

    }

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

    Predefinito

    ...Oppure in un'unica query (molto meglio, a livello di prestazioni): prima però o non devi permettere di utilizzare nick con la virgola (mai visti ), oppure devi prima sostituire la virgola con un carattere speciale, che poi riconvertirai quando lo mostri a video.


    EDIT: museo degli orrori:
    Codice PHP:
    $stringa = 'ciao; lol; pippo';

    $stringa = str_replace(';",",',$stringa); //hai detto che come delimitatore ha il ";"

    $num = explode(',',$stringa);
    $num = count($temp);

    $nome_campi = '';
    for(var
    i=0;i<num;i++)
    $nome_campi += 'nome_campo, ';
    $nome_campi = substr($nome_campi, 0, -2); //elimino ultimo spazio bianco e ultima virgola

    mysql_query("INSERT INTO nomeTabella (".$nome_campi.") VALUES ('".$stringa."')");
    ..però non credo sia funzionante: a parte che non l'ho provato, poi occorre aggiungere i ' prima e dopo ogni valore nella query. Questo modo è vero che è meno ottimizzato, ma ti consente di effettuare solo una query

    Ciao!
    Ultima modifica di alemoppo : 21-04-2011 alle ore 12.02.12

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    ...Oppure in un'unica query (molto meglio, a livello di prestazioni):
    Non c'è dubbio, ma exabyte dice espressamente "Praticamente lui deve inserire in un db una query per ogni parola trovata con l' explode()".

    Perché non accontentarlo?

    Ora però permettimi un'osservazione: col tuo script hai fatto un pastrocchio micidiale (sei di spirito, vero?)

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Codice PHP:
    $stringa = str_replace(';",",',$stringa); //hai detto che come delimitatore ha il ";"
    Questo non è sbagliato, ma totalmente inutile: basta che l'explode abbia come separator il ";"

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    $num = explode(',',$stringa);
    $num = count($temp);
    Qui c'è un count($temp), ma l'array l'hai chiamato $num

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    $nome_campi = '';
    for(var i=0;i<num;i++)
    $nome_campi += 'nome_campo, ';
    Questo è il "pastrocchio" di cui sopra

    nelle parentesi del ciclo ( [niente var] $i=0; $i < $num; $i++)

    Poi l'operatore di concatenazione in php è ".=" non "+=".

    Poi se non apri e chiudi con la graffa ($i=0; $i < $num; $i++) {
    $nome_campi .=
    }

    cicli anche "$nome_campi = subst" e "mysql_query("INSERT INTO"
    che ovviamente non è cosa buona né giusta

    Ma c'è una cosa che proprio non va: cioè, concatenando sempre uno stesso nome_campo, dovresti avere una tabella così fatta:

    Codice:
    nome_campo | nome_campo | nome_campo |
    pippo              |  pluto            |  paperino
    mentre i nomi dei campi, come credo tu sappia bene, non possono essere identici. Diverso sarebbe nomecampo_1, nomecampo_2 ecc.

    Per ottenere un insert multiplo, lo script da usare è questo:

    Codice:
    $stringa="ciao; lol; pippo"; 
    $arParole=explode(';',$stringa); 
    $valori="VALUES ";
    for ($i=0; $i < count($arParole); $i++) {
     $valori .="('". trim($arParole[$i]) . "'),";
    }
    $valori=substr($valori,0,-1);
    mysql_query("INSERT INTO nomeTabella (nome_campo) $valori ");
    Ciao
    Ultima modifica di webeginner : 21-04-2011 alle ore 11.14.33 Motivo: aggiunto il trim()

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

    Predefinito

    Citazione Originalmente inviato da webeginner Visualizza messaggio
    Ora però permettimi un'osservazione: col tuo script hai fatto un pastrocchio micidiale (sei di spirito, vero?)
    Beh, questa mattina non ero in vena, veramente.

    In effetti ho mescolato php, js.... Ho fatto un bel casino ...

    Comunque:
    Poi se non apri e chiudi con la graffa
    E perché dovrei aprirla, scusa?

    cicli anche "$nome_campi = subst" e "mysql_query("INSERT INTO"
    che ovviamente non è cosa buona né giusta
    ..E' vero che ho scritto minkiate, ma non esagerare: quelli non li ciclo :P

    Passando al tuo, guardando di sfuggita:
    Codice PHP:
    for ($i=0; $i < count($arParole); $i++) {
    Non è una gran cosa mettere il count li: ovviamente il valore del count è "costante", quindi perché richiamarlo count($arParole) volte quando ne basta una?... dovresti usare una variabile temporanea per non ricalcolare ogni volta il tutto...

    Ciao!

    EDIT:

    OMG:
    Citazione Originalmente inviato da alemoppo
    Codice PHP:
    str_replace(';",",',$stringa)
    Ultima modifica di alemoppo : 21-04-2011 alle ore 12.00.47

  11. #11
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Citazione Originalmente inviato da webeginner Visualizza messaggio
    Per ottenere un insert multiplo, lo script da usare è questo:
    Ora riscriviamolo in php

    Codice PHP:
    $stringa = "ciao; lol; pippo";

    $arParole = explode(';', $stringa);

    // c'e' qualcosa da aggiungere?
    if ($arParole)
    {
    $arParole = array_map('mysql_real_escape_string', // escape per sicurezza
    array_map('trim', // tutti gli spazi in una volta sola
    $arParole ) );

    // lo & permette di modificare l'array su cui cicla
    foreach ($arParole as &$parola)
    $parola = '(\'' . $parola . '\')';

    // apici per i nomi dei campi e delle tabelle per pulizia
    // implode() per riattaccare con il giusto numero di virgole
    $query = "INSERT INTO `nomeTabella` (`nome_campo`) VALUES " . implode(', ', $arParole);

    $result = mysql_query($query);
    }
    Ultima modifica di dreadnaut : 21-04-2011 alle ore 14.38.41

  12. #12
    Guest

    Predefinito

    Da una domanda ho creato caos.

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Se dal caos esce una risposta, hai avuto successo.

  14. #14
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Ora riscriviamolo in php
    Ottima traduzione

Regole di scrittura

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