Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Errori con cdosys

  1. #1
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304

    Errori con cdosys

    Ciao a tutti!
    Nel mio sito gli utenti possono iscriversi alla newsletter compilando un semplice form. Una volta spediti i dati, viene inviata un'e-mail (cdosys) con il riepilogo dei dati. Questi nel frattempo vengono salvati su db (fin qui funziona tutto).

    Nell'e-mail inserisco due link che consentono all'utente di confermare o annullare l'iscrizione. Qui sorgono dei problemi, penso di facile soluzione, ma al momento sono poco lucido e non ci arrivo da solo.

    Questo l'errore se annulla l'iscrizione:
    codice:
    Microsoft JET Database Engine error '80040e14' 
    
    Syntax error (missing operator) in query expression 'mail =mail_utente@hotmail.com'. 
    
    /mod-newsletter.asp, line 26

    Questo l'errore se conferma l'iscrizione:
    codice:
    Microsoft JET Database Engine error '80040e14' 
    
    Missing semicolon (;) at end of SQL statement. 
    
    /mod-newsletter.asp, line 20
    Altro problema: i link dell'e-mail inviata con cdosys non sono cliccabili (almeno legegndo il messaggio dalla pagina di hotmail).

    Infine, ecco il codice della pagina che conferma/annulla:

    Codice PHP:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>

    <!
    DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml">
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <
    title>Documento senza titolo</title>
    </
    head>

    <
    body>

    <%
    dim mailconfermaannullasqlNewsletter
    mail 
    request("mail")
    conferma request("conferma")
    annulla request("annulla")

    if 
    conferma <> "" then
        sqlNewsletter 
    "INSERT INTO iscritti (conferma) values ('"&conferma&"') where mail =" mail 
        objConn
    .execute (sqlNewsletter)    
        
    response.Redirect ("conferma.html")
    end if

    if 
    annulla <> "" then
        sqlNewsletter 
    "DELETE * FROM iscritti where mail =" mail 
        objConn
    .execute (sqlNewsletter)    
        
    response.Redirect ("annulla.html")
    end if


    %>
    </
    body>
    </
    html>
    <%
    objConn.close
    set objConn 
    nothing
    %> 
    Questa è invece la pagina che riceve i dati del form e invia l'e-mail:

    Codice PHP:
    <%
    'recupero dati
    dim nome, cognome, anno, sezione, mail, sqlNewsletter, conferma, annulla
        nome = request("nome")
        cognome = request("cognome")
        anno = request("anno")
        sezione = request("sezione")
        mail = request("mail")
        conferma= "www.nomesito.com/mod-newsletter.asp?conferma=ok&mail=" & mail
        annulla = "www.nomesito.com/mod-newsletter.asp?annulla=ok&mail=" & mail
    sqlNewsletter = "INSERT INTO iscritti (nome,cognome,anno,sezione,mail) values ('"&nome&"','"&cognome&"','"&anno&"','"&sezione&"','"&mail&"')"
    objConn.execute (sqlNewsletter)    
    '
    ********* SCRIPT CDOSYS ******************************************************            
    If 
    Request.ServerVariables("server_software") <> "Microsoft-IIS/5.1" Then

                Oggetto 
    "Iscrizione newsletter nomesito.com"
                
    IMG "http://www.nomesito.com/images/logo.jpg"
                
    Dim eMail
                Set eMail 
    CreateObject("CDO.Message")

    'Definiamo i diversi attributi della nostra mail
                eMail.From = "info@nomesito.com"
                eMail.To = mail
                eMail.Bcc = "webmaster@hotmail.com" 

                eMail.Subject = Oggetto
                        
                eMail.HTMLBody = "<html><body>[img] & IMG & [/img]

    "
                eMail.HTMLBody = eMail.HTMLBody & "


    "
                eMail.HTMLBody = eMail.HTMLBody & "Richiesta di iscrizione alla newsletter da parte di [b]" & nome & " " & cognome & "[/b]

    "
                eMail.HTMLBody = eMail.HTMLBody & "[b]<u>Dati del richiedente</u>[/b]: 

    "
                eMail.HTMLBody = eMail.HTMLBody & "
    [b]Anno di maturità[/b]: " & anno  
                eMail.HTMLBody = eMail.HTMLBody & "
    [b]Sezione[/b]: " & sezione  
                eMail.HTMLBody = eMail.HTMLBody & "
    [b]E-mail[/b]: " & mail & "


                eMail.HTMLBody = eMail.HTMLBody & "Per confermare l'
    iscrizione clicca sul link:

    "
                eMail.HTMLBody = eMail.HTMLBody & conferma & "

    "
                eMail.HTMLBody = eMail.HTMLBody & "
    Conserva questo messaggioIn qualunque momento puoi annullare l'iscrizione alla newsletter
    "
                eMail.HTMLBody = eMail.HTMLBody & "cliccando sul seguente link:

    "
                eMail.HTMLBody = eMail.HTMLBody & annulla
    '
    Stabiliamo il livello di importanza (1 o 2)
                
    eMail.Fields("urn:schemas:httpmail:importance").Value 1
                eMail
    .Fields.Update()
    'Inviamo la mail!
                eMail.Send()
                Set eMail = Nothing

    ELSE
                RESPONSE.Write("SU IIS NON POSSO INVIARE LA MAIL DI CONFERMA
    ")
    END IF
                response.Write(login)
        
    '
    ***** FINE SCRIPT CDOSYS *****************************************************    
        
        
        
    response.Redirect ("index.html")
        
    %>


    </
    body>
    </
    html>
    <%
    objConn.close
    set objConn 
    nothing
    %> 
    Grazie in anticipo all'anima pia che di domenica mi risponderà..

  2. #2
    per le prime due domande manca il simboletto ', dato che la mail è un campo testuale

    codice:
    if conferma <> "" then 
    "INSERT INTO iscritti (conferma) values ('"&conferma&"') where mail = '" & mail & "'"
    objConn.execute (sqlNewsletter)    
    response.Redirect ("conferma.html")
    end if 
    
    if annulla <> "" then
        sqlNewsletter = "DELETE * FROM iscritti where mail = '" & mail & "'"
        objConn.execute (sqlNewsletter)    
        response.Redirect ("annulla.html")
    end if
    per la terza domanda, devi racchiudere il link dentro il tag html <a href="">

    Ciau!
    - Dean

  3. #3
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    ciao Atari, grazie per la risposta!

    Ho provato a inserire l'apice come dicevi tu, ma il risultato non cambia..
    Pensando che l'errore potesse dipendere dallo script per acquisire il dato, ho provato in un secondo tentativo ad inserire l'apice anche nelle due variabili

    Codice PHP:
    conferma"www.nomesito.com/mod-newsletter.asp?conferma=ok&mail='" mail "'"
    annulla "www.nomesito.com/mod-newsletter.asp?annulla=ok&mail='" mail "'" 
    ma non funge ancora.

    Altra domandina, stupida, sui link dell'e-mail: ok, devo inserire il tutto in due link, solo che non so come farlo evitando che i doppi apici di href chiudano lo script asp.

    Codice PHP:
    eMail.HTMLBody eMail.HTMLBody "Per confermare l'iscrizione clicca sul link:

    "
                
    eMail.HTMLBody eMail.HTMLBody conferma "

    "
                
    eMail.HTMLBody eMail.HTMLBody "Conserva questo messaggio. In qualunque momento puoi annullare l'iscrizione alla newsletter
    "
                
    eMail.HTMLBody eMail.HTMLBody "cliccando sul seguente link:

    "
                
    eMail.HTMLBody eMail.HTMLBody "<a href=" annulla ">"           '<-- così???? 

  4. #4
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    Aggiornamento, i link adesso così funzionano, sono cliccabili:

    Codice PHP:
    conferma"<a href=www.ilrossomalpelo.com/mod-newsletter.asp?conferma=ok&mail=" &  mail ">conferma</a>."

    annulla "<a href=www.ilrossomalpelo.com/mod-newsletter.asp?annulla=ok&mail=" 

    mail ">link</a>." 
    Se clicco su annulla, i dati vengono correttamente cancellati dal db. Se clicco su conferma, invece, mi da l'errore di prima

    Codice PHP:
    Microsoft JET Database Engine error '80040e14' 

    Missing semicolon (;) at end of SQL statement

    /
    mod-newsletter.aspline 20 
    Riporto la linea 20
    Codice PHP:
    if conferma <> "" then
        sqlNewsletter 
    "INSERT INTO iscritti (conferma) values ('"&conferma&"') where mail = '" mail "'"
        
    objConn.execute (sqlNewsletter)        <<<linea 20
        response
    .Redirect ("conferma.html")
    end if 
    sono vicinissimo, lo sento...

  5. #5
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    Quello che non capisco è che le due istruzioni che passo coi due link "annulla" e "conferma" sono praticamente identiche: i valori li passo tramite querystring, quindi non possono essere nulli. Nè uso parole chiave che potrebbero farmi incappare in questo errore...
    E la clausola WHERE è anch'essa identica...

    Perchè una funziona e l'altra no???

  6. #6
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    uppo un po'...

  7. #7
    è sbagliato il comando sql
    Devi usare update per modificare un record, insert serve solo per aggiungere.
    codice:
    sql = "UPDATE iscritti SET conferma = '"&conferma&"'  where mail = '" & mail & "'"
    Per l'escape in asp(/vbs per i piu' pignoli :doh, usa la sequenza "". Ad esempio Response.Write("<a href=""p.asp"">....")

    Ciau!
    - Dean

  8. #8
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    giusto.....

    grazie mille, risolto!!!

  9. #9
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    Non apro un'altra discussione così mi riallaccio al codice che ho già inserito..

    Lo script dovrebbe essere corretto, solo che probabilmente qualcosa non funziona a dovere in tutta la fase di raccolta dati e registrazione alla newsletter.
    Il mio sistema funziona banalmente così, su server di Register (che non mi è piaciuto granchè..): in una pagina raccolgo i dati col form, che vengono inviati alla pagina iscrizione.asp. Una volta ricevute le info, subito le inserisco nella tabella "iscritti", quindi invio un'e-mail (cdosys) per chiedere la conferma all'utente. Una volta confermata l'iscrizione, un contatore nella home somma il numero totale di utenti confermati. Finchè l'utente non conferma, quel numero non si aggiorna.

    E non si sta aggiornando, il problema è questo.
    Vorrei capire se si tratta di un problema di codice malfunzionante o di "accessibilità", comprensione della procedura di iscrizione. Perchè nonostante le richieste di iscrizione che mi arrivano, non arrivano le conferme.

    Pagina "iscrizione.asp"
    Codice PHP:

    <html>
    <
    head>

    <
    meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <
    title></title>
    </
    head>
    <
    body>

    <%
    'recupero dati
    dim nome, cognome, anno, sezione, mail, sqlNewsletter, conferma, annulla
        nome = request("nome")
        cognome = request("cognome")
        anno = request("anno")
        sezione = request("sezione")
        mail = request("mail")
        conferma= "<a href=www.sito.it/mod-newsletter.asp?conferma=conf&mail=" & mail & ">conferma</a>."
        annulla = "<a href=www.sito.it/mod-newsletter.asp?annulla=ok&mail=" & mail & ">link</a>."
            url_conferma = "www.sito.it/mod-newsletter.asp?conferma=conf&mail=" & mail 
        url_annulla =  "www.sito.it/mod-newsletter.asp?annulla=ok&mail=" & mail

    sqlNewsletter = "INSERT INTO iscritti (nome,cognome,anno,sezione,mail) values ('"&nome&"','"&cognome&"','"&anno&"','"&sezione&"','"&mail&"')"
    objConn.execute (sqlNewsletter)    
    '
    ********* SCRIPT CDOSYS ******************************************************            
    If 
    Request.ServerVariables("server_software") <> "Microsoft-IIS/5.1" Then

                Oggetto 
    "Iscrizione newsletter sito.it"
                
    IMG "http://www.sito.it/images/logo.jpg"
                
    Dim eMail
                Set eMail 
    CreateObject("CDO.Message")

    'Definiamo i diversi attributi della nostra mail
                eMail.From = "mail2@hotmail.com"
                eMail.To = mail
                eMail.Bcc = "mail1@hotmail.com" 

                eMail.Subject = Oggetto
                        
                eMail.HTMLBody = "<html><body>[img] & IMG & [/img]

    "
                eMail.HTMLBody = eMail.HTMLBody & "


    "
                eMail.HTMLBody = eMail.HTMLBody & "Richiesta di iscrizione alla newsletter da parte di [b]" & nome & " " & cognome & "[/b]

    "
                eMail.HTMLBody = eMail.HTMLBody & "[b]<u>Dati del richiedente</u>[/b]: 

    "
                eMail.HTMLBody = eMail.HTMLBody & "
    [b]Anno di maturità[/b]: " & anno  
                eMail.HTMLBody = eMail.HTMLBody & "
    [b]Sezione[/b]: " & sezione  
                eMail.HTMLBody = eMail.HTMLBody & "
    [b]E-mail[/b]: " & mail & "


                eMail.HTMLBody = eMail.HTMLBody & "Per portare a termine l'
    iscrizioneclicca sul link"
                eMail.HTMLBody = eMail.HTMLBody & conferma & "
    ,
    oppure copia e incolla il seguente indirizzo sul tuo browser

    "
                eMail.HTMLBody = eMail.HTMLBody & url_conferma
                eMail.HTMLBody = eMail.HTMLBody & "

    Conserva questo messaggioIn qualunque momento puoi annullare l'iscrizione alla newsletter
    "
                eMail.HTMLBody = eMail.HTMLBody & "cliccando sul seguente "
                eMail.HTMLBody = eMail.HTMLBody & annulla & " oppure copiando e incollando il seguente indirizzo sul tuo browser: 

    "
                eMail.HTMLBody = eMail.HTMLBody & url_annulla
    '
    Stabiliamo il livello di importanza (1 o 2)
                
    eMail.Fields("urn:schemas:httpmail:importance").Value 1
                eMail
    .Fields.Update()
    'Inviamo la mail!
                eMail.Send()
                Set eMail = Nothing

    ELSE
                RESPONSE.Write("SU IIS NON POSSO INVIARE LA MAIL DI CONFERMA
    ")
    END IF
                response.Write(login)
        
    '
    ***** FINE SCRIPT CDOSYS *****************************************************    
        
        
        
    response.Redirect ("index.asp")
        
    %>


    </
    body>
    </
    html>
    <%
    objConn.close
    set objConn 
    nothing
    %> 
    Nell'e-mail che arriva all'utente, c'è il link da cliccare oppure - visto che spesso in alcuni client di posta o siti non funge - da copiare e incollare. Questo sia per la conferma che per la cancellazione.

    La pagina che tramite querystring riceve i dati ha questo codice:

    Codice PHP:
    <%
    dim mailconfermaannullasqlNewsletter
    mail 
    request("mail")
    conferma request("conferma")
    annulla request("annulla")

    if 
    conferma <> "" then
        sqlNewsletter 
    "UPDATE iscritti SET conferma = '"&conferma&"'  where mail = '" mail "'"
        
    objConn.execute (sqlNewsletter)    
        
    response.Redirect ("conferma.html")
    end if

    if 
    annulla <> "" then
        sqlNewsletter 
    "DELETE * FROM iscritti where mail = '" mail "'"
        
    objConn.execute (sqlNewsletter)    
        
    response.Redirect ("annulla.html")
    end if


    %> 
    Secondo voi cosa non va o dovrei migliorare? I dati arrivano, non la conferma.
    Grazie ancora..

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 © 2026 vBulletin Solutions, Inc. All rights reserved.