Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - creazione tabella
Forum - PHP - creazione tabella

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Aangelus (Normal User)
Pro


Messaggi: 143
Iscritto: 29/03/2011

Segnala al moderatore
Postato alle 17:54
Martedì, 10/02/2015
Salve ragazzi quest'oggi mi si è presentato un problema con la creazione delle tabelle, cioè quando un nome utente è una parola intera tutto funziona benissimo, il problema insorge qualora è suddivisa in 2 o più parti. Di seguito posto il codice e relativo errore
Codice sorgente - presumibilmente Php

  1. $query = 'CREATE TABLE ' . $Nome . ' ( '.
  2. 'ID INT NOT NULL AUTO_INCREMENT, '.
  3. 'Hobby varchar(30) NOT NULL, '.
  4. 'Sport varchar(30) NOT NULL, '.
  5. 'descrizione di se varchar(400) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, '.
  6. 'PRIMARY KEY(ID))';


errore:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'bueno ( ID INT NOT NULL AUTO_INCREMENT, Hobby varchar(30) NOT NULL, Sport varc' at line 1

il nome in questo caso era el bueno
suggerimenti ??

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 20:10
Martedì, 10/02/2015
Come puoi vedere qui http://stackoverflow.com/a/18184652, se il nome di una tabella contiene spazi bisogna racchiuderlo tra apici; dato che nel tuo codice li usi come delimitatori della stringa, probabilmente dovrai sostituire questi ultimi con le virgolette. Quindi io farei:
Codice sorgente - presumibilmente Php

  1. $query = "CREATE TABLE '" . $Nome . "' ( ".
  2. "ID INT NOT NULL AUTO_INCREMENT, ".
  3. "Hobby varchar(30) NOT NULL, ".
  4. "Sport varchar(30) NOT NULL, ".
  5. "descrizione di se varchar(400) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, ".
  6. "PRIMARY KEY(ID))";



Comunque, mi pare strana la struttura di database che stai implementando... di solito non si fanno tabelle per ogni utente ma una tabella per tutti gli utenti.
In ogni caso, il codice lasciato così può essere vulnerabile ad attacchi SQL injection quindi è consigliabile implememtare una qualche strategia di protezione, ci sono varie discussioni in merito; a mio parere il modo più semplice è l'utilizzo della forma esadecimale della stringa con le funzioni bin2hex() di php e UNHEX() di mysql, come spiegato in questa risposta http://stackoverflow.com/a/12710285, in ogni caso ti consiglio di documentarti perchè esistono anche altri metodi (quella discussione di Stackoverflow secondo me è un'ottima fonte) come ad esempio quello dei prepared statements che forse è anche più "elegante".

PM Quote
Avatar
Aangelus (Normal User)
Pro


Messaggi: 143
Iscritto: 29/03/2011

Segnala al moderatore
Postato alle 20:24
Martedì, 10/02/2015
ti ringrazio per gli ulteriori consigli ;)

ho eseguito dei test ma ancora niente
solito problema
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''el bandito' ( ID INT NOT NULL AUTO_INCREMENT, Hobby varchar(30) NOT NULL, Sport' at line 1

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 21:39
Martedì, 10/02/2015
Scusa è colpa mia, ho fatto un errore stupidissimo, ho confuso l'apice normale (') con quello all'indietro, sempre che si chiami così (`), che è quello corretto come puoi vedere nella risposta alla discussione di Stackoverflow che ti ho linkato prima. Il codice corretto dovrebbe essere
Codice sorgente - presumibilmente Plain Text

  1. $query = "CREATE TABLE `" . $Nome . "` ( ".
  2. //eccetera


l'ho anche testato, spero di non aver dimenticato/sbagliato niente stavolta

PM Quote
Avatar
Aangelus (Normal User)
Pro


Messaggi: 143
Iscritto: 29/03/2011

Segnala al moderatore
Postato alle 22:01
Martedì, 10/02/2015
gn ti ringrazio molto e voglio cogliere l'occasione per farti sapere che ti ammiro come persona (anche se non ti conosco di persona) è stato molto piacevole leggere i tuoi consigli e le soluzioni, a volte ci si imbatte in commenti scortesi perdendo l'obbiettivo che si prefigge un forum
GRAZIE :)))

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 22:30
Martedì, 10/02/2015
Di nulla ;), comunque se il codice che stai scrivendo non è un semplice test ma andrà in un vero sito/applicazione web ti consiglio di approfondire il discorso della protezione da potenziali attacchi SQL injection (vedi post di prima).

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 9:21
Mercoledì, 11/02/2015
1) Non si moltiplicano le tabelle per gli utenti
2) Quella sintassi è totalmente vulnerabile ad attacchi sql injection

Cambia la strada che stai prendendo o quello che hai appena realizzato non vedrà mai la luce, e se lo farà sarà più pericoloso che maneggiare un tizzone ardente.

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 19:55
Mercoledì, 11/02/2015
Testo quotato

Postato originariamente da HeDo:

1) Non si moltiplicano le tabelle per gli utenti
2) Quella sintassi è totalmente vulnerabile ad attacchi sql injection


Non per criticare ma se leggi sopra gli avevo già fatto notare entrambe le cose

PM Quote
Avatar
Aangelus (Normal User)
Pro


Messaggi: 143
Iscritto: 29/03/2011

Segnala al moderatore
Postato alle 23:20
Mercoledì, 11/02/2015
Ciao ragazzi quello è una porzione di codice semplificato che userò come scheletro per un tipo totalmente diverso dagli utenti, per abitudine semplifico tutto il più possibile , ho preso il consiglio come elemento di studio.
nel continuare i miei test è sorto sempre sullo stesso codice un ulteriore problema :/  sarebbero parole con l'apostrofo

Ultima modifica effettuata da Aangelus il 12/02/2015 alle 1:49
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo