Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB.NET] Ciclo while che non funge come vorrei

    Spero sia un problema dovuto all'ora tarda perchè non so più come sbatterci la testa.
    E' un ciclo semplicissimo che miserve per un'autenticazione dopo aver inserito username e password.
    Vi posto la parte del codice incriminato:
    codice:
    MySQL = "SELECT * FROM tab_check " & _
                        "WHERE username = '" & txtUSer.Text & "' AND password = '" & txtPsw.Text & "'"
                    Do While MyDr.Read = True
    
                    If txtUSer.Text = MyDr.Item("username") And txtPsw.Text = MyDr.Item("password") Then
                        MsgBox("Riconoscimento effettuato con successo!", MsgBoxStyle.Information, "Accesso consentito")
                    Else
                        MsgBox("Failed", MsgBoxStyle.Information, "Accesso consentito")
                    End If
    
                Loop
    L'autenticazione funziona, ma perchè se metto dei valori che trovano riscontro nel database non mi mostra il msgbox che mi avverte che il login è fallito?
    Sarà una stupiadaggine ma non riesco a capire il perchè?
    Grazie come sempre e buonanotte

  2. #2
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,582
    io farei cosi...
    codice:
    
    MySQL = "SELECT * FROM tab_check " & _
                        "WHERE username = '" & txtUSer.Text & "' AND password = '" & txtPsw.Text & "'"
    
    if Mydr.hasrows=true then
            MsgBox("Riconoscimento effettuato con successo!", MsgBoxStyle.Information, "Accesso consentito")
        Else
                        MsgBox("Failed", MsgBoxStyle.Information, "Accesso consentito")
      End If
    in quanto il controllo lo fai direttamente nella select...vai a cercare una password che sia =** e un user che sia ***
    se lo trovi (mydr.hasrows=true) significa che esiste
    altrimenti no


    p.s.
    il mydr.hasrows fa parte de lframeword 1.1
    cmq nn vedo l'executereader(il codice lo prendo come se tu lo avessi fatto)
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  3. #3
    giusto, se faccio tutto nella select non c'è bisognod i fare un ciclo del genere.
    Grazie mille Kahm, non conoscevo nemmeno la proprietà hasrows.
    Sì l'executereader c'era, ma avevo messo solo il codice interessato.

    A questo punto vorrei chiederti un'altra cosa:
    questa autenticazione la faccio su un secondo form che si apre sopra al principale con ilmetodo showdialog.
    Nel momento incui l'autenticazione è ok ho bisogno di passare un valore al form sottostante. Ho provato così ma non funziona:
    myform1.label1.text = "qualcosa"
    Ed ho provato anche ad inserirlo in una variabile globale, ma continua a non funzionare.
    Come posso fare?
    Grazie

  4. #4

    Re: [VB.NET] Ciclo while che non funge come vorrei

    Originariamente inviato da zetaweb
    codice:
    MySQL = "SELECT * FROM tab_check " & _
                        "WHERE username = '" & txtUSer.Text & "'
    Un consiglio spassionato. Se devi solo verificare che ci sia un record nella tabella forse il miglior modo e' quello di fare una SELECT COUNT(*) FROM ... WHERE ... ed eseguirla con un command.executescalar invece di scomodare un datareader. Poi piu' in generale e' sempre buona regola usarei parametri soprattutto quando c'e' l'imput dell'utente e quindi ad es.
    codice:
    sql = "SELECT COUNT(*) FROM tabella WHERE username = @user AND pass = @pass"
    tuocommand.parameters.add("@user", sqltype.....).value = "valore"
    tuocommand.parameters.add("@pass", sqltype.....).value = "valore"
    conn.open
    risultato = tuocommand.executescalar 
    conn.close
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.