Inserimento RECORD su DB ok in LOCALE ma online NO

di il
18 risposte

Inserimento RECORD su DB ok in LOCALE ma online NO

Buonasera,

ho preparato tutto in locale e il form di inserimento riesce ad inserire correttamente i dati richiesti nel DB localhost con XAMPP.

Una volta però pubblicato tutto online E ACCERTATO CHE COMUNQUE LA CONNESSIONE AL DB SIA OK… provo a popolare il form e ad inserire il record ma non mi aggiunge nulla.

Perchè in locale funziona mentre online no?

Grazie

18 Risposte

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    Senza alcun codice né dato di riferimento, come è possibile fare una ipotesi sensata?
    Le cause potrebbero essere infinite!

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    Scusa ecco il codice sia del form che sta nella pagina area_riservata.php e il codice della pagina aggiungi_record.php

    mentre l'errore che mi da è questo 

    "Warning: mkdir(): Permission denied in D:\inetpub\webs\la-maglia-rosanerocom\aggiungi_record.php on line 18

    Warning: move_uploaded_file(/fotomaglie/2022_2023/20230511_081301.jpg): failed to open stream: No such file or directory in D:\inetpub\webs\la-maglia-rosanerocom\aggiungi_record.php on line 29

    Warning: move_uploaded_file(): Unable to move 'C:\PHPVersions\PHP74\uploadtemp\phpA009.tmp' to '/fotomaglie/2022_2023/20230511_081301.jpg' in D:\inetpub\webs\la-maglia-rosanerocom\aggiungi_record.php on line 29
    Errore nel caricamento della foto 1.

    <?php
    // Includi il file di connessione al database
    include 'db_connect.php';
    
    // Funzione per verificare se il file è un'immagine
    function isImageFile($file) {
        $imageTypes = ['image/jpeg', 'image/png', 'image/gif'];
        return in_array($file['type'], $imageTypes);
    }
    
    // Gestione del form di inserimento
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $stagione = $_POST["stagione"];
        $anno = substr($stagione, 0, 4);
        $targetDir = "/fotomaglie/" . $stagione . "/";
    
        if (!is_dir($targetDir)) {
            mkdir($targetDir, 0777, true);
        }
    
        $foto1 = "";
        $foto2 = "";
        $foto_prova = "";
        $foto_prova2 = "";
    
        if ($_FILES["foto1"]["name"] != "") {
            if (isImageFile($_FILES["foto1"])) {
                $foto1 = $targetDir . $_FILES["foto1"]["name"];
                if (!move_uploaded_file($_FILES["foto1"]["tmp_name"], $foto1)) {
                    echo "Errore nel caricamento della foto 1.";
                    exit;
                }
            } else {
                echo "Errore: il file 1 non è un'immagine.";
                exit;
            }
        }
    
        if ($_FILES["foto2"]["name"] != "") {
            if (isImageFile($_FILES["foto2"])) {
                $foto2 = $targetDir . $_FILES["foto2"]["name"];
                if (!move_uploaded_file($_FILES["foto2"]["tmp_name"], $foto2)) {
                    echo "Errore nel caricamento della foto 2.";
                    exit;
                }
            } else {
                echo "Errore: il file 2 non è un'immagine.";
                exit;
            }
        }
    
        if ($_FILES["foto_prova"]["name"] != "") {
            if (isImageFile($_FILES["foto_prova"])) {
                $foto_prova = $targetDir . $_FILES["foto_prova"]["name"];
                if (!move_uploaded_file($_FILES["foto_prova"]["tmp_name"], $foto_prova)) {
                    echo "Errore nel caricamento della foto.";
                    exit;
                }
            } else {
                echo "Errore: il file foto prova non è un'immagine.";
                exit;
            }
        }
    
        if ($_FILES["foto_prova2"]["name"] != "") {
            if (isImageFile($_FILES["foto_prova2"])) {
                $foto_prova2 = $targetDir . $_FILES["foto_prova2"]["name"];
                if (!move_uploaded_file($_FILES["foto_prova2"]["tmp_name"], $foto_prova2)) {
                    echo "Errore nel caricamento della foto.";
                    exit;
                }
            } else {
                echo "Errore: il file foto prova 2 non è un'immagine.";
                exit;
            }
        }
    
        // Preparazione dell'inserimento nel database
        $giocatore = $_POST["giocatore"];
        $societa = $_POST["societa"];
        
        if (isset($_POST['maglia']) && is_array($_POST['maglia'])) {
            $maglie_selezionate = $_POST['maglia'];
            $maglia = '';
            foreach ($maglie_selezionate as $maglia_selezionata) {
                if ($maglia !== '') {
                    $maglia .= ', ';
                }
                $maglia .= $maglia_selezionata;
            }
        } else {
            $maglia = ''; // Nessuna maglia selezionata
        }
        
        $numero_maglia = $_POST["numero_maglia"];
        $campionato = $_POST["campionato"];
        $match = $_POST["match"];
        $tempo_di_gioco = $_POST["tempo_di_gioco"];
        $particolarita = $_POST["particolarita"];
        $descrizione = $_POST["descrizione"];
        $Taglia = $_POST["Taglia"];
    
        // Ottenere il valore per il campo "paginariferimento"
        $paginariferimento = str_replace('/', '', $stagione) . '.php';
    
        
        $memorabilia = isset($_POST['memorabilia']) ? 1 : 0;
    	$portiere = isset($_POST['portiere']) ? 1 : 0;
    	$invendita = isset($_POST['invendita']) ? 1 : 0;
    
        // Inserimento dei dati nel database
        $sql = "INSERT INTO maglie (anno, giocatore, societa, maglia, numero_maglia, stagione, campionato, `match`, tempo_di_gioco, particolarita, descrizione, foto1, foto2, Taglia, foto_prova, foto_prova2, invendita, memorabilia, paginariferimento, portiere)
                VALUES ('$anno', '$giocatore', '$societa', '$maglia', '$numero_maglia', '$stagione', '$campionato', '$match', '$tempo_di_gioco', '$particolarita', '$descrizione', '$foto1', '$foto2', '$Taglia', '$foto_prova', '$foto_prova2', '$invendita', '$memorabilia', '$paginariferimento', '$portiere')";
    
        // Dopo aver aggiunto il record, reindirizza l'utente alla pagina "area_riservata.php"
        header("Location: area_riservata.php?message=Record%20Aggiunto%20con%20successo");
    	
    	// Verifica se il file caricato non è un'immagine
    			$allowedTypes = array('image/jpeg', 'image/png', 'image/gif');
    			$fileType1 = $_FILES['foto1']['type'];
    			$fileType2 = $_FILES['foto2']['type'];
    			$fileTypeProva = $_FILES['foto_prova']['type'];
    			$fileTypeProva2 = $_FILES['foto_prova2']['type'];
    
    			if (!in_array($fileType1, $allowedTypes) && $fileType1 !== '') {
    				$errorMessage = 'Il file 1 deve essere un\'immagine JPEG, PNG o GIF.';
    				header("Location: aggiungi_record.php?message=" . urlencode($errorMessage));
    				exit;
    			}
    
    			if (!in_array($fileType2, $allowedTypes) && $fileType2 !== '') {
    				$errorMessage = 'Il file 2 deve essere un\'immagine JPEG, PNG o GIF.';
    				header("Location: aggiungi_record.php?message=" . urlencode($errorMessage));
    				exit;
    			}
    
    			if (!in_array($fileTypeProva, $allowedTypes) && $fileTypeProva !== '') {
    				$errorMessage = 'Il file di prova deve essere un\'immagine JPEG, PNG o GIF.';
    				header("Location: aggiungi_record.php?message=" . urlencode($errorMessage));
    				exit;
    			}
    
    			if (!in_array($fileTypeProva2, $allowedTypes) && $fileTypeProva2 !== '') {
    				$errorMessage = 'Il secondo file di prova deve essere un\'immagine JPEG, PNG o GIF.';
    				header("Location: aggiungi_record.php?message=" . urlencode($errorMessage));
    				exit;
    			}
    
        if ($conn->query($sql) === TRUE) {
            echo "Record inserito con successo.";
        } else {
            echo "Errore nell'inserimento del record: " . $conn->error;
        }
    }
    
    $conn->close();
    ?>
    
    <form action="aggiungi_record.php" method="post" enctype="multipart/form-data" target="_self">
    						  <table align="center">
    							<tr>
    							  <td><label for="stagione">Stagione:</label></td>
    							  <td><input type="text" name="stagione" id="stagione"></td>
    							   <td><label for="campionato">Campionato:</label></td>
    							  <td>
    								<select name="campionato" id="campionato">
    								  <option value="Champions League">Champions League</option>
    								  <option value="Europa League">Europa League</option>
    								  <option value="Serie A">Serie A</option>
    								  <option value="Serie B">Serie B</option>
    								  <option value="Serie C">Serie C</option>
    								  <option value="Serie D">Serie D</option>
    								</select>
    							  </td>
    							</tr>
    							<tr>
    							  <td><label for="societa">Società:</label></td>
    							  <td><input type="text" name="societa" id="societa"></td>
    							  <td><label for="giocatore">Giocatore:</label></td>
    							  <td><input type="text" name="giocatore" id="giocatore"></td>
    							</tr>
    							<tr>
    							   <td><label for="match">Match:</label></td>
    							  <td><input type="text" name="match" id="match"></td>
    							    <td><label>Tempo di Gioco:</label></td>
    								  <td>
    									<label for="tempo1"><input type="checkbox" name="tempo_di_gioco" id="tempo1" value="1" onclick="disableTempoCheckboxes(1)"> 1° T</label>
    									<label for="tempo2"><input type="checkbox" name="tempo_di_gioco" id="tempo2" value="2" onclick="disableTempoCheckboxes(2)"> 2° T</label>
    								  </td>
    							</tr>
    							<tr>
    							  <td><label>Maglia:</label></td>
    							 <td>
    							  <label for="maglia1"><input type="checkbox" name="maglia[]" id="maglia1" value="1" onclick="disableMaglieCheckboxes(1)"> 1°</label>
    							  <label for="maglia2"><input type="checkbox" name="maglia[]" id="maglia2" value="2" onclick="disableMaglieCheckboxes(2)"> 2°</label>
    							  <label for="maglia3"><input type="checkbox" name="maglia[]" id="maglia3" value="3" onclick="disableMaglieCheckboxes(3)"> 3°</label>
    							</td>
    							  <td><label for="taglia">Taglia:</label></td>
    							  <td><input type="text" name="Taglia" id="taglia"></td>
    							</tr>
    							<tr>
    							  <td><label for="numero_maglia">Numero Maglia:</label></td>
    							  <td><input type="text" name="numero_maglia" id="numero_maglia"></td>
    							  <td><label for="portiere">Portiere:</label></td>
    							  <td><input type="checkbox" name="portiere" id="portiere" value="1"></td>
    							 </tr>
    							 <tr>
    							  <td><label for="descrizione">Descrizione:</label></td>
    							  <td><input type="text" name="descrizione" id="descrizione" style="width: 200%;"></td>
    							</tr>
    							<tr>
    							  <td><label for="particolarita">Particolarità:</label></td>
    							  <td><input type="text" name="particolarita" id="particolarita" style="width: 200%;"></td>
    							</tr>							
    							<tr>
    							  <td><label for="foto1">Foto 1:</label></td>
    							  <td><input type="file" name="foto1" id="foto1"></td>
    								<td><label for="foto_prova">Foto Prova:</label></td>
    							  <td><input type="file" name="foto_prova" id="foto_prova"></td>
    							</tr>
    							<tr>
    							  <td><label for="foto2">Foto 2:</label></td>
    							  <td><input type="file" name="foto2" id="foto2"></td>
    							  <td><label for="foto_prova2">Foto Prova 2:</label></td>
    							  <td><input type="file" name="foto_prova2" id="foto_prova2"></td>
    							</tr>
    							<tr>
    							  <td><label for="invendita">Maglia in vendita:</label></td>
    							  <td>
    								 <td><input type="checkbox" name="invendita" id="invendita" value="1"></td>
    							  </td>
    							  <td><label for="memorabilia">Memorabilia:</label></td>
    							  <td><input type="checkbox" name="memorabilia" id="memorabilia"></td>
    							</tr>
    							
    						   
    						  </table>
    									 <form id="aggiungiRecordForm" action="aggiungi_record.php" method="POST">
    											<div style="text-align: center;">
    											<button id="aggiungiRecordButton" type="submit">Aggiungi Record</button>
    										</div>
    									</form>
    							
    							<?php
    							// Verifica se il parametro "message" è presente nell'URL
    							if (isset($_GET['message'])) {
    								$message = $_GET['message'];
    								echo '<div style="text-align: center; color: green; font-weight: bold;">' . $message . '</div>';
    							}
    							?>
    							
    						  </form>
  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    25/05/2023 - alessandro.vitale ha scritto:


    mentre l'errore che mi da è questo 

    Allora non è vero che semplicemente “non fa nulla”: un errore te lo da. :)

    Sarò ripetitivo, ma di nuovo… devi leggere la documentazione di Aruba.
    Non hai i permessi di scrittura in tutte le cartelle, ma solo in una soltando, oltreché nella “public” dove tuttavia anche altri potrebbero potenzialmente scrivere.

    Parti da qui.

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    E poi il messaggio è chiaro

    mkdir(): Permission denied

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    Anche se da FTP alla cartella fotomaglie gli ho dato tutti i permessi… dici che non basta?

    25/05/2023 - Alka ha scritto:


    Non hai i permessi di scrittura in tutte le cartelle, ma solo in una soltanto

    quale?

    la cartella fotomaglie sta nella root e dentro fotomaglie ci stanno tante altre sottocartelle dove poi andrò a caricare le img del form. 

    ho provato con questo codice 

    <?php
    echo $_SERVER['DOCUMENT_ROOT'];
    ?>

     a capire la radice e il risultato è questo 

    D:\inetpub\webs\la-maglia-rosanerocom

    ora.. alla luce di ciò.. è corretto questo codice? 

    // Gestione del form di inserimento
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $stagione = $_POST["stagione"];
        $anno = substr($stagione, 0, 4);
    	$anno_successivo = $anno + 1;
        $targetDir = "/fotomaglie/" . $anno . "_" . $anno_successivo . "/";
    
        if (!is_dir($targetDir)) {
            mkdir($targetDir, 0777, true);
        }
    
        $foto1 = "";
        $foto2 = "";
        $foto_prova = "";
        $foto_prova2 = "";
    
        if ($_FILES["foto1"]["name"] != "") {
            if (isImageFile($_FILES["foto1"])) {
                $foto1 = $targetDir . $_FILES["foto1"]["name"];
                if (!move_uploaded_file($_FILES["foto1"]["tmp_name"], $foto1)) {
                    echo "Errore nel caricamento della foto 1.";
                    exit;
                }
            } else {
                echo "Errore: il file 1 non è un'immagine.";
                exit;
            }
        }
    
        if ($_FILES["foto2"]["name"] != "") {
            if (isImageFile($_FILES["foto2"])) {
                $foto2 = $targetDir . $_FILES["foto2"]["name"];
                if (!move_uploaded_file($_FILES["foto2"]["tmp_name"], $foto2)) {
                    echo "Errore nel caricamento della foto 2.";
                    exit;
                }
            } else {
                echo "Errore: il file 2 non è un'immagine.";
                exit;
            }
        }
    
        if ($_FILES["foto_prova"]["name"] != "") {
            if (isImageFile($_FILES["foto_prova"])) {
                $foto_prova = $targetDir . $_FILES["foto_prova"]["name"];
                if (!move_uploaded_file($_FILES["foto_prova"]["tmp_name"], $foto_prova)) {
                    echo "Errore nel caricamento della foto.";
                    exit;
                }
            } else {
                echo "Errore: il file foto prova non è un'immagine.";
                exit;
            }
        }
    
        if ($_FILES["foto_prova2"]["name"] != "") {
            if (isImageFile($_FILES["foto_prova2"])) {
                $foto_prova2 = $targetDir . $_FILES["foto_prova2"]["name"];
                if (!move_uploaded_file($_FILES["foto_prova2"]["tmp_name"], $foto_prova2)) {
                    echo "Errore nel caricamento della foto.";
                    exit;
                }
            } else {
                echo "Errore: il file foto prova 2 non è un'immagine.";
                exit;
            }
        }

    Ritieni quindi che se  è corretto allora sia solo un problema di permessi a quale cartella? Fotomaglie? Anche se via ftp gli ho dato tutti i permessi del mondo ma non bastano? 

    Grazie  

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    25/05/2023 - alessandro.vitale ha scritto:


    Ritieni quindi che se  è corretto allora sia solo un problema di permessi a quale cartella? Fotomaglie? Anche se via ftp gli ho dato tutti i permessi del mondo ma non bastano? 

    Non so neanche se si parla di un hosting Windows oppure Linux.

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    La cartella che crei con

    mkdir($targetDir, 0777, true);
  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    25/05/2023 - Alka ha scritto:


    25/05/2023 - alessandro.vitale ha scritto:


    Ritieni quindi che se  è corretto allora sia solo un problema di permessi a quale cartella? Fotomaglie? Anche se via ftp gli ho dato tutti i permessi del mondo ma non bastano? 

    Non so neanche se si parla di un hosting Windows oppure Linux.

    windows

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    Ho verificato che cambiando il percorso in public/fotomaglie mi fa upload delle foto. 

    Quindi se riuscissi a farmi metterei permessi da ARUBA alla cartella fotomaglie.. gli stessi di public ho risolto. 

    Ora il problema rimane quello che nel DB non mi aggiunge il record.

    Dal codice postato prima cosa può essere?

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    25/05/2023 - alessandro.vitale ha scritto:


    Ho verificato che cambiando il percorso in public/fotomaglie mi fa upload delle foto. 

    Quindi se riuscissi a farmi metterei permessi da ARUBA alla cartella fotomaglie.. gli stessi di public ho risolto. 

    Non si cambiano i permessi nel servizio di hosting.

    Devi utilizzare le cartelle indicate nella documentazione, che per qualche motivo ti ostini a non leggere.

    In poche parole, hai acquistato una macchina che guidi per la prima volta, e stai “tediando” il forum chiedendo come si accende, come si accelera, come si cambiano le marce… hai acquistato un servizio da un provider, quindi prima si leggono le email che mandano, poi la documentazione, poi si prova e in caso di problema persistente si riporta il codice e la descrizione del problema (ammesso che il codice l'abbia scritto tu).

    25/05/2023 - alessandro.vitale ha scritto:


    Ora il problema rimane quello che nel DB non mi aggiunge il record.

    Dal codice postato prima cosa può essere?

    Alla fine dello script hai un pezzo di codice che mostra l'errore, ma poco sopra hai anche aggiunto agli header un redirect alla pagina “con successo”, quindi non saprai mai qual è l'errore.

    Tra l'altro, se c'era un errore nella scrittura delle immagini, questo probabilmente preveniva anche il salvataggio su DB: devi provare una volta sistemato il tutto, seguendo appunto le indicazioni riportate nella documentazione sopra (leggila!!).

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    La documentazione l'ho letta e ho capito benissimo che di default le cartelle con i permessi sono quelle elencate e quella che fa al caso mio è la public.

    Grazie al tuo suggerimento ho tolto il messaggio header e ho individuato l'errore che stava nel tipo di valore di un campo della tabella che non era impostato su booleano. L'ho impostato su boolean e ora funziona tutto benone. 

    Tornando al discorso dei permessi ritieni che chiedere ad ARUBA gli stessi permessi di public alla cartella fotomaglie sia fare un buco nell'acqua? 

    Fosse così.. cosa mi consigli? Di spostare tutti il contenuto della cartella fotomaglie in public?? Perchè nelle altre pagine del sito tipo https://www.la-maglia-rosanero.com/eugeniocorini.php

    le immagini le prende dalla cartella fotomaglie. 

    Quindi la mia intenzione era quella di caricare le foto con il form e poi visualizzarle nel sito come il link che ti ho riportato sopra. 

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    25/05/2023 - alessandro.vitale ha scritto:


    La documentazione l'ho letta e ho capito benissimo che di default le cartelle con i permessi sono quelle elencate e quella che fa al caso mio è la public.

    Attenzione che, se non ricordo male, quella cartella potrebbe subire scritture anche inviando comandi HTTP appositi (tipo delle PUT) andando potenzialmente a scrivere file esistenti.

    Verificherei che non vi siano problemi di sicurezza legati a questa cartella, che è pubblicamente accessibile in tutti i sensi.

    25/05/2023 - alessandro.vitale ha scritto:


    Tornando al discorso dei permessi ritieni che chiedere ad ARUBA gli stessi permessi di public alla cartella fotomaglie sia fare un buco nell'acqua? 

    Non è una opzione prevista dal servizio di hosting.

    25/05/2023 - alessandro.vitale ha scritto:


    Fosse così.. cosa mi consigli? Di spostare tutti il contenuto della cartella fotomaglie in public??

    Dipende. Quello che si può dire è che in cartelle diverse dalla “public” non hai diritti di lettura/scrittura assieme.

    Puoi quindi mettere in quella cartella solo i file che ti interessa scrivere o leggere, oppure tutti i file, oppure solo uno, oppure zero.
    Decidi tu tenendo presente quello che è possibile fare per ciascuna cartella.

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    Googolando ho letto che la cartella fotomaglie posso cambiargli i permessi REALMENTE solo dal FILE MANAGER di ARUBA entrancodi dal Pannello di controllo. 

    Così ho fatto ed effettivamente vedendo i permessi da li erano solo in lettura. Li ho aggiornati in scrittura… più tardi provo

    Grazie 

  • Re: Inserimento RECORD su DB ok in LOCALE ma online NO

    Niente.

    Ho pensato allora di usare la public come cartella “di passaggio” e crearmi un php che via ftp mi sposti il file dalla public alla cartella che desidero.

    <?php
    
    $ftp_server = "xxxxxxxxxxx";
    $ftp_user_name = "xxxxxxx";
    $ftp_user_pass = "xxxxxxxxxxxx";
    
    function moveFileViaFTP($source_file, $destination_file, $ftp_server, $ftp_user_name, $ftp_user_pass) {
        $conn_id = ftp_connect($ftp_server);
        $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    
        if ((!$conn_id) || (!$login_result)) {
            echo "La connessione FTP è fallita!";
            echo "Tentativo di connessione a $ftp_server per l'utente $ftp_user_name";
            return false;
        }
    
        $upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);
    
        ftp_quit($conn_id);
    
        return $upload;
    }

     al contempo ho modificato il php che gestisce le foto così 

    if ($_FILES["foto1"]["name"] != "") {
        if (isImageFile($_FILES["foto1"])) {
            $foto1 = $targetDir . $_FILES["foto1"]["name"];
            if (!move_uploaded_file($_FILES["foto1"]["tmp_name"], $foto1)) {
                echo "Errore nel caricamento della foto 1.";
                exit;
            } else {
                $destination_file = "/fotomaglie/" . $anno . "_" . $anno_successivo . "/" . $_FILES["foto1"]["name"];
                $source_file = $foto1;
                if (!moveFileViaFTP($source_file, $destination_file, $ftp_server, $ftp_user_name, $ftp_user_pass)) {
                    echo "Errore nello spostamento della foto 1 via FTP.";
                    exit;
                }
            }
        } else {
            echo "Errore: il file 1 non è un'immagine.";
            exit;
        }
    }

    MA MI VIENE RESTITUITO L'ERRORE : 

    Warning: ftp_put(): End in D:\inetpub\webs\la-maglia-rosanerocom\ftp_function.php on line 17

    Dove sbaglio? 

    Non credo che quì c'entrino i permessi, perchè sto usanto FTP e lo spostamento viene eseguito da dentro il server.

Devi accedere o registrarti per scrivere nel forum
18 risposte