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)..
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)..
certo che c'è il modo ;) basta che usi la funzione explode
In PHP puoi usare explode(",",$string) per crearti un array delle varie parole
mmm da php.net c'era questo:
array explode ( string $delimiter , string $string [, int $limit ] )
quindi diventa
giusto? (PS: ho messo punto e virgola, era meglio della virgola dato che alcuni nickname la contengono)Codice PHP:
$parole = explode(';', $variabiledallinput);
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
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!
regolamento altervista_______________ regolamento forum
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 ..
...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:
..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 queryCodice 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."')");
Ciao!
Ultima modifica di alemoppo : 21-04-2011 alle ore 12.02.12
regolamento altervista_______________ regolamento forum
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?)
Questo non è sbagliato, ma totalmente inutile: basta che l'explode abbia come separator il ";"
Qui c'è un count($temp), ma l'array l'hai chiamato $num
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:
mentre i nomi dei campi, come credo tu sappia bene, non possono essere identici. Diverso sarebbe nomecampo_1, nomecampo_2 ecc.Codice:nome_campo | nome_campo | nome_campo | pippo | pluto | paperino
Per ottenere un insert multiplo, lo script da usare è questo:
CiaoCodice:$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 ");
Ultima modifica di webeginner : 21-04-2011 alle ore 11.14.33 Motivo: aggiunto il trim()
Beh, questa mattina non ero in vena, veramente.
In effetti ho mescolato php, js.... Ho fatto un bel casino ...
Comunque:
E perché dovrei aprirla, scusa?Poi se non apri e chiudi con la graffa
..E' vero che ho scritto minkiate, ma non esagerare: quelli non li ciclo :Pcicli anche "$nome_campi = subst" e "mysql_query("INSERT INTO"
che ovviamente non è cosa buona né giusta
Passando al tuo, guardando di sfuggita:
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...Codice PHP:
for ($i=0; $i < count($arParole); $i++) {
Ciao!
EDIT:
OMG:
Originalmente inviato da alemoppo
Ultima modifica di alemoppo : 21-04-2011 alle ore 12.00.47
regolamento altervista_______________ regolamento forum
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
Da una domanda ho creato caos.