n° 219
Novembre 2017
Dicembre 14, 2017, 12:49:34 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: pagina registrazione utenti  (Letto 4828 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
Rober23
Newbie
*

Karma: +0/-1
Scollegato Scollegato

Messaggi: 40


Mostra profilo
« inserita:: Dicembre 24, 2012, 01:42:13 »

ciao a tutti,sto creando una pagina di registrazione utenti per un sito in asp.net.
al click del pulsante invio, nel page_load ho messo un codicee per verificare che lo username non sia già presente:

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If (IsPostBack) Then
Dim conString As String = "stringa di connessione"
Dim con As New SqlConnection(conString)
con.Open()
Dim cmStr As String = "Select COUNT(*) FROM Utenti WHERE UserName = " & TxtNome.Text
Dim userExist As SqlCommand = New SqlCommand(cmStr, con)
Dim temp As Integer = Convert.ToInt32(userExist.ExecuteScalar().ToString())
If (temp = 1) Then
Response.Write("Utente già esistente")
End If
con.Close()
End If
End Sub

in pratica il problema è che non mi riesce la select, ogni volta che metto nell'area txtNome un valore già esistente nel db, lui è come se non lo trovasse
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #1 inserita:: Dicembre 24, 2012, 09:04:23 »

Mancano gli apici singoli intorno alla variabile di tipo testo (TxtNome.Text).

Ti do alcuni consigli e spunti.
Di norma si tolgono gli eventuali caratteri spazio inseriti volontariamente o meno dall'utente:
TxtNome.Text.Trim()

Di norma il confronto per lo username è case insensitive, puoi usare semplicemente un "like" per il confronto (al 99% il tuo DB ha collation Latin1_General_CI_AS, dove CI indica "case insensitive") oppure ti segnalo l'utilizzo della funzione Upper (o Lower), perché so che stai usando un SQL Server:

Codice:
Select COUNT(*) FROM Utenti WHERE Upper(UserName) = Upper('[i]@username[/i]')

Ho volutamente usato la sintassi per le query con parametri, perché sono un'ottima cosa (perché, come), aumentano la leggibilità e prevengono dal SQL injection (il tuo codice è il classico esempio di vulnerabilità).

ciao
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #2 inserita:: Dicembre 26, 2012, 08:15:02 »

Hai preso la via delle query parametrizzate, bene, ma hai fatto un mix.
Usare il segnaposto nel testo del comando SQL ti esonera dall'uso degli apici, come nell'esempio del link del precedente post (il mio esempio di codice è errato), che invece sarebbero necessari nel caso di valori "in chiaro".
La Upper mi pare usata correttamente.

Usa anche TxtNome.Tex.Trim(), è una buona abitudine.
Registrato
Rober23
Newbie
*

Karma: +0/-1
Scollegato Scollegato

Messaggi: 40


Mostra profilo
« Risposta #3 inserita:: Dicembre 26, 2012, 08:39:22 »

fatto!!!

Dim cmStr As String = "Select COUNT(*) FROM Utenti WHERE UserName = @UserName"

Adesso riesce! Grazie mille!!!
Registrato
Rober23
Newbie
*

Karma: +0/-1
Scollegato Scollegato

Messaggi: 40


Mostra profilo
« Risposta #4 inserita:: Dicembre 26, 2012, 09:09:29 »

adesso ho un problemino...allora, il codice precedente l'ho messo nel page_load, mentre nell'evento botton_click il codice per l'inserimento dell'utente. anche se l'username esiste, lui mi dice che è già registrato ma lo registra ugualmente! cosa mi conviene fare?
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #5 inserita:: Dicembre 27, 2012, 02:41:43 »

Ho verificato e la sintassi con la funzione Upper che hai usato è corretta e funzionante:
Codice:
Dim cmStr As String = "Select COUNT(*) FROM Utenti WHERE Upper(UserName) = Upper(@username)"
Dato però che infine hai il risultato voluto omettendola non ho capito se ti sia ben chiaro o meno il concetto di case-sensitive per lo username.
Generalmente (non mi viene in mente un solo caso contrario) non si permette ad un applicativo di gestire utenti con username differenti per il solo CASE (lettere maiuscole/minuscole).
Se tu hai questa necessità, confermamelo, altrimenti l'uso della funzione Upper od in alternativa dell'operatore "like" sono praticamente indispensabili (vedi note del precedente post), a meno di fare un confronto tramite il linguaggio applicativo che si sta usando, ovvero dopo aver letto il dato (soluzione che personalmente adotto di solito).

Superato il problema specifico (e il dubbio) della query per la verifica dell'esistenza del nome utente vedremo quale altro problema hai incontrato e immagino qualcuno ti darà una mano.
Già da ora comunque ti dico che sarebbe oppurtuno che riportassi il codice usato perché, come spesso viene ricordato, senza sfera di cristallo solo tu conosci il codice prodotto e le logiche che hai applicato.
Soprattutto non vedo perché usare l'evento Load della pagina invece che fare la verifica nell'evento del bottone (ma questo é forse spiegato dal poco ortodosso uso della IsPostBack).

DEVO IMMAGINARE che nonostante tu abbia verificato che la username inserita è già usata il tuo codice non esce dalla funzione... ma mi sembra una spiegazione talmente banale che di certo occorrerà vedere il codice da te prodotto per trovare il vero problema.

Citazione
mi dice che è già registrato ma lo registra ugualmente! cosa mi conviene fare?
Ma prima di tutto, cerca di capire quanto sia ingenuo (e poco produttivo) pensare che qualcunaltro oltre a te possa dare un senso alla domanda che hai fatto (se tra un mese rileggerai questo post ti sarà immediatamente evidente). Ti faccio questa osservazione solo come nota costruttiva e per utilità comune, come il resto.

Il codice va postato inserendolo nell'apposito tag [ code ], operazione facilitata dall'apposito tasto "#" sulla seconda fila di bottoni. Fai una prova corregegndo magari i post precedenti.
Registrato
Rober23
Newbie
*

Karma: +0/-1
Scollegato Scollegato

Messaggi: 40


Mostra profilo
« Risposta #6 inserita:: Dicembre 27, 2012, 11:19:08 »

Ho sistemato tutto, utilizzando la funzione Upper e mettento tutto nell'evento click del bottone.
Grazie mille!!! Sorriso
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #7 inserita:: Dicembre 27, 2012, 12:26:06 »

Benissimo, buon lavoro/studio.

ciao
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines