Risultati da 1 a 8 di 8
  1. #1
    Lo Zio L'avatar di Menion83
    Data Registrazione
    23-11-03
    Località
    Roma
    Messaggi
    3,645

    Predefinito Modificare i dati di un database tramite login utente

    Ciao Ragazzi!
    Ho un problema con una modifica. Ho creato un Database e all'interno di questo database c'è una tabella che contiene vari dati.
    Ho necessità per gli utenti di poter far loro modificare i dati qualora si siano sbagliati in fase di registrazione. Ho creato quindi una pagina login_modifica e ho fatto una form che in base al campo password e nome_utente, indirizzasse la pagina modifica sui campi di quel determinato utente. Il problema è che mi da questo errore:

    ADODB.Recordset error '800a0bcd'

    Either BOF or EOF is True, or the current record has been deleted.
    Requested operation requires a current record.

    Il Recordset esiste non ci sono dubbi perchè se vado in modifica da Dreamweaver e inserisco la password e l'username, forzandolo, mi visualizza la pagina con tutti i dati dell'utente.

    Il dubbio è che forse non passa i dati in modo corretto...

    Nella login ho fatto una form chiamata Login e ho messo due campi di testo: Password e Utente. Poi da Dream mi sono connesso al database e ho fatto il login utente con la procedura, infatti la pagina Modifica me la apre.

    Sulla pagina modifica eseguo questa query:

    SELECT *
    FROM tabelle
    WHERE password LIKE 'varpassword' AND utente LIKE 'varutente'

    Nell'interrogazione definisco le varibili varpassword e varutente in questo modo:

    varpassword - predefinito=1 - Request.form("password")
    varutente - predefinito=1 - Request.form("utente")

    Ma niente.

    Ho provato anche interrogando la query:

    varpassword - predefinito=1 - Request.QueryString("password")
    varutente - predefinito=1 - Request.QueryString("utente")

    Niente.

    Come posso risolvere questo errore?

    Vi ricordo che forzando il predefinito delle variabili, cioè mettendo al posto di 1 il nome utente e la password e aprendo direttamente la pagina modifica, funziona alla perfezione. Deve essere quindi qualcosa che passa male dalla form della pagina login, ma cosa?

    Spero in un vostro aiuto!
    CIAO!

  2. #2
    Lo Zio L'avatar di Menion83
    Data Registrazione
    23-11-03
    Località
    Roma
    Messaggi
    3,645

    Predefinito Riferimento: Modificare i dati di un database tramite login utente

    Niente?

  3. #3

    Predefinito Riferimento: Modificare i dati di un database tramite login utente

    Citazione Originariamente Scritto da Menion83
    SELECT *
    FROM tabelle
    WHERE password LIKE 'varpassword' AND utente LIKE 'varutente'
    intanto qui ti conviene cambiare LIKE con =

    Nell'interrogazione definisco le varibili varpassword e varutente in questo modo:

    varpassword - predefinito=1 - Request.form("password")
    varutente - predefinito=1 - Request.form("utente")
    ora non mi ricordo di preciso come si dichiaravano le variabili in ASP, ma queste due sopra non mi sembrano molto corrette, cosa dovrebbero fare ? (sopratutto il "1 -" prima dei Request, che dovrebbe fare ?)

    Come posso risolvere questo errore?
    ricontrolla la dichiarazione delle variabili, la connessione e la creazione del recordset.
    Di più non saprei, al limite posta la parte di codice incriminata (il messaggio di errore ti dovrebbe dare anche a che linea si è verificato) cosi da verificare meglio la situazione.

  4. #4
    Lo Zio L'avatar di Menion83
    Data Registrazione
    23-11-03
    Località
    Roma
    Messaggi
    3,645

    Predefinito Re: Riferimento: Modificare i dati di un database tramite login utente

    Citazione Originariamente Scritto da mad Dwarf Visualizza Messaggio
    intanto qui ti conviene cambiare LIKE con =



    ora non mi ricordo di preciso come si dichiaravano le variabili in ASP, ma queste due sopra non mi sembrano molto corrette, cosa dovrebbero fare ? (sopratutto il "1 -" prima dei Request, che dovrebbe fare ?)



    ricontrolla la dichiarazione delle variabili, la connessione e la creazione del recordset.
    Di più non saprei, al limite posta la parte di codice incriminata (il messaggio di errore ti dovrebbe dare anche a che linea si è verificato) cosi da verificare meglio la situazione.
    Grazie per la risposta! L'uso della LIKE apporta notevoli benefici alla ricerca di un campo in un database vasto ed è per questo che la uso al posto dell' =. Certo non stiamo al livello di ricerca FULL-TEXT ma sto utilizzando una semplice connessione ADO ad un database Access e non MySql.
    Tornando alle variabili, in Dreamweaver c'è una tabella con 3 colonne, proprio sotto la dichiarazione della Query. Con il + aggiungi le condizioni e con il - le togli. Il primo campo è il nome, nel mio caso varpassword. Nel secondo campo il valore predefinito, 1. Nel terzo campo il valore Run-Time cioè quello che viene inserito nella Form di invio dati della pagina correlata. Con request.form capisce che la sto inviando dalla Form precedente e le invia alla nuova pagina senza modificare la stringa di URL. Con request.QueryString identifica le variabili e le inserisci in fondo alla stringa URL della nuova pagina aperta tipo http://www.nome.asp?varpassword=pass...rutente=utente .
    In nessuno dei due modi funziona però.
    Il messaggio di errore mi identifica il primo Campo di testo della pagina Modifica perchè non trova nulla e quindi da errore. Il bello è che nel database i dati ci sono!!!
    Se vi viene in mente qualcos'altro, dichiarazione delle variabili in modo diverso ecc.. fatemi sapere!
    CIAO!

  5. #5
    Il Nonno L'avatar di vaitrafra
    Data Registrazione
    23-09-01
    Località
    Scandiano
    Messaggi
    6,024

    Predefinito Re: Modificare i dati di un database tramite login utente

    non è vero in maniera assoluta che il like è più performate, comunque sia nel tuo caso specifico se io come password e nome utente inserisco la stringa

    ' OR '1'='1

    oppure il simbolo di percentuale come Password e come nome utente, il tuo recordset sarà prontamente riempito con TUTTI gli utenti del tuo database.

    Grazie al like avrò accesso garantito al tuo db.
    Quindi, al di la dell'errore, usa l'uguale ed evitati problemi.
    Soprattutto fai una bella routine di parsing e dichiara illegali tutte quelle stringhe che contengono wild Charachters e spazi.

    Riguardo alla tua spieg. non ci ho capito tanto, posso solo dirti con certezza che quando un recordset punta contemporaneamente a BOF ed EOF vuole dire che è vuoto e qualcosa nell'interrogazione è andato storto. Debugga.

    Se usi un campo asterisk per visualizzare la password come una serie di asterischi, assicurati di usare il metodo che restituisce la stringa immessa e non gli asterischi.
    Ultima modifica di vaitrafra; 21-09-06 alle 14:22:26

  6. #6
    Lo Zio L'avatar di Menion83
    Data Registrazione
    23-11-03
    Località
    Roma
    Messaggi
    3,645

    Predefinito Re: Modificare i dati di un database tramite login utente

    Citazione Originariamente Scritto da Aragorn Visualizza Messaggio
    non è vero in maniera assoluta che il like è più performate, comunque sia nel tuo caso specifico se io come password e nome utente inserisco la stringa

    ' OR '1'='1

    oppure il simbolo di percentuale come Password e come nome utente, il tuo recordset sarà prontamente riempito con TUTTI gli utenti del tuo database.

    Grazie al like avrò accesso garantito al tuo db.
    Quindi, al di la dell'errore, usa l'uguale ed evitati problemi.
    Soprattutto fai una bella routine di parsing e dichiara illegali tutte quelle stringhe che contengono wild Charachters e spazi.

    Riguardo alla tua spieg. non ci ho capito tanto, posso solo dirti con certezza che quando un recordset punta contemporaneamente a BOF ed EOF vuole dire che è vuoto e qualcosa nell'interrogazione è andato storto. Debugga.

    Se usi un campo asterisk per visualizzare la password come una serie di asterischi, assicurati di usare il metodo che restituisce la stringa immessa e non gli asterischi.
    Mhh non male come metodo. Cmq ho risolto scrivendomi la pagina grazie a degli script trovati qua e la per la rete.

    Questo è il succo del procedimento adottato:

    Set Recordset1 = Server.CreateObject ("ADODB.RecordSet")
    strSQL = "SELECT * FROM Utenti WHERE username='" & str_username & "' AND password='" & str_password & "'"
    Recordset1.open strSQL,adoCon

    'Se la combinazione username e password non esiste, reindirizzo l'utente ad un altra pagina
    If Recordset1.EOF _
    Or Recordset1.BOF Then
    Response.Redirect("errore.asp")
    Else
    'Scrivo l'user code nel cookie
    Response.Cookies("Login")("userCode") = Recordset1("code")
    'Reindirizzo alla pagina appropriata
    Response.redirect("visualizza_profilo.asp")
    End If
    End if

    In questo modo mi passa tramite la FORM con i campi di testo Username e Password il valore scritto dall'utente e mi indirizza alla pagina modifica con tutti i dati associati.
    CIAO!

  7. #7
    Il Nonno L'avatar di vaitrafra
    Data Registrazione
    23-09-01
    Località
    Scandiano
    Messaggi
    6,024

    Predefinito Re: Modificare i dati di un database tramite login utente

    Per cominciare comincia col testare che il Recordset (rs) sia sia BOF che EOF.

    If rs.BOF AND rs.EOF then
    Else
    Endif
    Perchè ci sono driver di Database che ritornano il recordset puntato al BOF e col tuo metodo di test nache se il recordset è popolato la pagina ritoranta sarebbe comunque errore.asp

    Per il resto ti ho detto, debugga, fai uscire una msgbox con la stringa della query PRIMA di eseguirla sulla connessione in modo da vedere che valori vengono salvati in str_username e str_password.

    di più nin zo.

  8. #8
    Scooterone mon amour L'avatar di Pongo
    Data Registrazione
    28-10-04
    Località
    Altrove
    Messaggi
    7,600

    Predefinito Re: Modificare i dati di un database tramite login utente

    Citazione Originariamente Scritto da Aragorn Visualizza Messaggio
    non è vero in maniera assoluta che il like è più performate, comunque sia nel tuo caso specifico se io come password e nome utente inserisco la stringa

    ' OR '1'='1

    oppure il simbolo di percentuale come Password e come nome utente, il tuo recordset sarà prontamente riempito con TUTTI gli utenti del tuo database.

    Grazie al like avrò accesso garantito al tuo db.
    Quindi, al di la dell'errore, usa l'uguale ed evitati problemi.
    Soprattutto fai una bella routine di parsing e dichiara illegali tutte quelle stringhe che contengono wild Charachters e spazi.

    Riguardo alla tua spieg. non ci ho capito tanto, posso solo dirti con certezza che quando un recordset punta contemporaneamente a BOF ed EOF vuole dire che è vuoto e qualcosa nell'interrogazione è andato storto. Debugga.

    Se usi un campo asterisk per visualizzare la password come una serie di asterischi, assicurati di usare il metodo che restituisce la stringa immessa e non gli asterischi.

    SQL injection, brutta bestia!!! Usa i REQUIREDFIELDVALIDATOR sul controllo per evitare che si scrivano robe strane!!! Magari fai mettere una belle e-mail al posto del nome utente e diaciamo che ti salvi!!! Almeno penso!!

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato