Visualizzazione risultati 1 fino 22 di 22

Discussione: Mysqli errore di connessione

  1. #1
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito Mysqli errore di connessione

    Salve, ho un problema dovuto al passaggio a PHP 7.3 premetto che sono piuttosto ignorante in materia
    Ho una pagina php da dove si può scaricare un file, dove vengono visualizzate le volte che si è scaricato, usava ancora mysql... ho cercato sul forum e in rete per trovare una soluzione, poi ho utilizzato lo script DebugErrorPHP e mi dice
    Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in /membri/paolin/db/visualizzanumdownload26.php on line 18
    Errore nella connessione:


    Ecco il codice modificato con mysqli
    Codice PHP:
    // identificativo numerico della pagina word (prime 2 cifre sono l'anno)
    $pagina = 261;
    $db_host = 'localhost';
    $db_user = 'xxxxxx';
    $db_name = 'my_xxxxxx';

    // 1. Connessione corretta con gestione password
    $db = mysqli_connect($db_host, $db_user, $db_name);

    if (!
    $db) {
    die(
    'Errore nella connessione: ' . mysqli_connect_error());

    }

    $db = mysqli_select_db($db_user, $db_name);
    if (!
    $db) {
    die(
    'Errore nella connessione: ');

    }



    // 2. Query protetta da SQL Injection
    $query = "SELECT visite FROM contatore WHERE pagina = " . mysqli_real_escape_string($db, $pagina);
    $res = mysqli_query($db, $query);

    if (
    $res) {
    $visite = mysqli_fetch_assoc($res);
    // 3. Output corretto con apici per le chiavi dell'array
    echo 'È stato scaricato ' . $visite['visite'] . ' volte';
    } else {
    echo
    "Errore nella query: " . mysqli_error($db);
    }

    mysqli_close($db);
    La linea 18 sarebbe questa:
    Codice PHP:
    $db = mysqli_select_db($db_user, $db_name);
    Qualcuno gentilmente mi può aiutare?
    Grazie mille

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    23,507

    Predefinito

    $db_user è una stringa che rappresenta il nome dell'utente, nel tuo caso "paolin".
    Invece, in il primo argomento di mysqli_select_db() è il riferimento dal database, non il nome dell'utente.

    Comunque, ti consiglio di utilizzare una IA così da capire molto più facilmente gli errori e la motivazione dei problemi.


    Ciao!
    Ultima modifica di alemoppo : 25-04-2026 alle ore 12.45.09

  3. #3
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    Grazie per rispondermi Alemoppo.

    In realtà già avevo ottenuto questo codice con l'AI. Il nome utente si, è paolin... (qui nel post ho messo le "x")

    Ho cercato su google mysqli_select_db() ma non capisco come devo sostituire per aprire il database "contatore". Sono ignorante
    perdo ore senza trovare una soluzione... aiutami per favore. Grazie

  4. #4
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    ho provato così
    Codice PHP:
    $db = mysqli_select_db($db, "contatore");
    if (!
    $db) {
    die(
    'Errore nella connessione: ');

    }
    ma mi restituisce Errore nella connessione:

  5. #5
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    I file originali (con mysql) erano due, nella cartella db:
    visualizzanumdownload25.php e ha questo codice (che funzionava prima)
    Codice PHP:
    <?php
    // identificativo numerico della pagina word (prime 2 cifre sono l'anno)
    $pagina = 251;

    $db_host = "localhost";
    $db_user = "paolin";
    $db_name = "my_paolin";

    $db = mysql_connect($db_host, $db_user);
    if (
    $db == FALSE)
    die (
    "Errore nella connessione.");

    $res = mysql_select_db($db_name);
    if (
    $res == FALSE)
    die (
    "Errore nella selezione del DB.");




    // visualizzo il numero di visite
    $res = mysql_query("SELECT visite FROM contatore WHERE pagina = $pagina");
    $visite = mysql_fetch_assoc($res);
    echo
    "&Egrave; stato scaricato ".$visite['visite']." volte";
    ?>
    e il file download25.php con codice
    Codice PHP:
    <?php


    // identificativo numerico della pagina word 2025
    $pagina = 251;

    $db_host = "localhost";
    $db_user = "paolin";
    $db_name = "my_paolin";

    $db = mysql_connect($db_host, $db_user);
    if (
    $db == FALSE)
    die (
    "Errore nella connessione.");

    $res = mysql_select_db($db_name);
    if (
    $res == FALSE)
    die (
    "Errore nella selezione del DB.");




    // numero di visite attuali
    $res = mysql_query("UPDATE contatore SET visite = visite + 1 WHERE pagina = $pagina");
    if (!
    mysql_num_rows($res)){
    // pagina non presente nel database
    // aggiungo la pagina nella tabella
    mysql_query("INSERT INTO contatore (pagina, visite) VALUES ($pagina, 1)");
    }

    // visualizzo il numero di visite
    $res = mysql_query("SELECT visite FROM contatore WHERE pagina = $pagina");
    $visite = mysql_fetch_assoc($res);



    $_GET['file'] = trim(htmlentities($_GET['file'], ENT_QUOTES));

    //$path = './files/' . $_GET['file'];
    $path = $_GET['file'];

    $size = filesize($path);

    if (!
    $size)
    {
    die();
    }

    $check = substr($_GET['file'], - 3);

    if(
    $check != "rar" AND $check != "zip")
    {
    die (
    'Stai tentando di scaricare un file non scaricabile');
    }
    else
    {
    @
    header("Content-Type: application/octet-stream");
    @
    header('Content-Disposition: attachment; filename=' . $_GET['file'] . ';');
    @
    header("Content-Length: " . $size);

    readfile($path);
    }
    echo
    "La pagina e stata visitata ".$visite['visite']." volte";

    ?>
    Poi nel file lunaioscarica25.php (fuori cartella db) veniva richiamato questo codice
    Codice PHP:
    <?php include 'db/visualizzanumdownload25.php'; ?>
    Come risolvo?
    Grazie mille per l'aiuto

  6. #6
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,575

    Predefinito

    Salve,
    non è complicato fare il passaggio.

    Ad ogni modo, se vuole imparare un po' di mysqli, si tenga una cipia da parte dei vecchi file rinominandoli ad esempio visualizzanumdownload25_old.php e download25_old.php. Così potra raffrontare il codice vecchio con quello aggiornato.

    Questo è il codice aggiornato:

    visualizzanumdownload25.php

    Codice PHP:
    <?php

    // identificativo numerico della pagina word (prime 2 cifre sono l'anno)
    $pagina = 251;

    $db_host = "localhost";
    $db_user = "paolin";
    $db_pass = "";
    $db_name = "my_paolin";

    $db = mysqli_connect($db_host, $db_user, $db_pass, $db_name );
    if (
    mysqli_connect_errno()) {
    die (
    "Errore nella connessione.".mysqli_connect_errno());
    }

    $res = mysqli_select_db($db, $db_name);
    if (
    $res == FALSE) {
    die (
    "Errore nella selezione del DB.");
    }

    // visualizzo il numero di visite
    $res = mysqli_query($db, "SELECT visite FROM contatore WHERE pagina = $pagina");
    $visite = mysqli_fetch_assoc($res);
    echo
    "&Egrave; stato scaricato ".$visite['visite']." volte";

    ?>
    download25.php

    Codice PHP:
    <?php

    // identificativo numerico della pagina word 2025
    $pagina = 251;

    $db_host = "localhost";
    $db_user = "paolin";
    $db_pass = "";
    $db_name = "my_paolin";

    $db = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
    if (
    mysqli_connect_errno()) {
    die(
    "Errore nella connessione: " . mysqli_connect_errno());
    }

    // aggiornare il contatore delle visite
    $res = mysqli_query($db, "UPDATE contatore SET visite = visite + 1 WHERE pagina = $pagina");
    $rows = mysqli_affected_rows($res);
    if (
    rows === 0) {
    // pagina non presente nel database
    // aggiungo la pagina nella tabella
    mysqli_query($db, "INSERT INTO contatore (pagina, visite) VALUES ($pagina, 1)");
    }

    // recuperare il numero di visite
    $res_visite = mysqli_query($db, "SELECT visite FROM contatore WHERE pagina = $pagina");
    $visite = mysqli_fetch_assoc($res_visite);

    // Sanitizzare il parametro 'file'
    if (isset($_GET['file'])) {
    $_GET['file'] = trim(htmlentities($_GET['file'], ENT_QUOTES));
    } else {
    die(
    "Parametro 'file' mancante.");
    }

    $path = './' . $_GET['file'];

    // verificare se il file esiste
    if (!is_file($path)) {
    die(
    "File non trovato.");
    }

    $size = filesize($path);
    if (
    $size === false || $size == 0) {
    die(
    "File vuoto o errore nel calcolo delle dimensioni.");
    }

    // verificare estensione file
    $check = strtolower(substr($_GET['file'], -3));
    if (
    $check != "rar" && $check != "zip") {
    die(
    'Stai tentando di scaricare un file non scaricabile');
    }

    // inviare gli header e il file
    header("Content-Type: application/octet-stream");
    header('Content-Disposition: attachment; filename=' . basename($_GET['file']));
    header("Content-Length: " . $size);

    readfile($path);

    // visualizzare il numero di visite
    echo "La pagina è stata visitata " . $visite['visite'] . " volte";

    ?>
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 26-04-2026 alle ore 21.35.00

  7. #7
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    Grazie mille per la risposta!

    Funziona ma non completamente. Mi spiego: visualizzo correttamente il numero di volte scaricato, ma se clicco su "scarica" invece di scaricarmi il file.zip mi dice
    La pagina non funziona
    paolin.altervista.org al momento non è in grado di gestire la richiesta.
    HTTP ERROR 500


    Nel file lunaioscarica25.php c'è questo link
    <a href="https://paolin.altervista.org/db/download25.php?file=lunaio25.zip">

    Qui il collegamento https://paolin.altervista.org/lunaioscarica25.php

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    23,507

    Predefinito

    Io ci vedo errori di sintassi ed errori vari: ad esempio vedo che viene usato il costruttore "new mysqli()" in modalità ad oggetti, ma poi tutto il resto del codice è "procedurale". O si usa la versione ad oggetti o la procedurale.
    Inoltre ci sono altri problemi, tipo:
    Codice PHP:
    $rows = mysqli_num_rows($res)
    Manca il punto e virgola.

    Poi mysqli_num_rows() ha senso usarla su SELECT. Su una UPDATE, va usato mysqli_affected_rows().

    mysqli_select_db() è inutile usarlo perché il db è già passato tramite il costruttore.

    In realtà già avevo ottenuto questo codice con l'AI
    Prova ad esempio su ChatGPT attuale (versione Free), sono abbastanza sicuro che questi problemi che ti ho detto te li può risolvere, senza contare che probabilmente ce ne sono altri.

    Ciao!
    Ultima modifica di alemoppo : 26-04-2026 alle ore 01.34.31

  9. #9
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    alemoppo grazie per la tua dettagliata risposta.

    Già mettendo il ";" funzionerebbe...
    ho provato su ChatGPT attuale (versione Free) inserendo il codice ed ecco il risultato:
    Codice PHP:

    $db
    = new mysqli($db_host, $db_user, "", $db_name);
    if (
    $db->connect_error) {
    die(
    "Errore nella connessione.");
    }

    // sanitize pagina
    $pagina = isset($pagina) ? $pagina : 'default';

    // UPDATE counter
    $stmt = $db->prepare("UPDATE contatore SET visite = visite + 1 WHERE pagina = ?");
    $stmt->bind_param("s", $pagina);
    $stmt->execute();

    if (
    $stmt->affected_rows === 0) {
    $stmt = $db->prepare("INSERT INTO contatore (pagina, visite) VALUES (?, 1)");
    $stmt->bind_param("s", $pagina);
    $stmt->execute();
    }

    // get visits
    $stmt = $db->prepare("SELECT visite FROM contatore WHERE pagina = ?");
    $stmt->bind_param("s", $pagina);
    $stmt->execute();
    $result = $stmt->get_result();
    $visite = $result->fetch_assoc();

    // file handling
    $file = basename($_GET['file']); // prevents directory traversal
    $path = './files/' . $file;

    if (!
    file_exists($path)) {
    die(
    "File non trovato");
    }

    // check extension safely
    $allowed = ['zip', 'rar'];
    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));

    if (!
    in_array($ext, $allowed)) {
    die(
    "Stai tentando di scaricare un file non scaricabile");
    }

    // download
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$file\"");
    header("Content-Length: " . filesize($path));

    readfile($path);

    echo
    "La pagina è stata visitata " . $visite['visite'] . " volte";
    ?>
    Così funziona, cioè scarica il file.zip e mostra le volte in cui è stato scaricato, MA NON INCREMENTA il numero; forse devo aggiornare anche il file visualizzanumdowload25.php

    allora ho chiesto come collegare i due file, risposta
    Così com’è, i due file non sono realmente collegati: uno aggiorna/gestisce download, l’altro fa solo una SELECT. Devi farli lavorare sulla stessa logica e sugli stessi parametri.

    In più, nel secondo file hai ancora un piccolo problema: stai costruendo la query direttamente dentro la stringa SQL (anche se usi intval, non è il massimo).

    ✔️ Collegamento corretto (semplice e funzionante)
    �� 1. Primo file (download + contatore)

    Assicurati che $pagina venga passato, ad esempio via URL:

    download.php?file=test.zip&pagina=1

    Nel primo file aggiungi:

    $pagina = isset($_GET['pagina']) ? intval($_GET['pagina']) : 0;

    Così entrambi i file lavorano con lo stesso ID.

    �� 2. Migliora il secondo file

    Riscrivilo così:

    Codice PHP:
    <?php
    $db
    = new mysqli($db_host, $db_user, "", $db_name);
    if (
    $db->connect_error) {
    die(
    "Errore nella connessione.");
    }

    // prendi pagina da GET
    $pagina_id = isset($_GET['pagina']) ? intval($_GET['pagina']) : 0;

    // prepared statement (più sicuro)
    $stmt = $db->prepare("SELECT visite FROM contatore WHERE pagina = ?");
    $stmt->bind_param("i", $pagina_id);
    $stmt->execute();
    $result = $stmt->get_result();

    if (
    $result && $result->num_rows > 0) {
    $row = $result->fetch_assoc();
    echo
    "&Egrave; stato scaricato " . $row['visite'] . " volte";
    } else {
    echo
    "Nessun dato trovato per questa pagina.";
    }
    ?>
    Così riscritto mi visualizza "Nessun dato trovato per questa pagina."

    Poi prosegue...
    ⚠️ Problema logico importante

    Nel tuo primo script:

    aumenti visite ogni volta che la pagina viene chiamata
    non solo quando il download è completato

    �� Quindi il contatore non misura download reali, ma richieste.

    Se vuoi contare solo download veri, l’incremento deve stare subito prima di readfile().

    �� Miglioramento consigliato

    Se vuoi qualcosa di più pulito:

    un solo file gestisce tutto (download + conteggio + output JSON)
    oppure API separata


    Sarebbe bello, ma già così per me è arabo
    Ultima modifica di paolin : 26-04-2026 alle ore 12.39.25

  10. #10
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    Citazione Originalmente inviato da paolin Visualizza messaggio
    ✔️ Collegamento corretto (semplice e funzionante)
    🔧 1. Primo file (download + contatore)

    Assicurati che $pagina venga passato, ad esempio via URL:

    download.php?file=test.zip&pagina=1

    Nel primo file aggiungi:

    $pagina = isset($_GET['pagina']) ? intval($_GET['pagina']) : 0;

    Così entrambi i file lavorano con lo stesso ID.
    In che punto dovrei aggiungere questo codice? (scusa la mia ignoranza)
    grazie

  11. #11
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    Gli ho chiesto (a chatGpt)
    ok, unisci i due file in un unico script pulito e pronto all'uso

    Ecco una versione unica, pulita e pronta all’uso che:

    aggiorna il contatore solo quando il file è valido e sta per essere scaricato
    permette anche di vedere le visite senza scaricare (?pagina=1)
    evita problemi comuni (SQL injection, path traversal, header già inviati)


    ✅ Script unico (newdownload25.php)
    Codice PHP:
    <?php
    $db
    = new mysqli($db_host, $db_user, "", $db_name);
    if (
    $db->connect_error) {
    die(
    "Errore nella connessione.");
    }

    // parametro pagina
    $pagina = isset($_GET['pagina']) ? intval($_GET['pagina']) : 0;

    // funzione per ottenere visite
    function getVisite($db, $pagina) {
    $stmt = $db->prepare("SELECT visite FROM contatore WHERE pagina = ?");
    $stmt->bind_param("i", $pagina);
    $stmt->execute();
    $result = $stmt->get_result();

    if (
    $result && $result->num_rows > 0) {
    return
    $result->fetch_assoc()['visite'];
    }
    return
    0;
    }

    // funzione per incrementare visite
    function incrementaVisite($db, $pagina) {
    $stmt = $db->prepare("UPDATE contatore SET visite = visite + 1 WHERE pagina = ?");
    $stmt->bind_param("i", $pagina);
    $stmt->execute();

    if (
    $stmt->affected_rows === 0) {
    $stmt = $db->prepare("INSERT INTO contatore (pagina, visite) VALUES (?, 1)");
    $stmt->bind_param("i", $pagina);
    $stmt->execute();
    }
    }

    // 👉 SE viene richiesto un file → download
    if (isset($_GET['file'])) {

    $file = basename($_GET['file']); // sicurezza
    $path = './files/' . $file;

    // controlli file
    if (!file_exists($path)) {
    die(
    "File non trovato");
    }

    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    if (!
    in_array($ext, ['zip', 'rar'])) {
    die(
    "Tipo file non consentito");
    }

    // incrementa contatore SOLO qui (download reale)
    if ($pagina > 0) {
    incrementaVisite($db, $pagina);
    }

    // headers download
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$file\"");
    header("Content-Length: " . filesize($path));

    readfile($path);
    exit;
    }

    // 👉 SE NON c'è file → mostra visite
    if ($pagina > 0) {
    $visite = getVisite($db, $pagina);
    echo
    "&Egrave; stato scaricato " . $visite . " volte";
    } else {
    echo
    "Parametro pagina mancante.";
    }
    ?>
    🔗 Come usarlo

    Download file + conteggio

    <a href="newdownload25.php?file=lunaio25.zip&pagina=1 ">Scarica file</a>

    Visualizzare numero download

    <a href="newdownload25.php?pagina=1">Visualizza download</a>


    Però se clicco su "scarica" mi dice "File non trovato"
    https://paolin.altervista.org/lunaioscarica25.php

  12. #12
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,575

    Predefinito

    Il percorso è corretto?

    Eventualmente provi rimpiazzando file_exists() con is_file() in:
    Codice PHP:
    // controlli file

    if (!file_exists($path)) {

    die(
    "File non trovato");

    }
    Comunque qui avevo corretto i miei erroi. Buona parte dei diffetti/mancanze erano quelli già presenti nel codice originale. Ora gli ho dato qualche rifinutura.

    Ad ogni modo, io intendevo gestire prima la conversione e poi affrontare il resto. Così forse qualcosa s'impara.

    Faccio presente che anche le IA come ChatGPT non sono infallibili ed esenti dal commettere errori.

    Quindi mandare un untente poco esperto a fare il copia incolla dal risultato di una IA, non mi sembra esattmente la soluzione migliore. E poi, così non si impara molto. Le spiagazioni delle IA sono per chi ha già un minimo di familiarità con il codice.

    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 26-04-2026 alle ore 15.36.53

  13. #13
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    Grazie per la sua risposta.
    Il percorso è corretto, nella dir "db" c'è sia il file newdownload25.php (nuovo di chatgpt) che il file download25.php (vecchio) e naturalmente c'è lunaio25.zip

    sta di fatto che se digito https://paolin.altervista.org/db/new...zip&pagina=251 non mi trova il file.zip e mi dice File non trovato,
    mentre se digito https://paolin.altervista.org/db/dow...e=lunaio25.zip in automatico mi scarica il file.zip

    probabilmente c'è qualche problema nel codice che io non riesco a trovare.

    Ho provato anche a sostituire is_file ma non cambia nulla!

    Cordiali saluti e grazie
    Ultima modifica di paolin : 26-04-2026 alle ore 17.30.13

  14. #14
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    Comunque qui avevo corretto i miei erroi
    Ho provato anche i due file da lei corretti, ma mi dice File non trovato.

  15. #15
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,575

    Predefinito

    sta di fatto che se digito https://paolin.altervista.org/db/new...zip&pagina=251 non mi trova il file.zip e mi dice File non trovato,
    mentre se digito https://paolin.altervista.org/db/dow...e=lunaio25.zip in automatico mi scarica il file.zip
    Provando ora, a me non risulta funzionare nessuno dei 2 link.

    Comunque il primo fa riferimento al file newdownload25.php mentre i secondo sir riferisce al file download25.php

    Esattamente quali versioni di codice sono in usando nei rispettivi file?

    Cordiali saluti.

  16. #16
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    newdownload25.php (unico file)
    Codice PHP:
    <?php


    // identificativo numerico della pagina word 2025
    $pagina = 251;

    $db_host = "localhost";
    $db_user = "paolin";
    $db_name = "my_paolin";

    $db = new mysqli($db_host, $db_user, "", $db_name);
    if (
    $db->connect_error) {
    die(
    "Errore nella connessione.");
    }

    // parametro pagina
    $pagina = isset($_GET['pagina']) ? intval($_GET['pagina']) : 0;

    // funzione per ottenere visite
    function getVisite($db, $pagina) {
    $stmt = $db->prepare("SELECT visite FROM contatore WHERE pagina = ?");
    $stmt->bind_param("i", $pagina);
    $stmt->execute();
    $result = $stmt->get_result();

    if (
    $result && $result->num_rows > 0) {
    return
    $result->fetch_assoc()['visite'];
    }
    return
    0;
    }

    // funzione per incrementare visite
    function incrementaVisite($db, $pagina) {
    $stmt = $db->prepare("UPDATE contatore SET visite = visite + 1 WHERE pagina = ?");
    $stmt->bind_param("i", $pagina);
    $stmt->execute();

    if (
    $stmt->affected_rows === 0) {
    $stmt = $db->prepare("INSERT INTO contatore (pagina, visite) VALUES (?, 1)");
    $stmt->bind_param("i", $pagina);
    $stmt->execute();
    }
    }

    // ?? SE viene richiesto un file ? download
    if (isset($_GET['file'])) {

    $file = basename($_GET['file']); // sicurezza
    $path = './files/' . $file;

    // controlli file
    if (!file_exists($path)) {
    echo
    realpath($filename);
    die(
    "File non trovato");
    }

    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    if (!
    in_array($ext, ['zip', 'rar'])) {
    die(
    "Tipo file non consentito");
    }

    // incrementa contatore SOLO qui (download reale)
    if ($pagina > 0) {
    incrementaVisite($db, $pagina);
    }

    // headers download
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$file\"");
    header("Content-Length: " . filesize($path));

    readfile($path);
    exit;
    }

    // ?? SE NON c'è file ? mostra visite
    if ($pagina > 0) {
    $visite = getVisite($db, $pagina);
    echo
    "&Egrave; stato scaricato " . $visite . " volte";
    } else {
    echo
    "Parametro pagina mancante.";
    }
    ?>
    l'altro link il secondo questi 2 file
    download25.php (file 1 di 2)
    Codice PHP:
    <?php


    // identificativo numerico della pagina word 2025
    $pagina = 251;

    $db_host = "localhost";
    $db_user = "paolin";
    $db_name = "my_paolin";

    $db = new mysqli($db_host, $db_user, "", $db_name);
    if (
    $db->connect_error) {
    die(
    "Errore nella connessione.");
    }

    // sanitize pagina
    $pagina = isset($pagina) ? $pagina : 'default';

    // UPDATE counter
    $stmt = $db->prepare("UPDATE contatore SET visite = visite + 1 WHERE pagina = ?");
    $stmt->bind_param("s", $pagina);
    $stmt->execute();

    if (
    $stmt->affected_rows === 0) {
    $stmt = $db->prepare("INSERT INTO contatore (pagina, visite) VALUES (?, 1)");
    $stmt->bind_param("s", $pagina);
    $stmt->execute();
    }

    // get visits
    $stmt = $db->prepare("SELECT visite FROM contatore WHERE pagina = ?");
    $stmt->bind_param("s", $pagina);
    $stmt->execute();
    $result = $stmt->get_result();
    $visite = $result->fetch_assoc();

    // file handling
    $file = basename($_GET['file']); // prevents directory traversal
    $path = './files/' . $file;

    if (!
    file_exists($path)) {
    die(
    "File non trovato");
    }

    // check extension safely
    $allowed = ['zip', 'rar'];
    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));

    if (!
    in_array($ext, $allowed)) {
    die(
    "Stai tentando di scaricare un file non scaricabile");
    }

    // download
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$file\"");
    header("Content-Length: " . filesize($path));

    readfile($path);

    echo
    "La pagina è stata visitata " . $visite['visite'] . " volte";
    ?>
    visualizzanumdownload25.php
    Codice PHP:
    <?php

    // identificativo numerico della pagina word (prime 2 cifre sono l'anno)

    $pagina = 251;

    $db_host = "localhost";
    $db_user = "paolin";
    $db_name = "my_paolin";


    $db = new mysqli($db_host, $db_user, "", $db_name);

    if (
    $db->connect_error) {

    die(
    "Errore nella connessione.");

    }


    // prendi pagina da GET

    $pagina_id = isset($_GET['pagina']) ? intval($_GET['pagina']) : 0;



    // prepared statement (più sicuro)

    $stmt = $db->prepare("SELECT visite FROM contatore WHERE pagina = ?");

    $stmt->bind_param("i", $pagina_id);

    $stmt->execute();

    $result = $stmt->get_result();



    if (
    $result && $result->num_rows > 0) {

    $row = $result->fetch_assoc();

    echo
    "&Egrave; stato scaricato " . $row['visite'] . " volte";

    } else {

    echo
    "Nessun dato trovato per questa pagina.";

    }

    ?>
    il secondo link è questo https://paolin.altervista.org/db/dow...e=lunaio25.zip
    paolin.altervista.org/db/download25.php?file=lunaio25.zip

    grazie per l'aiuto
    Ultima modifica di paolin : 26-04-2026 alle ore 17.31.54

  17. #17
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,575

    Predefinito

    In download25.php e visualizzanumdownload25.php così come in newdownload25.php ora sono tutti in statment però mi sebra ci siano errori. Controllo.

    In download25.php c'era bind_param() con valore di tipo stringa

    Codice PHP:
    $stmt->bind_param("s", $pagina_id);
    invece che valore di tipo intero.
    Codice PHP:
    $stmt->bind_param("i", $pagina_id);
    Un valore numerico non può essere una stringa.

    Ho fatto qualche aggiustamento. Provi adesso con questi:

    newdownload25.php

    Codice PHP:
    <?php

    // identificativo numerico della pagina word 2025
    $pagina = 251;

    $db_host = "localhost";
    $db_user = "paolin";
    $db_pass = "";
    $db_name = "my_paolin";

    $db = new mysqli($db_host, $db_user, $db_pass, $db_name);
    if (
    $db->connect_error) {
    die(
    "Errore nella connessione al DB.");
    }

    // parametro pagina da GET (se presente)
    $pagina = isset($_GET['pagina']) ? intval($_GET['pagina']) : $pagina;

    // funzione per ottenere visite
    function getVisite($db, $pagina) {
    $stmt = $db->prepare("SELECT visite FROM contatore WHERE pagina = ?");
    if (!
    $stmt) return 0;
    $stmt->bind_param("i", $pagina);
    $stmt->execute();
    $result = $stmt->get_result();
    if (
    $result && $result->num_rows > 0) {
    return (int)
    $result->fetch_assoc()['visite'];
    }
    return
    0;
    }

    // funzione per incrementare visite
    function incrementaVisite($db, $pagina) {
    $stmt = $db->prepare("UPDATE contatore SET visite = visite + 1 WHERE pagina = ?");
    if (!
    $stmt) return;
    $stmt->bind_param("i", $pagina);
    $stmt->execute();

    if (
    $stmt->affected_rows === 0) {
    $stmt = $db->prepare("INSERT INTO contatore (pagina, visite) VALUES (?, 1)");
    if (!
    $stmt) return;
    $stmt->bind_param("i", $pagina);
    $stmt->execute();
    }
    }

    // SE viene richiesto un file -> download
    if (isset($_GET['file'])) {

    $file = basename($_GET['file']); // sicurezza
    $path = __DIR__ . '/files/' . $file;

    // controlli file
    if (!file_exists($path)) {
    die(
    "File non trovato");
    }

    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    if (!
    in_array($ext, ['zip', 'rar'])) {
    die(
    "Tipo file non consentito");
    }

    // incrementa contatore SOLO qui (download reale)
    if ($pagina > 0) {
    incrementaVisite($db, $pagina);
    }

    // headers download
    if ($ext === 'zip') {
    header("Content-Type: application/zip");
    } else {
    header("Content-Type: application/octet-stream");
    }
    header('Content-Description: Scaricamento File');
    header("Content-Disposition: attachment; filename=\"$file\"");
    header("Content-Length: " . filesize($path));

    // output file e termina
    readfile($path);
    exit;
    }

    // SE NON c'è file -> mostra visite
    if ($pagina > 0) {
    $visite = getVisite($db, $pagina);
    echo
    "&Egrave; stato scaricato " . $visite . " volte";
    } else {
    echo
    "Parametro pagina mancante.";
    }
    ?>

    download25.php

    Codice PHP:
    <?php

    // identificativo numerico della pagina word 2025
    $pagina = 251;

    $db_host = "localhost";
    $db_user = "paolin";
    $db_pass = "";
    $db_name = "my_paolin";

    $db = new mysqli($db_host, $db_user, $db_pass, $db_name);
    if (
    $db->connect_error) {
    die(
    "Errore nella connessione al DB.");
    }

    // verifica parametro file
    if (!isset($_GET['file'])) {
    die(
    "Parametro file mancante");
    }

    $file = basename($_GET['file']); // previene directory traversal
    $path = __DIR__ . '/files/' . $file;

    // controlla esistenza file
    if (!file_exists($path)) {
    die(
    "File non trovato");
    }

    // check extension
    $allowed = ['zip', 'rar'];
    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    if (!
    in_array($ext, $allowed)) {
    die(
    "Stai tentando di scaricare un file non scaricabile");
    }

    // UPDATE counter
    $stmt = $db->prepare("UPDATE contatore SET visite = visite + 1 WHERE pagina = ?");
    if (
    $stmt) {
    $stmt->bind_param("i", $pagina);
    $stmt->execute();

    if (
    $stmt->affected_rows === 0) {
    $stmt = $db->prepare("INSERT INTO contatore (pagina, visite) VALUES (?, 1)");
    if (
    $stmt) {
    $stmt->bind_param("i", $pagina);
    $stmt->execute();
    }
    }

    }

    // get visits
    $visite = 0;
    $stmt = $db->prepare("SELECT visite FROM contatore WHERE pagina = ?");
    if (
    $stmt) {
    $stmt->bind_param("i", $pagina);
    $stmt->execute();

    $result = $stmt->get_result();
    if (
    $result && $result->num_rows > 0) {
    $row = $result->fetch_assoc();
    $visite = (int) $row['visite'];
    }
    }

    // headers e download
    if ($ext === 'zip') {
    header("Content-Type: application/zip");
    } else {
    header("Content-Type: application/octet-stream");
    }
    header('Content-Description: File Transfer');
    header("Content-Disposition: attachment; filename=\"$file\"");
    header("Content-Length: " . filesize($path));

    readfile($path);
    exit;
    ?>
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 26-04-2026 alle ore 19.04.49

  18. #18
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    La ringrazio per il tempo che mi dedica, li ho provati tutti e due e il risultato è che mi dice sempre File non trovato !

    Non capisco perchè, dato che il file nella cartella db c'è
    Ci sarà qualche impostazione che non conosco... mi perdoni la sincerità, ma no ci capisco più nulla!

  19. #19
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,575

    Predefinito

    Ho capito è un problema di percorso.

    Il file esiste in db/ (ho verifcato l'esistenza) ma negli script nel percorso viene aggiunta la cartella files/.

    Quindi in newdownload25.php e download25.php va rimossa la cartella files/ e sarà così:

    Codice PHP:
    $path = __DIR__ . '/' . $file;
    Cordiali saluti.

  20. #20
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    Grazie mille!!!
    Ora finalmente scarica il file con entrambi: con newdownload25.php scarica e incrementa il contatore, con download25.php scarica ma non incrementa il contatore (forse bisogna aggiornare il file collegato visualizzanumdownload25.php) ma non importa: uso il primo file che funziona ed è tutto in uno.

    Le pongo un'ultima domanda, forse banale: per far apparire il numero del contatore (È stato scarica n. volte) usavo il codice
    Codice PHP:
    <?php include 'db/visualizzanumdownload25.php'; ?>
    ed ancora viene riportato usando i 2 file "vecchi",
    ma se provo a includere questo link
    Codice PHP:
    <?php include 'https://paolin.altervista.org/db/newdownload25.php?pagina=251'; ?>
    dalla pagina di DebugErrorPHP mi dice
    Warning: include(): https:// wrapper is disabled in the server configuration by allow_url_include=0 in /membri/paolin/lunaioscarica25.php on line 94

    Warning: include(https://paolin.altervista.org/db/new...p?pagina=251): failed to open stream: no suitable wrapper could be found in /membri/paolin/lunaioscarica25.php on line 94

    Warning: include(): Failed opening 'https://paolin.altervista.org/db/newdownload25.php?pagina=251' for inclusion (include_path='.:') in /membri/paolin/lunaioscarica25.php on line 94
    Nessun dato trovato per questa pagina.


    Come posso fare apparire il risultato di questa pagina https://paolin.altervista.org/db/new...php?pagina=251
    all'interno della pagina di download?

    Grazie per la pazienza

  21. #21
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,575

    Predefinito

    Non va usato include.

    Non è possibile farlo apparire direttamente nello scaricamento del file. Al più, si può far visualizzare il conteggio nella stessa pagina dove c'è il link di download.

    Un modo sipcciolo e semplice per incorporare in una pagina il file è:
    Codice HTML:
    <iframe src="https://paolin.altervista.org/db/newdownload25.php?pagina=251" style="width:100%; height:100px; border:0"></iframe>
    Perchè non visualizzare direttamente il conteggio nella pagina lunaioscarica25.php?

    Cordialis aluti.

  22. #22
    paolin non è connesso Utente
    Data registrazione
    13-02-2014
    Messaggi
    144

    Predefinito

    Perchè non visualizzare direttamente il conteggio nella pagina lunaioscarica25.php?
    È proprio quello che intendevo fare, forse mi son spiegato male.

    Cordiali saluti

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •