Problema creazione tabella tramite PHP

bwasizi

Nuovo Utente
21 Ago 2009
15
0
0
Buongiorno avrei un piccolo problemino....ho creato un'accesso con nome utente e password ed appena l'utente viene registrato viene creata una tabella personale in un database mysql. Il mio problema è che se l'utente immette caratteri non alfanumerici (tipo ',- ecc...) il database non mi permette la creazione della tabella....ora è vero che posso ovviare con str_replace col php co i caratteri più comuni ma non sarebbe possibile fare accettare tali caratteri al database nella creazione della tabella? (nel'inserimento delle righe non ho alcun problema, e la collation è la stessa per tutto il db: "latin1_swedish_ci") :confused:
Grazie per l'attenzione, attendo risposte :D:D
 

bwasizi

Nuovo Utente
21 Ago 2009
15
0
0
ma se è un problema di charachter set allora perchè nelle righe me lo fa inserire? (cioè se faccio un'insert tutto ok, se faccio create table...errore..me lo chiedevo giusto così, prima di modificare decine di tabelle...):D
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Ma nella create table non dovrebbero esserci riferimenti ai dati inseriti dall'utente. Con quell'istruzione crei semplicemente una nuova tabella con le rispettive colonne, a meno che non tenti di creare colonne con caratteri non standard.

P.S.
Comunque non capisco la necessità di creare nuove tabelle per ogni utente. Sarebbe più corretto e logico avere delle tabelle specifiche che andranno a contenere i dati dei vari utenti registrati. A meno che tu non abbia qualche esigenza particolare che mi sfugge.
 

bwasizi

Nuovo Utente
21 Ago 2009
15
0
0
...ad ogni utente è associata una squadra che prende il nome dal nome utente....quindi una volta registrato creo una tabella col nome utente...l'unica cosa che non va con determinati caratteri è il nome della tabella...se contiene caratteri "speciali" non alfanumerici mi dà errore...
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
tieni conto prima di tutto che mysql prevede delle parole riservate che non possono essere utilizzate per i nomi di tabella, l'elenco lo trovi qui.
In secondo luogo sono possibili problemi di compatibilita' con il set ascii esteso, meglio utilzzare set di caratteri ascii dal 32 fino a 127.
In alternativa potresti ripulire i nomi utente con i caratteri speciali eliminandoli tramite reg exp.
 

programmatore

Utente Attivo
21 Ago 2009
111
0
0
programmatore.altervista.org
Se quando crei un nuovo cliente crei una nuova tabella ti troverai ben presto con un database umanamente ingestibile (es. 1000 tabelle oltre a quelle del db). Ogni query sarà un suicidio, oltre al problema che incontreresti se un utente 'indovina' il nome di una delle tue tabelle del db già esistenti, è proprio un metodo sbagliato: devi sicuramente creare dei record, non delle tabelle!

Ad ogni modo per ovviare all'inconveniente dei nomi, puoi sempre usare l'id dell'utente per creare la tabella. Mi spiego meglio.
Ipotizzo che la tabella utente sia:
UTENTE(id, nome, password), dove id è un contatore ed è la chiave primaria (di solito si fa così).
Supponiamo che hai il seguente record (utente nuovo appena registrato):
[123, 'pippo', 'pwd']

A questo punto anziché creare la tabella usando UTENTE.nome (cioè "pippo"), crei la tabella "tabutente123" (usando appunto l'id, preceduto da un prefisso che vuoi tu, in questo caso 'tabutente').
In questo modo la tabella sarà sempre creabile.
 

bwasizi

Nuovo Utente
21 Ago 2009
15
0
0
In alternativa potresti ripulire i nomi utente con i caratteri speciali eliminandoli tramite reg exp.

è una funzione php? sarebe ottima ora cerco....

Se quando crei un nuovo cliente crei una nuova tabella ti troverai ben presto con un database umanamente ingestibile (es. 1000 tabelle oltre a quelle del db). Ogni query sarà un suicidio, oltre al problema che incontreresti se un utente 'indovina' il nome di una delle tue tabelle del db già esistenti, è proprio un metodo sbagliato: devi sicuramente creare dei record, non delle tabelle!

Ad ogni modo per ovviare all'inconveniente dei nomi, puoi sempre usare l'id dell'utente per creare la tabella. Mi spiego meglio.
Ipotizzo che la tabella utente sia:
UTENTE(id, nome, password), dove id è un contatore ed è la chiave primaria (di solito si fa così).
Supponiamo che hai il seguente record (utente nuovo appena registrato):
[123, 'pippo', 'pwd']

A questo punto anziché creare la tabella usando UTENTE.nome (cioè "pippo"), crei la tabella "tabutente123" (usando appunto l'id, preceduto da un prefisso che vuoi tu, in questo caso 'tabutente').
In questo modo la tabella sarà sempre creabile.

Perdonami, io non sono un esperto di database ma sapevo che i database sono fatti apposta per gestire una grande quantita di tabelle....ad esempio mi ricordo che un forum phpbb conteneva quasi 400 tabelle e funzionava senza problemi...tra l'altro non le userei mai congiuntamente con dei JOIN, ma una alla volta...
cmq ottima la soluzione dell'esempio a cui non avevo pensato....grazie..:fonzie:
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
I database gestiscono grandi quantità di dati e non di tabelle. Nonostante ciò nulla ti vieta di creare decine di tabelle, ma ciò non toglie che si tratta di una strategia assolutamente errata.
Se devi associare una squadra ad ogni utente sarebbe molto più corretto e performante avere solo due tabelle (utenti e squadre). Nella tabella utenti avrai una foreign key che lega un particolare utente alla sua squadra.
 
Ultima modifica:

programmatore

Utente Attivo
21 Ago 2009
111
0
0
programmatore.altervista.org
Non cercherei la regex. Ti complichi la vita.
Ti spiego con un esempio: i nomi utente "-pippo!", "!pippo","p-i-p-p-o" verrebbero tutti trasformati dalla regex in "pippo". Risultato: dovresti inventarti un modo per avere 3 nomi diversi che siano validi (che è il problema dal quale eri partito).

Per il fatto delle 400 tabelle, sono d'accordissimo con te: database con molte tabelle non sono problematiche, finché però queste sono fisse e ben definite. Se qualcuno indovina per caso il nome di una tua tabella 'fissa' non ne verresti più fuori.

ad ogni utente è associata una squadra che prende il nome dal nome utente

Avrai la tabella UTENTE(id, nome, ...altri dati...),
COMPONENTE_SQUADRA(id, id_utente, nome_componente, ...altri dati...).
In entrambi i casi, id è chiave primaria, di tipo contatore.
Il nome della squadra la leggerai da UTENTE.nome (inutile ricopiarla altrove).
In COMPONENTE_SQUADRA ci sono tutti i componenti della squadra.
id_utente conterrà il valore id dell'utente (campo UTENTE.id).

Esempio pratico:
UTENTE(5, 'user123',...)
COMPONENTE_SQUADRA(1, 5, 'pippo')
COMPONENTE_SQUADRA(2, 5, 'pluto')
COMPONENTE_SQUADRA(3, 5, 'paperino')
Risultato: l'utente 'user123' ha la squadra 'user123' composta da pippo, pluto e paperino.
 

bwasizi

Nuovo Utente
21 Ago 2009
15
0
0
Vi ringrazio per le risposte, vi ripeto che sono un mezzo principiante...

Nonostante ciò nulla ti vieta di creare decine di tabelle, ma ciò non toglie che si tratta di una strategia assolutamente errata.
ok, sarà meglio che riveda il progetto...

Se qualcuno indovina per caso il nome di una tua tabella 'fissa' non ne verresti più fuori.
il resto l'ho capito, ma questa non mi è chiara...ho un database mysql protetto da nome utente e password...è così facile bucarlo?:confused:

e per fissa intendi senza foreign key?
 

programmatore

Utente Attivo
21 Ago 2009
111
0
0
programmatore.altervista.org
il resto l'ho capito, ma questa non mi è chiara...ho un database mysql protetto da nome utente e password...è così facile bucarlo?:confused:

e per fissa intendi senza foreign key?

Per 'fissa' intendo che non viene creata 'al volo', ma che la crei durante la creazione del database (per intenderci). Ad esempio la tabella 'utente' deve esistere ed esisterà sempre nel tuo database, mentre la tabella pippo creata per l'utente pippo c'è solo se si registra un utente con nome pippo.
Ipotizziamo che quando un utente cancella l'account rimuovi anche la sua tabella. Quindi mi iscrivo come 'pippo', crei la tabella 'pippo'. Poi cancello l'account e rimuovi la tabella 'pippo'. Tutto ok.
Se però il mio account è 'utente', ci saranno degli errori in creazione della tabella (esiste già), quando cancello l'account, ti fai fuori tutti gli utenti in un colpo solo.
Questo è un esempio di cosa potrebbe succedere. Praticamente stai dando il potere ad un utente qualunque di creare e distruggere tabelle a suo piacimento. Con tabutente + id_utente la cosa è già più sicura (anche se ancora non bella da fare).
 

bwasizi

Nuovo Utente
21 Ago 2009
15
0
0
Compreso il tutto, io avevo ovviato a questo problema mandando un messaggio all'utente al momento dell'errore in fase di creazione e non creando successivamente l'utente...
 
Discussioni simili
Autore Titolo Forum Risposte Data
N [MYSQL] Problema creazione tabella MySQL 2
G Problema con la creazione di una tabella form PHP 9
Z Problema database creazione tabella Database 0
P Problema creazione tabella database mysql PHP 9
T [php] problema creazione query select-where PHP 5
Emix Problema con creazione form css/mobile HTML e CSS 3
momeraths [WordPress] Problema creazione di uno shortcode WordPress 2
L [PHP] Problema creazione query a numero di parametri variabile PHP 6
T [Photoshop] Problema creazione pennello personalizzato [RISOLTO] Photoshop 3
loois Ho un problema nella creazione di un sistema di commenti in PHP PHP 11
C [PHP] Problema con creazione csv PHP 3
C Problema con creazione array PHP 7
R Problema con la creazione file PHP 2
P Problema creazione form con ajax PHP 1
C usare un foglio php per la creazione di un excel: piccolo problema PHP 2
M problema creazione nuova area widget WordPress 0
L problema creazione query con campo float PHP 2
F Problema creazione sondaggio dinamico jQuery 6
F Problema formattazione data e creazione array con nuove date Javascript 2
Emix Creazione DdT e Fatture... Problema Form. Javascript 16
S Problema creazione android virtual device Sviluppo app per Android 1
G Problema nella creazione di un'area protetta PHP 10
L problema creazione template con guida mrwebmaster.it WordPress 0
carter Problema creazione dinamica file txt PHP 2
Longo8 Problema creazione galleria di foto PHP 5
A Problema nella creazione di un area protetta!!!! Classic ASP 3
LaKanka Problema creazione thumb solo con alcune immagini PHP 5
H Problema creazione sitemap con A1 sitemap generator Web Server 1
G Problema creazione sitemap SEO e Posizionamento 1
Danilo82 Problema con sito web in fase di creazione HTML e CSS 3
P Problema creazione cookie PHP 3
M Problema con Try Catch PHP 0
C problema seo + cerco esperto SEO e Posizionamento 1
Sergio Unia Problema con gli eventi del mouse su una data table: Javascript 2
T PROBLEMA CON SESSIONI PHP 3
A Problema, non so, di scale() o transform, oppure altro? HTML e CSS 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
I PROBLEMA: Sostituzione sito XAMPP E-Commerce 0
T problema data 30/11/-1 PHP 0
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Y Problema incolonnamento tabella PHP 7
S problema salvataggio immagini Photoshop 0
Z Problema con INT MySQL PHP 1

Discussioni simili