script per inserire dati in form problematico

ciao, non sono molto pratico e sto provando un script per inserire dati nel db, ma ricevo errori.

questo il form per l'inserimento:

<form method="post" action="elabora_gestione_inserisci.php" enctype="multipart/form-data">
            <div><label>titolo: </label><input type="text" name="titolo" id="titolo" /></div>
            <div><label>descrizione: </label><textarea rows="15" cols="40" name="descrizione" id="descrizione">Inserisci la descrizione completa della circolare o corso</textarea></div>
            <div><label>allegato: </label><input type="file" name="allegato" id="allegato" /></div>
            <div><label>allegato 2 (opzionale): </label><input type="file" name="allegato2" id="allegato2" /></div>
            <div><label>allegato 3 (opzionale): </label><input type="file" name="allegato3" id="allegato3" /></div>
            <div><label>tema: </label><input type="text" name="tema" id="tema" /></div>
            <div><label>data corso: </label><input type="text" name="data_corso" id="data_corso" /></div>
            <div><label>numero partecipanti: </label><input type="text" name="numero_partecipanti" id="numero_partecipanti" /></div>
            <div><label>crediti: </label><input type="text" name="crediti" id="crediti" /></div>
            <div><label>quota iscrizione: </label><input type="text" name="quota_iscrizione" id="quota_iscrizione" /></div>
            <div><input type="submit" name="submit" value="Invia i dati" />
                <input type="reset" name="reset" value="Cancella i dati" />
            </div>
            </form>

questo lo script di elaborazione:

<?php
            if (isset($submit));
            
               $titolo=($POST['titolo']);
               $descrizione=($POST['descrizione']);
               $allegato=($POST['allegato']);
               $allegato2=($POST['allegato2']);
               $allegato3=($POST['allegato3']);
               $tema=($POST['tema']);
               $data_corso=($POST['data_corso']);
               $numero_partecipanti=($POST['numero_partecipanti']);
               $crediti=($POST['crediti']);
               $quota_iscrizione=($POST['quota_iscrizione']);
               
            $sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso', '$numero_partecipanti', '$crediti', '$quota_iscrizione', 'NOW()')"
            
            mysql_close($link);
            
            echo '<p>I dati sono stati inseriti correttamente, controllali andando in <a href=............></a>, oppure alla pagina <a href=...................>>info ecm</a>';
         ?>

al momento ricevo un errore su una linea che è questa:

            mysql_close($link);
            
            echo '<p>I dati sono stati inseriti correttamente, controllali andando in <a href=".........................';
         ?>

esattamente quella dello spazio vuoto....  :'(

grazie

inviato 8 anni fa
gabar-el
X 0 X

Questo script non ha molto senso, chiude una connessione a MySQL senza prima averla aperta. La query poi non viene mai lanciata e l'IF iniziale controlla una variabile inesistente ed inoltre non ha le parentesi graffe per rachiudere il codice sottostante. Ci sono più errori che righe di codice.... :giveup: :dunno:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ok, ho capito che sono una frana. simpatica la bandiera bianca, ti capisco. cmq se hai voglia di riprendere la guerra: la connessione l'ho aperta a inizio pagina in un altro script, è una cosa insensata? deve far parte per forza dello stesso script? la lancio in questa maniera (vedi sotto), è corretto? circa l'if, ho dimenticato le parentesi e pensavo che $submit servisse per verificare che i dati fossero inviati, ma effettivamente non è dichiarata (pensavo fosse inerente al submit del form), è evidente che sono proprio fuori....

            if (isset($submit));
            
               {
                  $titolo=($POST['titolo']);
                  $descrizione=($POST['descrizione']);
                  $allegato=($POST['allegato']);
                  $allegato2=($POST['allegato2']);
                  $allegato3=($POST['allegato3']);
                  $tema=($POST['tema']);
                  $data_corso=($POST['data_corso']);
                  $numero_partecipanti=($POST['numero_partecipanti']);
                  $crediti=($POST['crediti']);
                  $quota_iscrizione=($POST['quota_iscrizione']);
               }
               
            $sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso', '$numero_partecipanti', '$crediti', '$quota_iscrizione', 'NOW()')";
            
            $query = ($sql)
               or die("Inserimento dati non valido, controlla di aver inserito i dati correttamente" . mysql_error());
               
            mysql_close($link);
            
            echo '<p>I dati sono stati inseriti correttamente, controllali andando in <a href="../index.php" title="Vai alla home page">home page</a>, oppure alla pagina <a href="../ecm/info-ecm.php" title="Vai alla info ecm">info ecm</a>';
         ?>

grazie

risposto 8 anni fa
gabar-el
X 0 X

$query = ($sql)

cos'è?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ormai rido di me stesso!  :2funny:

risposta: non lo so!

forse un tentativo di lanciare la query come tu avevi detto?

La query poi non viene mai lanciata

circa la funzione if riesci a dirmi qualcosa? avevo guardato uno script che mi sembrava a posto, ma o non lo era o io non ci ho capito nulla (opto per la seconda). come avviene la scrittura? come fa il form a sapere che quando premo invio deve scrivere sul db?  :D

credici di brutto! non alzare bandiera bianca..... sono un po un diesel, ma quando capisco alcuni meccanismi dopo ci sto dentro....

thanks

risposto 8 anni fa
gabar-el
X 0 X

che volevo poi scriverlo così

mysql_query($sql)
risposto 8 anni fa
gabar-el
X 0 X

nessuno mi da più due dritte? altrimenti non ci salto fuori.... al momento ho capito alcune cose e le ho implementate così, ma continuo a ricevere errori

<?php
         
         $link = mysql_connect('server', 'miouser', 'miapwd')
            or die ('Non è possibile connesttersi al databaase (contattare l\'amministratore): ' . mysql_error());
         $db_selected = mysql_select_db('miodb', $link)
            or die ("Errore nella selezione del database: " . mysql_error());
         
         if($_POST) {
            inserisci_record();
         }
         
            function inserisci_record()
            
               {
                  $titolo=($POST['titolo']);
                  $descrizione=($POST['descrizione']);
                  $allegato=($POST['allegato']);
                  $allegato2=($POST['allegato2']);
                  $allegato3=($POST['allegato3']);
                  $tema=($POST['tema']);
                  $data_corso=($POST['data_corso']);
                  $numero_partecipanti=($POST['numero_partecipanti']);
                  $crediti=($POST['crediti']);
                  $quota_iscrizione=($POST['quota_iscrizione']);
               }
               
            $sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso', '$numero_partecipanti', '$crediti', '$quota_iscrizione', 'NOW()')";
            
            $result = mysql_query($sql);
            
            if(!$result) {
               die("Inserimento dati non valido, controlla di aver inserito i dati correttamente" . mysql_error());
               
            mysql_close($link);
            
            echo '<p>I dati sono stati inseriti correttamente, controllali andando in <a href="../index.php" title="Vai alla home page">home page</a>, oppure alla pagina <a href="../ecm/info-ecm.php" title="Vai alla info ecm">info ecm</a>';
         ?>

l'errore che ricevo è questo:

Parse error: syntax error, unexpected $end in C:\Programmi\Apache Software Foundation\Apache2.2\htdocs\miacartella\gestione\elabora_gestione_inserisci.php on line 118

grazie

risposto 8 anni fa
gabar-el
modificato 8 anni fa
X 0 X

Ciao,

nel tuo codice forse manca la chiusura della parentesi graffa dell' "if(!$result) {".

Se anche questo non funziona ti chiedo cortesemente di pubblicare il codice dell'intera pagina così riesco a capirci qualcosa di più.

Buona giornata

Zeta

risposto 8 anni fa
zeta80
X 0 X

sono riuscito ad aggiustare lo script, la query passa, ma non scrive i dati. al momento sono messo così:

form html:

<form method="post" action="elabora_gestione_inserisci.php" enctype="multipart/form-data">
            <fieldset>
            <legend>Modulo per inserimento circolari e/o corsi</legend>
            <div><label>titolo: </label><input type="text" name="titolo" id="titolo" /></div>
            <div><label>descrizione: </label><textarea rows="15" cols="40" name="descrizione" id="descrizione">Inserisci la descrizione completa della circolare o corso</textarea></div>
            <div><label>allegato: </label><input type="file" name="allegato" id="allegato" /></div>
            <div><label>allegato 2 (opzionale): </label><input type="file" name="allegato2" id="allegato2" /></div>
            <div><label>allegato 3 (opzionale): </label><input type="file" name="allegato3" id="allegato3" /></div>
            <div><label>tema: </label><input type="text" name="tema" id="tema" /></div>
            <div><label>data corso: </label><input type="text" name="data_corso" id="data_corso" /></div>
            <div><label>numero partecipanti: </label><input type="text" name="numero_partecipanti" id="numero_partecipanti" /></div>
            <div><label>crediti: </label><input type="text" name="crediti" id="crediti" /></div>
            <div><label>quota iscrizione: </label><input type="text" name="quota_iscrizione" id="quota_iscrizione" /></div>
            <div><input class="submit" type="submit" name="submit" value="Invia i dati" />
                <input class="reset" type="reset" name="reset" value="Cancella i dati" />
            </div>
            </fieldset>
            </form>

script php:

<?php
         
         $link = mysql_connect('mioserver', 'miouser', 'miapwd')
            or die ('Non è possibile connesttersi al databaase (contattare l\'amministratore): ' . mysql_error());
         $db_selected = mysql_select_db('cedifar', $link)
            or die ("Errore nella selezione del database: " . mysql_error());
         
         if($_POST) {
            inserisci_record();
         }
         
            function inserisci_record()
            
               {
                  $titolo=$_POST['titolo'];
                  $descrizione=$_POST['descrizione'];
                  $allegato=$_POST['allegato'];
                  $allegato2=$_POST['allegato2'];
                  $allegato3=$_POST['allegato3'];
                  $tema=$_POST['tema'];
                  $data_corso=$_POST['data_corso'];
                  $numero_partecipanti=$_POST['numero_partecipanti'];
                  $crediti=$_POST['crediti'];
                  $quota_iscrizione=$_POST['quota_iscrizione'];
               }
               
            $sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso', '$numero_partecipanti', '$crediti', '$quota_iscrizione', 'NOW()')";
            
            $result = mysql_query($sql);
            
            if(!$result) {
               die("Inserimento dati non valido, controlla di aver inserito i dati correttamente" . mysql_error());
            }
               
            mysql_close($link);
            
            echo 'testo vario';
         ?>

mi hanno detto che nel campo dei file (allegato) non devo usare $_POST ma $_FILE, è vero? e il file come passerà attraverso il form? ovvero, come farà ad essere caricato in una cartella specifica? il percorso sarà presente nel db, ma il file? sono un pò confuso.... :-\

grazie

risposto 8 anni fa
gabar-el
X 0 X

La dritta che ti hanno datto nell'utilizzare la variabile $_File e non $_Post per "allegato", "allegato2" e "allegato3" è giustissima. E soprattutto è corretta la tipologia ecntype="multipart/form-data" nel form che utilizzi. Di conseguenza l'assegnazione alla variabile $allegato=$_POST['allegato'] è errata per un campo di input di tipo file.

Per caricare il file nel server, devi utilizzare il seguente codice che ti riporto come esempio.

$writable_apache = "E:\prova.zip";
echo $_FILES['uploadfile']['tmp_name'];
if (isset($_FILES['uploadfile']['tmp_name']))
   if (copy($_FILES['uploadfile']['tmp_name'], $writable_apache)) {
      echo "File caricato!!!!";
   }

Questo codice recupera il file passato in post da un form e lo carica nel percorso "E:\" nel server rinominandolo "prova.zip". In questo caso sapevo a priori che il file era uno zip. Altrimenti potresti verificare i dati passati dalla variabile $_FILE (ad es facendo un print_r($_FILE['allegato']) ) e trovare tra i dati il nome originale del file e tramite poche righe di codice rinominarlo a tuo piacimento con l'estensione corretta del file originale.

Per quanto riguarda il percordo del file devi salvare nel DB quello dello finale del server (nel mio esempio "E:\prova.zip").

Buon lavoro

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

cavolo, che caos, io non sono molto pratico, cmq provo.

io so già che i file o saranno pdf o doc, mi sa che mi servirà ciò che mi dicevi per recuperare il nome del file (non mi interesserà rinominarlo....). circa $writable_apche quindi io posso dargli il percorso di una cartella all'interno del mio sito? ma questo script dove lo inserirò esattamente?

vedrò di provare ma mi sa che sarà dura. grazie mille....

risposto 8 anni fa
gabar-el
X 0 X

sto cercando di capire lo script che mi hai passato. non capisco se devo sostituirlo a questa variabile:

$allegato=$_FILES['allegato'];

o cosa?

se lo sostituisco a questa variabile il form come farà poi a recuperare il path del file? se invece sto dicendo delle cavolate allora non ho capito che uso devo farne.....  :-[

inoltre mi chiedo: uploadfile e tmp_name sono solamente nomi fittizzi che sostituisco come voglio?

e circa questo percorso

$writable_apache = "E:\prova.zip";

io posso inserire un semplice percorso a una cartella? ma non ho capito circa il nome del file....

io ho provato a implementarlo così:

$titolo=$_POST['titolo'];
            $descrizione=$_POST['descrizione'];
            $allegato="../circolari/";
            echo $_FILES['allegato']['tmp_name_allegato']
            if (isset($FILES['allegato']['tmp_name_allegato']))
               if (copy($FILES['allegato']['tmp_name_allegato'], $allegato)) {
                  echo "File caricato!!!";
               }
            $allegato2=$_FILES['allegato2'];
            $allegato3=$_FILES['allegato3'];
            $tema=$_POST['tema'];
            $data_corso=$_POST['data_corso'];
            $numero_partecipanti=$_POST['numero_partecipanti'];
            $crediti=$_POST['crediti'];
            $quota_iscrizione=$_POST['quota_iscrizione'];

ma mi sa che ho fatto una boiata vero? ricevo infatti un errore e sono consapevole di non capire il corretto funzionamento dello script....

 :wallbash:

thanks

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

diciamo che hai fatto solo qualche piccolo errore

1) $allegato="../circolari/"; deve essere il percorso di un file

2) $_FILES['allegato']['tmp_name_allegato'] non esiste (il campo è sempre "tmp_name")

Il funzionamento dello script è semplice:

$writable_apache = "E:\prova.zip"; -> Creo il percorso del file che voglio caricare es: ../allegato/prova.zip(ovviamente posso cambiare il nome della variabile  ::) ) e sarà quello che salvo nel mio DB

echo $_FILES['uploadfile']['tmp_name']; -> Semplice echo di verifica

if (isset($_FILES['uploadfile']['tmp_name']))

if (copy($_FILES['uploadfile']['tmp_name'], $writable_apache)) { -> Caricamento del file

   echo "File caricato!!!!"; -> Messaggio di conferma

}

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

ok, grazie della pazienza. ho capito alcune cose, ma altre mi rimangono ancora in dubbio.

ho modificato lo script come mi hai detto, capendone alcune cose. praticamente mi ritrovo nel db la path che arriva da questa stringa:

$allegato="../circolari/allegato_prova.pdf";

ma il file come cavolo lo carico veramente? cioè fisicamente? ho visto i tuoi commenti, ma a me non carica nulla. da qui mi sorge il dubbio; in locale funziona? me lo dovrei ritrovare nella cartella del sito no? ma quale se non ne specifico una da nessuna parte?

sto dicendo delle c....e? penso forse di aver capito alcune cose e invece sono fuori di brutto?

spero di no....

grazie

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

ti confermo che questo script funziona pure in locale. Ovviamente il percorso fisico è quello del sito da cui parti.

Se hai caricato il sito all'interno di una cartella "prova" in locale e visualizzi il sito con il percorso http://localhost/prova/ il file verrà caricato nel percorso http://localhost/circolari/allegato_prova.pdf

Ovviamente viene caricato se il percorso esiste realmente e soprattutto mi raccomando di fare attenzione alle dimensioni del file che carichi. Se questo è troppo grande la pagina rischia di bloccarsi per timeout prima che si completi l'operazione di upload.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

mmmhhhh..... non riesco a capire perchè a me non lo carica? ma da ciò che dici sembra che il file venga caricato da ciò che io pensavo servisse solamente per nominare il file.....  :buck:

cmq io visualizzo il sito in localhost/miosito/ e ho tutti i documenti pdf nella cartella che sta in localhost/miosito/documenti/ ed effettuo il caricamento da una pagina che si trova in un percorso così: localhost/miosito/gestione/paginaform.php

se io gli do come percorso ../documenti/file.pdf perchè non me lo carica? me lo dovrei ritrovare nella cartella documenti del sito no? il file rispetta le dimensioni. non faccio altro che dirgli "esci da gestione, entra in documenti e carica file.pdf....

risposto 8 anni fa
gabar-el
X 0 X

mhhh.... non ci sono proprio con sta cosa (perchè nelle altre si?  :) )

lo script che mi hai suggerito mi crea il link nel db, che è forzato da me (i vari link ai file avranno tutti lo stesso percorso), non capisco come puoi indicarmi quindi altri percorsi. io ci inserirò solo il nome del file, o meglio, quando gli utenti caricheranno il file solo il nome dello stesso verrà scritto nel db, poichè il resto del percorso è scritto il html nella pagina

'<a href="circolari/'.$row['allegato'].'" title="Continua a leggere">link &rArr;</a>'

quindi non riesco a capire, se la parte di codice di cui ti parlo:

$allegato="allegato_prova.pdf";
            echo $_FILES['uploadfile']['tmp_name'];
            if (isset($_FILES['uploadfile']['tmp_name']))
               if (copy($_FILES['uploadfile']['tmp_name'], $allegato)) {
                  echo "File caricato!!!";
               }

altro non fa che scrivermi il nome del file, come dovrebbe caricare? io ho provato vari percorsi, anche se l'unico fattibile è quello che ho lasciato nell'esempio (altrimenti poi il link in se non porterebbe al file), ma il file non lo carica, non c'è un modo per verificare il perchè non viene caricato?

grazie

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

con l'ultimo script che hai scritto il file dovrebbe essere stato caricato all'interno della cartella "gestione".

 :bye:

risposto 8 anni fa
zeta80
X 0 X

è evidente che mi sfugge qualcosa. cmq, nella cartella gestione non ce l'ho caricato....

poi la domanda che ti pongo è sempre quella, ma se lasciando questo percorso (che come dicevo è obbligato perchè poi in home page chi naviga accede ai link solo con un percorso del genere) ottengo un link al file corretto, ma non carico nella giusta cartella, come risolvo? ovvero come faccio a caricare nella giusta cartella e ottenere poi un link corretto? immagino impostando un codice html che rimandi al giusto link....

cmq il problema primario rimane quello del caricamento.....

 :'(

grazie

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

potresti gentilmente postarmi tutto il codice della pagina che carica il file?

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

questo il form:

<form method="post" action="elabora_gestione_inserisci.php" enctype="multipart/form-data">
            <fieldset>
            <legend>Modulo per inserimento circolari e/o corsi</legend>
            <div><label>titolo: </label><input type="text" name="titolo" id="titolo" /></div>
            <div><label>descrizione: </label><textarea rows="15" cols="40" name="descrizione" id="descrizione">Inserisci la descrizione completa della circolare o corso</textarea></div>
            <div><label>allegato: </label><input type="hidden" name="MAX_FILE_SIZE" value="30000" />
                                 <input type="file" name="allegato" id="allegato" /></div>
            <div><label>allegato 2 (opzionale): </label><input type="hidden" name="MAX_FILE_SIZE" value="30000" />
                                 <input type="file" name="allegato2" id="allegato2" /></div>
            <div><label>allegato 3 (opzionale): </label><input type="hidden" name="MAX_FILE_SIZE" value="30000" />
                                 <input type="file" name="allegato3" id="allegato3" /></div>
            <div><label>tema: </label><input type="text" name="tema" id="tema" /></div>
            <div><label>data corso: </label><input type="text" name="data_corso" id="data_corso" /></div>
            <div><label>numero partecipanti: </label><input type="text" name="numero_partecipanti" id="numero_partecipanti" /></div>
            <div><label>crediti: </label><input type="text" name="crediti" id="crediti" /></div>
            <div><label>quota iscrizione: </label><input type="text" name="quota_iscrizione" id="quota_iscrizione" /></div>
            <div><input class="submit" type="submit" name="submit" value="Invia i dati" />
                <input class="reset" type="reset" name="reset" value="Cancella i dati" />
            </div>
            </fieldset>
            </form>

può essere che i vari campi per l'invio dei file creino qualche conflitto? soprattutto per il fatto che nella pagina di elaborazione non ci sia tutto il codice che permetta di caricare anche gli altri 2 link. cmq io ho provato anche omettendo il codice dei campi allegato2 e allegato3, sia nel form che nella pagina di elaborazione. spero di non aver creato confusione con ciò che ho detto....

codice php della pagina di elaborazione:

<?php
         // connessione al server mysql locale
         $link = mysql_connect('localhost', 'miouser', 'miapwd')
            or die ('Non è possibile connettersi al database (contattare l`amministratore): ' . mysql_error());
         // connessione al db miodb
         $db_selected = mysql_select_db('miodb', $link)
            or die ("Errore nella selezione del database: " . mysql_error());
            
            $titolo=$_POST['titolo'];
            $descrizione=$_POST['descrizione'];
            $allegato="../circolari/allegato_prova.pdf";
            echo $_FILES['uploadfile']['tmp_name'];
            if (isset($_FILES['uploadfile']['tmp_name']))
               if (copy($_FILES['uploadfile']['tmp_name'], $allegato)) {
                  echo "File caricato!!!";
               }
            $allegato2=$_FILES['allegato2'];
            $allegato3=$_FILES['allegato3'];
            $tema=$_POST['tema'];
            $data_corso=$_POST['data_corso'];
            $numero_partecipanti=$_POST['numero_partecipanti'];
            $crediti=$_POST['crediti'];
            $quota_iscrizione=$_POST['quota_iscrizione'];
               
            $sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso', '$numero_partecipanti', '$crediti', '$quota_iscrizione', NOW())";
            
            $result = mysql_query($sql);
            
            if(!$result) {
               die("Inserimento dati non valido, controlla di aver inserito i dati correttamente" . mysql_error());
            }
               
            mysql_close($link);
            
            echo '<p>testo vario</p>';
         ?>

grazie

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

hai proprio fatto copia e incolla del mio script nel tuo codice... per questo non funzionava  :'(

Il motivo è semplice: nel tuo form non esiste nessun campo che ha nome uploadfile.

Ti riporto qui sotto una versione di codice semplice (testato in locale) che nel caso in cui le variabili dei $_FILES abbiano un valore, copi il file nel tuo server.

$allegato = "./allegato_prova.jpg";
$allegato2 = "./allegato1_prova.jpg";
$allegato3 = "./allegato2_prova.jpg";

if (isset($_FILES['allegato']['tmp_name']))
   copy($_FILES['allegato']['tmp_name'], $allegato);

if (isset($_FILES['allegato2']['tmp_name']))
   copy($_FILES['allegato2']['tmp_name'], $allegato2);

if (isset($_FILES['allegato3']['tmp_name']))
   copy($_FILES['allegato3']['tmp_name'], $allegato3);

Diciamo che si può ottimizzare inserendo altre cose in base al tuo utilizzo:

- codice che controlla che il nome sia corretto prima del caricamento(togliere spazi, caratteri speciali, ecc);

- codice che  assegna un nome definito (es: allegato1) e che associ l'estensione corretta del file.

Sostituisci il codice che ti ho dato togliendo questo che riporto di seguito:

$allegato="../circolari/allegato_prova.pdf";

echo $_FILES['uploadfile']['tmp_name'];

if (isset($_FILES['uploadfile']['tmp_name']))

if (copy($_FILES['uploadfile']['tmp_name'], $allegato)) {

echo "File caricato!!!";

}

$allegato2=$_FILES['allegato2'];

$allegato3=$_FILES['allegato3'];

e tutto dovrebbe funzionare...

Buona giornata

 :bye:

Marco

risposto 8 anni fa
zeta80
X 0 X

mmhhh... evidentemente non ci sono con la testa. oppure non capisco bene qual è il punto di partenza circa i percorsi. mi confermi ciò che dicesti qualche post fa?

Ciao,

ti confermo che questo script funziona pure in locale. Ovviamente il percorso fisico è quello del sito da cui parti.

Se hai caricato il sito all'interno di una cartella "prova" in locale e visualizzi il sito con il percorso http://localhost/prova/ il file verrà caricato nel percorso http://localhost/circolari/allegato_prova.pdf

Ovviamente viene caricato se il percorso esiste realmente e soprattutto mi raccomando di fare attenzione alle dimensioni del file che carichi. Se questo è troppo grande la pagina rischia di bloccarsi per timeout prima che si completi l'operazione di upload.

continuo a non riuscire a caricare file. il mio (ehm... forse più tuo...) script al momento è questo:

$titolo=$_POST['titolo'];
            $descrizione=$_POST['descrizione'];
            $allegato="/circolari/allegato_prova.pdf";
            $allegato2="/circolari/allegato2_prova.pdf";
            $allegato3="/circolari/allegato3_prova.pdf";
            
            if (isset($_FILES['allegato']['tmp_name']))
               copy($_FILES['allegato']['tmp_name'], $allegato);
            
            if (isset($_FILES['allegato2']['tmp_name']))
               copy($_FILES['allegato2']['tmp_name'], $allegato2);

            if (isset($_FILES['allegato3']['tmp_name']))
               copy($_FILES['allegato3']['tmp_name'], $allegato3);

            $tema=$_POST['tema'];
            $data_corso=$_POST['data_corso'];
            $numero_partecipanti=$_POST['numero_partecipanti'];
            $crediti=$_POST['crediti'];
            $quota_iscrizione=$_POST['quota_iscrizione'];
               
            $sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso', '$numero_partecipanti', '$crediti', '$quota_iscrizione', NOW())";
            
            $result = mysql_query($sql);
            
            if(!$result) {
               die("Inserimento dati non valido, controlla di aver inserito i dati correttamente" . mysql_error());
            }

ma ho notato che anche se non seleziono file nei campi allegato2 e allegato3 mi ritrovo nel db ciò che arriva da questi array:

$allegato2="/circolari/allegato2_prova.pdf";
$allegato3="/circolari/allegato3_prova.pdf";

e di conseguenza me lo ritrovo poi nella pagina....  :-\

da ciò che mi dicesti in un altro post la parte degli array qui sopra da il percorso al link e la parte degli if e copy carica il file, mi sembra così strano che non me lo carichi.... non capisco proprio perchè. non c'è un qualche script per verificare eventuali errori nel caricamento?

grazie marco!

risposto 8 anni fa
gabar-el
X 0 X

mmhhh... evidentemente non ci sono con la testa. oppure non capisco bene qual è il punto di partenza circa i percorsi. mi confermi ciò che dicesti qualche post fa?

Ciao,

ti confermo che questo script funziona pure in locale. Ovviamente il percorso fisico è quello del sito da cui parti.

Se hai caricato il sito all'interno di una cartella "prova" in locale e visualizzi il sito con il percorso http://localhost/prova/ il file verrà caricato nel percorso http://localhost/circolari/allegato_prova.pdf

Ovviamente viene caricato se il percorso esiste realmente e soprattutto mi raccomando di fare attenzione alle dimensioni del file che carichi. Se questo è troppo grande la pagina rischia di bloccarsi per timeout prima che si completi l'operazione di upload.

continuo a non riuscire a caricare file. il mio (ehm... forse più tuo...) script al momento è questo:

$titolo=$_POST['titolo'];
            $descrizione=$_POST['descrizione'];
            $allegato="/circolari/allegato_prova.pdf";
            $allegato2="/circolari/allegato2_prova.pdf";
            $allegato3="/circolari/allegato3_prova.pdf";
            
            if (isset($_FILES['allegato']['tmp_name']))
               copy($_FILES['allegato']['tmp_name'], $allegato);
            
            if (isset($_FILES['allegato2']['tmp_name']))
               copy($_FILES['allegato2']['tmp_name'], $allegato2);

            if (isset($_FILES['allegato3']['tmp_name']))
               copy($_FILES['allegato3']['tmp_name'], $allegato3);

            $tema=$_POST['tema'];
            $data_corso=$_POST['data_corso'];
            $numero_partecipanti=$_POST['numero_partecipanti'];
            $crediti=$_POST['crediti'];
            $quota_iscrizione=$_POST['quota_iscrizione'];
               
            $sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso', '$numero_partecipanti', '$crediti', '$quota_iscrizione', NOW())";
            
            $result = mysql_query($sql);
            
            if(!$result) {
               die("Inserimento dati non valido, controlla di aver inserito i dati correttamente" . mysql_error());
            }

ma ho notato che anche se non seleziono file nei campi allegato2 e allegato3 mi ritrovo nel db ciò che arriva da questi array:

$allegato2="/circolari/allegato2_prova.pdf";
$allegato3="/circolari/allegato3_prova.pdf";

e di conseguenza me lo ritrovo poi nella pagina....  :-\

da ciò che mi dicesti in un altro post la parte degli array qui sopra da il percorso al link e la parte degli if e copy carica il file, mi sembra così strano che non me lo carichi.... non capisco proprio perchè. non c'è un qualche script per verificare eventuali errori nel caricamento?

grazie marco!

Intanto correggiamo la parte di inserimento dei nomi nel DB:

$titolo=$_POST['titolo'];
            $descrizione=$_POST['descrizione'];
            
            if (isset($_FILES['allegato']['tmp_name'])) {
                $allegato="../circolari/allegato_prova.pdf";
                                    copy($_FILES['allegato']['tmp_name'], $allegato);
                                } else {
                                    $allegato = "";
                                }
            
            if (isset($_FILES['allegato2']['tmp_name'])) {
               $allegato2="../circolari/allegato2_prova.pdf";
                                       copy($_FILES['allegato2']['tmp_name'], $allegato2);
                                } else {
                                      $allegato2 = "";
                                }

            if (isset($_FILES['allegato3']['tmp_name'])) {
               $allegato3="../circolari/allegato3_prova.pdf";
                                        copy($_FILES['allegato3']['tmp_name'], $allegato3);
                                } else {
                                        $allegato3 = "";
                                } 

            $tema=$_POST['tema'];
            $data_corso=$_POST['data_corso'];
            $numero_partecipanti=$_POST['numero_partecipanti'];
            $crediti=$_POST['crediti'];
            $quota_iscrizione=$_POST['quota_iscrizione'];
               
            $sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso', '$numero_partecipanti', '$crediti', '$quota_iscrizione', NOW())";
            
            $result = mysql_query($sql);
            
            if(!$result) {
               die("Inserimento dati non valido, controlla di aver inserito i dati correttamente" . mysql_error());
            }

Da un tuo posto precedente il percorso per caricare i file dovrebbe essere http://localhost/miosito/circolari/ mentre il percorso della tua pagina è http://localhost/miosito/gestione/paginaform.php. Ho corretto anche il percorso dei file nello script.

Tieni ben presente che eseguendo più volte questo script i file verranno sovrascritti nella cartella di destinazione nel caso tu ne carichi di nuovi poiché il nome impostato è sempre lo stesso.

Buona serata

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

grazie delle correzzioni. ho capito come funziona il ragionamento dello script. se è settato scrivi questo, altrimenti non scrivere nulla. ma purtroppo mi continua a scrivere nei campi allegato2 e allegato3 anche quando non inserisco un file. mi scrive il percorso come se fosse settato. inoltre continuo nel non riuscire circa il caricamento del file.....

grazie dell'augurio di buona serata. speriamo....

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

ecco qui una versione ancora ottimizzata del codice che solo nel caso in cui il file venga effettivamente caricato ti salva il percorso nel DB altrimenti lo rimette a vuoto. Questo ti serve per testare effettivamente se i file ti vengono caricati correttamente. Ah un'altra cosa la dimensione massima dei file che riesci a caricare è 30 KB...

$titolo=$_POST['titolo'];
$descrizione=$_POST['descrizione'];

if (isset($_FILES['allegato']['tmp_name'])) {
    $allegato="../circolari/allegato_prova.pdf";
        if ( !copy($_FILES['allegato']['tmp_name'], $allegato) ) {
           $allegato = "";
        }
} else {
     $allegato = "";
}

if (isset($_FILES['allegato2']['tmp_name'])) {
    $allegato2="../circolari/allegato2_prova.pdf";
        if ( !copy($_FILES['allegato2']['tmp_name'], $allegato2) ) {
           $allegato2 = "";
        }
} else {
    $allegato2 = "";
}

if (isset($_FILES['allegato3']['tmp_name'])) {
    $allegato3="../circolari/allegato3_prova.pdf";
       if ( !copy($_FILES['allegato3']['tmp_name'], $allegato3) ) {
           $allegato3 = "";
       }
} else {
    $allegato3 = "";
}
$tema=$_POST['tema'];
$data_corso=$_POST['data_corso'];
$numero_partecipanti=$_POST['numero_partecipanti'];
$crediti=$_POST['crediti'];
$quota_iscrizione=$_POST['quota_iscrizione'];

$sql = "INSERT INTO circolari (titolo, descrizione, allegato, allegato2, allegato3, tema, data_corso, numero_partecipanti, crediti, quota_iscrizione, data_inserimento) VALUES ('$titolo', '$descrizione', '$allegato', '$allegato2', '$allegato3', '$tema', '$data_corso', '$numero_partecipanti', '$crediti', '$quota_iscrizione', NOW())";

$result = mysql_query($sql);

if(!$result) {
    die("Inserimento dati non valido, controlla di aver inserito i dati correttamente" . mysql_error());
}

Buona giornata

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

ciao marco.

cavolo, scusa! mi sa che non mi caricava il file per via delle dimensioni! sono proprio frusto. ora è ok, mi carica il file correttamente. ho eliminato anche quel controllo if !copy. il problema che ho ora riguarda la formattazione. dovendo scrivere il collegamento in html nella pagina che estrapola i dati, ho messo appunto i link ai file che arrivano dai campi allegato2 e allegato3:

echo '<p>'.'<a href="circolari/'.$row['allegato3'].'" title="Link 3">Link 3 >>></a>'.'</p>';

ma in questa maniera mi ritrovo link morti anche dove non ho caricato altri file nei campi allegato2 e allegato3. avrò sempre un primo link e quindi li l'html non è un problema, ma non in tutti gli inserimenti avrò anche gli altri link, quindi? come posso ovviare al problema? non riesco a mettere l'html come prefissato nello script php? (visto che poi ho una funzione che dice che se è settato il file mostro il campo altrimenti no...).

Fino quanto può essere grande il file che carico?

Ora comincio a dare un occhio alle varie protezioni, spero di metterle tutte, tipo per convertire gli a capo in br, convertire la data in un formato comprensibile, dare un messaggio di errore adeguato se i dati inseriti non sono inseriti correttamente, etcc....

thanks

risposto 8 anni fa
gabar-el
X 0 X

Ciao,

per quanto riguarda l'impaginazione, puoi semplicemente inserire un if per controllare se il campo dell'allegato nel DB non è vuoto. Per quanto riguarda il percorso del link, fai attenzione a quello che hai salvato nel DB es: "../circolari/allegato.pdf"; se questo non è corretto puoi aggiungere un campo diverso per il percorso di memorizzazione nel DB.

Per quanto riguarda le dimensioni del file ti consiglio di non esagerare troppo perché altrimenti dovresti aumentare il tempo di esecuzione della pagina, poiché il tempo di default è 30 sec.

Buon lavoro per i controlli!!!

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

grazie di tutto. ho risolto anche l'if per il campo db vuoto. posto che magari a qualcuno può servire

if($row['allegato2'] != '') {
    echo '<p>'.'<a href="circlari/'.$row['allegato2'].'" title="Link 2">Link 2 >>></a>'.'</p>';
}

ora passo ai controlli, cerco di risolvere anche il fatto delle pwd per l'accesso che non l'ho ancora fatto e poi vedo come sono messo....

 O0

risposto 8 anni fa
gabar-el
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda