Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630

    Paginazione diversa in mysql

    Salve,
    come posso modificare questa navigazione tra le pagine :
    codice:
    Response.Write "<A href='"&istring&"?page="&page
    Response.Write "&cat="&request.querystring("cat")
    Response.write "'>"
    Response.write "<font size=2 color=#000080>"
    Response.Write page
    Response.Write "</A> - "
    Next
    Response.Write ""
    In modo che non mi stampi a video tutti i link a tutte le pagine come fa ora, ma che sia una navigazione tipo google: 1-2-3 >>, oppure in alternativa: <<indietro - avanti>>
    Grazie
    G

  2. #2
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    592
    Il codice incompleto non permette risposte se non generiche....
    devi scrivere codice ASP....
    ciao
    Vic53

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Perdono.... ecco lo script completo:
    codice:
    <%
    scategoria = Request.querystring("cat")
    if scategoria="tutte" then scategoria = "%"
    
    dim currentPage, pageSize, recordCount, pageCount
    
    pageSize = 3
    
    if(len(Request.QueryString("page"))=0)then
      currentPage = 1
    else
      currentPage = CInt(Request.QueryString("page"))
    end if
    
    dim conn, rs, sql
    
    Set Conn=Server.CreateObject("ADODB.Connection")
    Conn.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=00.111.222.333;DATABASE=Sql123456_1;UID=Sql123456;PASSWORD=abcdefgh"
    
    sql = "SELECT COUNT(*) AS CNT FROM (SELECT id, cosa, titolo, testo, foto, categoria, data, attiva from foto WHERE categoria = '"& scategoria &"' AND attiva = 'SI' UNION ALL SELECT id, cosa, titolo, testo, video, categoria, data, attiva from video WHERE categoria = '"& scategoria &"' AND attiva = 'SI') AS TOTAL order by data desc" 
    set rs = conn.execute(sql)
    recordCount = rs("CNT")
    pageCount = int(CInt(recordCount) / pageSize)
    rs.Close()
    
    ' seleziona i record da visualizzare nella pagina corrente
    sql = "SELECT * FROM (SELECT id, cosa, titolo, testo, foto, categoria, data, attiva from foto WHERE categoria = '"& scategoria &"' AND attiva = 'SI' UNION ALL SELECT id, cosa, titolo, testo, video, categoria, data, attiva from video WHERE categoria = '"& scategoria &"' AND attiva = 'SI') AS TOTAL " &_
          " order by data desc LIMIT " & (currentPage - 1) * pageSize & ", " & pageSize
    set rs = conn.execute(sql)
    
    Dim rcount, i, x
    For i = 1 To rs.PageSize
    rcount = i
    If page > 1 Then
    For x = 1 To (page - 1)
    rcount =  rcount
    Next
    End If
    
    If Not rs.EOF Then 
    %>
    
    RISULTATI
    
    <%
    rs.MoveNext
    End If
    Next    
    
    rs.Close()
    set rs = nothing
    conn.Close()
    set conn = nothing
    
    For page = 1 to pageCount
    Response.Write "<A href='"&istring&"?page="&page
    Response.Write "&cat="&request.querystring("cat")
    Response.write "'>"
    Response.write "<font size=2 color=#000080>"
    Response.Write page
    Response.Write "</A> - "
    Next
    Response.Write ""
    %>
    Grazie
    G.

  4. #4
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    592
    Quote Originariamente inviata da djjunior Visualizza il messaggio
    Perdono.... ecco lo script completo:
    codice:
    <%
    scategoria = Request.querystring("cat")
    if scategoria="tutte" then scategoria = "%"
    
    dim currentPage, pageSize, recordCount, pageCount
    
    pageSize = 3
    
    if(len(Request.QueryString("page"))=0)then
      currentPage = 1
    else
      currentPage = CInt(Request.QueryString("page"))
    end if
    
    dim conn, rs, sql
    
    Set Conn=Server.CreateObject("ADODB.Connection")
    Conn.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=00.111.222.333;DATABASE=Sql123456_1;UID=Sql123456;PASSWORD=abcdefgh"
    
    sql = "SELECT COUNT(*) AS CNT FROM (SELECT id, cosa, titolo, testo, foto, categoria, data, attiva from foto WHERE categoria = '"& scategoria &"' AND attiva = 'SI' UNION ALL SELECT id, cosa, titolo, testo, video, categoria, data, attiva from video WHERE categoria = '"& scategoria &"' AND attiva = 'SI') AS TOTAL order by data desc" 
    set rs = conn.execute(sql)
    recordCount = rs("CNT")
    pageCount = int(CInt(recordCount) / pageSize)
    rs.Close()
    
    ' seleziona i record da visualizzare nella pagina corrente
    sql = "SELECT * FROM (SELECT id, cosa, titolo, testo, foto, categoria, data, attiva from foto WHERE categoria = '"& scategoria &"' AND attiva = 'SI' UNION ALL SELECT id, cosa, titolo, testo, video, categoria, data, attiva from video WHERE categoria = '"& scategoria &"' AND attiva = 'SI') AS TOTAL " &_
          " order by data desc LIMIT " & (currentPage - 1) * pageSize & ", " & pageSize
    set rs = conn.execute(sql)
    
    Dim rcount, i, x
    For i = 1 To rs.PageSize
    rcount = i
    If page > 1 Then
    For x = 1 To (page - 1)
    rcount =  rcount
    Next
    End If
    
    If Not rs.EOF Then 
    %>
    
    RISULTATI
    
    <%
    rs.MoveNext
    End If
    Next    
    
    rs.Close()
    set rs = nothing
    conn.Close()
    set conn = nothing
    
    For page = 1 to pageCount
    Response.Write "<A href='"&istring&"?page="&page
    Response.Write "&cat="&request.querystring("cat")
    Response.write "'>"
    Response.write "<font size=2 color=#000080>"
    Response.Write page
    Response.Write "</A> - "
    Next
    Response.Write ""
    %>
    Grazie
    G.

    ciao
    espongo una riflessione su quello che vuoi realizzare:
    il server quando costruisce il risultato di una query, invia al client i risultati....
    quindi il client per esempio può vedere la finestra dei dati per esempio la prima pagina di tre pagine
    e nella prima pagina viene visualizzato il bottone per visualizzare la seconda pagina o la terza ...
    Il problema è che quando il client clicca su pagina 2 per esempio, il server deve sapere che la prossima pagina è la prosecuzione della prima ma dato che l'elaborazione della prima pagina è terminata, il server non lo sa e quindi deve prendere da qualche parte l'informazione della pagina n. due da visualizzare e cioè deve avere almeno il pointer all'ultimo record visualizzato per poter proseguire .... quindi deve fare una nuova elaborazione come nella prima pagina ma deve posizionarsi sul record successivo a quello visualizzato per ultimo....
    Per fare questo di solito si contruisce una struttura più mirata con per esempio al fondo della pagina il record che sara utilizzato come "NEXT RECORD" dentro il bottone tipo pagine 2 o pagina 3 il cui value sarà proprio la key di posizionamento al DB.
    Quindi la query deve essere costruita in maniera tale da contenere il comando di posizionamento al record voluto che in prima pagina sarà per esempio maggiore di blank per il campo chiave della struttura del recordset.
    il successivo per la pagina 2 sarà key maggiore di ultima key della pagina precedente che sarà un valore che viene ritornato dal bottone premuto.
    Etc Etc quindi la struttura che cerchi è tutta da costruire....questo è il punto
    una soluzione pero non molto efficiente è quest'altra
    Puoi pero usare una routine di scorrimento tramite numero di record letti per esempio mostrando 100 record per pagina e quindi pagina due sara il record 101 -200 pagina 3 sarà il record 201-300 e cosi via....
    nei bottoni il value sara il numero di record di posizionamento e dentro il ciclo di lettura devi cioclare skippando il record letto fino a che il n.record conteggiato tramite contatore è maggiore del pointer di pagina precedentemente memorizzata nel bottone di pagina cliccato....

    questo è il mio suggerimento... la struttura per fare quello che cerchi sta nel rifacimento della pagina ASP costruendola appositamente per paginare come vuoi tu.
    buon lavoro









    ""
    Vic53

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Ti ringrazio per la tua riflessione, questo script l'ho trovato sul web e adattato per le mie esigenze e va bene, l'unica cosa che vorrei modificare, e che non saprei dove mettere mano, è fare la paginazione che ho indicato nel primo post, oppure in alternativa se mi puoi consigliare qualche script pronto che svolga quella funzione, grazie
    G.

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Grazie ANDREA,
    adattando lo script che mi ha linkato eccolo:
    codice:
    <%
    server.ScriptTimeout = 300
    page = Cint(request.querystring("page"))
    if page = 0 then page = 1
    call dbConnect(objConn)
    %>
    TITOLO PAGINA
    <%
    scategoria = Request.querystring("cat")
    if scategoria="tutte" then scategoria = "%"
    
    strSQL = "SELECT COUNT(*) FROM (SELECT id, cosa, titolo, testo, foto, categoria, data, attiva from foto WHERE categoria = '"& scategoria &"' AND attiva = 'SI' UNION ALL SELECT id, cosa, titolo, testo, video, categoria, data, attiva from video WHERE categoria = '"& scategoria &"' AND attiva = 'SI') AS TOTAL order by data desc"
    Set objRS = objConn.Execute(strSQL)
    tot_record = objRS(0)
    set objRS = nothing
    
    pageSize = 3
    inizio = (page - 1) * pageSize
    pagine_totali = tot_record / pageSize
    
    if pagine_totali - CInt(pagine_totali) > 0 then
    pagine_totali = CInt(pagine_totali + 1)
    else
    pagine_totali = CInt(pagine_totali)
    end If
    
    strSQL = "SELECT * FROM (SELECT id, cosa, titolo, testo, foto, categoria, data, attiva from foto WHERE categoria = '"& scategoria &"' AND attiva = 'SI' UNION ALL SELECT id, cosa, titolo, testo, video, categoria, data, attiva from video WHERE categoria = '"& scategoria &"' AND attiva = 'SI') AS TOTAL , "& pageSize
    Set objRS = server.CreateObject("ADODB.Recordset")
    objRS.Open strSQL, objConn
    if not objRS.EOF then
    %>
    RISULTATI
    <%
    do while not objRS.EOF
    objRS.movenext
    Loop
    if page > 1 then
    Response.write("<a href=""elenco_articoli2.asp?cat=" & request.querystring("cat") &"&page="& CInt(page - 1) &""">Pagina precedente</a>")
    else
    Response.Write ("")
    end if
    if tot_record > pageSize and pagine_totali > page then
    Response.write("<a href=""elenco_articoli2.asp?cat=" & request.querystring("cat") &"&page="& CInt(page + 1) &""">Pagina successiva</a>")
    else
    Response.Write ("")
    end if
    else
    Response.write ("Non ci sono notizie")
    end if
    objRS.close
    set objRS = nothing
    call dbDisconnect(objConnn)
    sub dbConnect(objConn)
    connectionstring = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=00.000.000.00;DATABASE=Sql123456_1;UID=Sql123456;PASSWORD=abcdefgh"
    set objConn = server.createObject("ADODB.Connection")
    objConn.Open connectionstring
    end sub
    sub dbDisconnect(objConn)
    objConn.close
    set objConn = nothing
    end sub
    %>
    Ho un errore alla riga:

    pagine_totali = tot_record / pageSize

    L'errore è:

    Microsoft VBScript runtime error '800a000d'
    Type mismatch

    Non saprei a cosa è dovuto, attendo il tuo aiuto, grazie
    G.

  8. #8
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    592
    Quote Originariamente inviata da djjunior Visualizza il messaggio
    Grazie ANDREA,
    adattando lo script che mi ha linkato eccolo:
    codice:
    <%
    server.ScriptTimeout = 300
    page = Cint(request.querystring("page"))
    if page = 0 then page = 1
    call dbConnect(objConn)
    %>
    TITOLO PAGINA
    <%
    scategoria = Request.querystring("cat")
    if scategoria="tutte" then scategoria = "%"
    
    strSQL = "SELECT COUNT(*) FROM (SELECT id, cosa, titolo, testo, foto, categoria, data, attiva from foto WHERE categoria = '"& scategoria &"' AND attiva = 'SI' UNION ALL SELECT id, cosa, titolo, testo, video, categoria, data, attiva from video WHERE categoria = '"& scategoria &"' AND attiva = 'SI') AS TOTAL order by data desc"
    Set objRS = objConn.Execute(strSQL)
    tot_record = objRS(0)
    set objRS = nothing
    
    pageSize = 3
    inizio = (page - 1) * pageSize
    pagine_totali = tot_record / pageSize
    
    if pagine_totali - CInt(pagine_totali) > 0 then
    pagine_totali = CInt(pagine_totali + 1)
    else
    pagine_totali = CInt(pagine_totali)
    end If
    
    strSQL = "SELECT * FROM (SELECT id, cosa, titolo, testo, foto, categoria, data, attiva from foto WHERE categoria = '"& scategoria &"' AND attiva = 'SI' UNION ALL SELECT id, cosa, titolo, testo, video, categoria, data, attiva from video WHERE categoria = '"& scategoria &"' AND attiva = 'SI') AS TOTAL , "& pageSize
    Set objRS = server.CreateObject("ADODB.Recordset")
    objRS.Open strSQL, objConn
    if not objRS.EOF then
    %>
    RISULTATI
    <%
    do while not objRS.EOF
    objRS.movenext
    Loop
    if page > 1 then
    Response.write("<a href=""elenco_articoli2.asp?cat=" & request.querystring("cat") &"&page="& CInt(page - 1) &""">Pagina precedente</a>")
    else
    Response.Write ("")
    end if
    if tot_record > pageSize and pagine_totali > page then
    Response.write("<a href=""elenco_articoli2.asp?cat=" & request.querystring("cat") &"&page="& CInt(page + 1) &""">Pagina successiva</a>")
    else
    Response.Write ("")
    end if
    else
    Response.write ("Non ci sono notizie")
    end if
    objRS.close
    set objRS = nothing
    call dbDisconnect(objConnn)
    sub dbConnect(objConn)
    connectionstring = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=00.000.000.00;DATABASE=Sql123456_1;UID=Sql123456;PASSWORD=abcdefgh"
    set objConn = server.createObject("ADODB.Connection")
    objConn.Open connectionstring
    end sub
    sub dbDisconnect(objConn)
    objConn.close
    set objConn = nothing
    end sub
    %>
    Ho un errore alla riga:

    pagine_totali = tot_record / pageSize

    L'errore è:

    Microsoft VBScript runtime error '800a000d'
    Type mismatch

    Non saprei a cosa è dovuto, attendo il tuo aiuto, grazie
    G.
    ciao
    la select in cui esegui il conteggio se non trova record restituisce il campo a blank
    e quindi prima di usare il campo tot_record devi verificare che sia numerico e se non è numerico devi forzare lo zero...
    devi mettere una if prima dell'istruzione
    ...
    codice:
    pagine_totali = tot_record / pageSize
    ...
    
    if  isNumeric(tot_record) then 
       pagine_totali = tot_record / pageSize
    else
      pagine_totali = 0
    end if
    
    ...
    prova se è questo l'errore

    ciao
    Vic53

  9. #9
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Quote Originariamente inviata da djjunior Visualizza il messaggio
    adattando lo script che mi ha linkato eccolo:
    Sembra più un copia-incolla delle due query senza il ben che minimo concetto di select
    Non saprei a cosa è dovuto
    Se dopo nove anche frequenti il forum non sai scrivere una query probabilmente è meglio che rinunci
    attendo il tuo aiuto....
    leggi qui se trovi spunti
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    2,630
    Grazie vic53 mi stampa il primo record e poi sempre Type mismatch su questa riga:
    codice:
    if tot_record > pageSize and pagine_totali > page then
    Grazie
    G.

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.