- Home
- Categorie
- Coding e Sistemistica
- PHP
- Upload File
-
Upload File
Ciao a tutti....nella pagina ke mi permette di creare una nuova news (nuovanews.php) devo aggiungere nel form un campo per l'upload dei file, che penso sia il tipo <input type="file"....>poi gli devo dire che si deve salvare in una determinata cartella e credo che nel database devo salvare il collegamento in modo che quando leggo quella mi dice chè è presente anche un file...mi dite come si va?
Grazie!
-
Ciao talkoman,
devi fare un po' di prove... la truttura base è del tipo:per la pagina di invio:
<form method=post enctype="multipart/form-data" action="dove_vuoi_tu.php">
<input type="file" name="uploadfile">
<input type="submit" value="invia">
</form>per la pagina di ricezione (dove_vuoi_tu.php nell'esempio):
if(isset($_FILES['uploadfile'])) {
$file = $_FILES['uploadfile'];
if($file['error'] == UPLOAD_ERR_OK and is_uploaded_file($file['tmp_name'])) {
$imm="nuovo_nome_immagine.jpg";
$query_db = "INSERT INTO tabella VALUES ('', '$imm')";
$result_db = mysql_db_query($dbname,$querydb,$connessione) or die("Errore: " . mysql_error() . " - " . mysql_errno());
//move_uploaded_file($file['tmp_name'],$imm);
copy($file['tmp_name'],$imm);
}
}Se possibile (cioè se funziona :D) usa move_uploaded_file al posto di copy. Ovviamente non ti limitare a fare copia/incolla perché non funzionerebbe: cerca piuttosto di capirne la logica e di implementarlo nel tuo script.
Facci sapere se risolvi e come risovi!
-
questo è il codice che ho inserito....
[PHP]<p style="margin-top:5; margin-bottom:0">Foto:<input type="file" name="uploadfile"></p>
<p style="margin-top:5; margin-bottom:0"><input type="submit" value="Pubblica" /><input name="Ripristina" type="reset" value="Reset" /></p>
</form>
<p style="padding-left:20; margin-top:0; margin-bottom:0"><a href="index.php">Torna alla Admin Home</a> | <a href="atleti.php">Torna all'elenco Atleti</a></p>
<?php
if(isset($_POST['nome'])):
$data= mktime("0", "0", "0", $_POST['mese'], $_POST['giorno'], $_POST['anno']);
$file = $_FILES['uploadfile'];
$nome=$_POST['nome'];
$cognome=$_POST['cognome'];
$sesso=$_POST['sesso'];
$categoria=$_POST['categoria'];
if($file['error'] == UPLOAD_ERR_OK and is_uploaded_file($file['tmp_name'])) {
$imm="../images/atleti/nuovo_nome_immagine.jpg";
$sql="INSERT INTO atleti SET
nome='$nome',
cognome='$cognome',
data='$data',
sesso='$sesso',
categoria='$categoria',
img='$imm'";
//move_uploaded_file($file['tmp_name'],$imm);
copy($file['tmp_name'],$imm);
}
if (@mysql_query($sql))
echo '<p>Atleta inserito correttamente</p>';
else{
exit('<p>Errore durante l'iserimento dell'atleta: ' .
mysql_error() . '</p>');
}
$nid=mysql_insert_id();
?>[/PHP]questo l'errore che mi da:
**Warning**: copy(../images/atleti/nuovo_nome_immagine.jpg) [[function.copy](http://localhost/tapsos/admin/function.copy)]: failed to open stream: No such file or directory in **C:\Programmi\EasyPHP 2.0b1\www\tapsos\admin\nuovoatleta.php** on line **93**
-
Sei sicuro che per lo script, l'url dell'immagine passato alla funzione copy sia quello giusto?
-
penso...me l'avete detto voi....ma tu ke istruzione intendi???
-
ok funziona...ma io come faccio a lasciare all'immagine il nome che aveva?
e come faccio a controllare se l'immagine inserita non supera determinate dimensioni di altezza e larghezza??
Grazie
Ciau
-
Lo puoi fare cambiando il codice in questo modo:
[php]
$imm="../images/atleti/" . $nome . "_" . $cognome . ".jpg";
$sql="INSERT INTO atleti SET
nome='$nome',
cognome='$cognome',
data='$data',
sesso='$sesso',
categoria='$categoria',
img='$imm'";
[/php]Ciao!
-
come faccio a lasciare all'immagine il nome che aveva?
e come faccio a controllare se l'immagine inserita non supera determinate dimensioni di altezza e larghezza??
-
Per mantenere il nome del file originale dovresti utilizzare questo:
[php]
$imm = "../images/atleti/" . $file['name'];
[/php]Per controllare informazioni sull'immagine, come altezza e larghezza devi usare:[php]
list($width, $height, $type, $attr) = getimagesize("immagine.jpg");
echo "Larghezza immagine " . $width;
echo "<BR>";
echo "Altezza immagine " . $height;
echo "<BR>";
echo "Formato immagine " . $type;
echo "<BR>";
echo "Attributi " . $attr;
[/php]Ciao!
-
@Sups said:
[php]
list($width, $height, $type, $attr) = getimagesize("immagine.jpg");[/php]ma nome immagine lo posso anche sostituire con la variabile che contiene quel percorso?
-
@talkoman said:
ma nome immagine lo posso anche sostituire con la variabile che contiene quel percorso?
Certo, puoi passare anche una variabile come argomento alla funzione, cosa importante è che deve contenere un percorso fisico dell'immagine.
Es. ../image/acaso.jpg
Ciao!
-
guarda ho fatto così:
[PHP] <?php
if(isset($_POST['nome'])):
$data= mktime("0", "0", "0", $_POST['mese'], $_POST['giorno'], $_POST['anno']);
$file = $_FILES['uploadfile'];
$nome=$_POST['nome'];
$cognome=$_POST['cognome'];
$sesso=$_POST['sesso'];
$categoria=$POST['categoria'];
if($file['error'] == UPLOAD_ERR_OK and is_uploaded_file($file['tmp_name'])) {
$imm="../images/atleti/" . $nome . "" . $cognome . ".jpg";
$size= getimagesize($file);
list($width, $height, $type, $attr) = $size;
if($width>120 && $height>160)
exit('<p>Errore durante l'iserimento della foto. Dimensioni non corrette!</p>');
else{
$sql="INSERT INTO atleti SET
nome='$nome',
cognome='$cognome',
data='$data',
sesso='$sesso',
categoria='$categoria',
img='$imm'";
//move_uploaded_file($file['tmp_name'],$imm);
copy($file['tmp_name'],$imm);
}
if (@mysql_query($sql))
echo '<p>Atleta inserito correttamente</p>';
else{
exit('<p>Errore durante l'iserimento dell'atleta: ' .
mysql_error() . '</p>');
}
$nid=mysql_insert_id(); }
?>[/PHP]Ma mi da questo errore:
Notice: Array to string conversion in C:\Programmi\EasyPHP 2.0b1\www\tapsos\admin\nuovoatleta.php on line 85
Warning: getimagesize(Array) [function.getimagesize]: failed to open stream: No such file or directory in C:\Programmi\EasyPHP 2.0b1\www\tapsos\admin\nuovoatleta.php on line 85
Atleta inserito correttamente
Come mai?
-
nada?
-
Ti sta' dicendo che $file e' un array, mentre la funzione getimagesize vuole come argomento il nome di un file.
Prova a scrivere invece[php]$size= getimagesize($file['tmp_name']);[/php]
-
ok grazie...ora funziona...come faccio a controllare invece se l'estensione è quella che voglio io?
-
Per l'estensione di un file c'è la funzione PATHINFO unita con EXTENSION.
[php]
$path_parts = pathinfo('immagine.jpg');
echo $path_parts['extension']; //echo => jpg
[/php]
-
ok grazie mille.....!!!
mi auguro di non dovervi disturbare +.....
-
arieccomi...................
ora ho un altro tipo di problema.
Praticamente io carico un file con una form.
nel database si salva il path e fino a qui tutto va bene...
questo file è come un'allegato.
Quindi quando leggo la news poi a fondo pagina metto:
Allegato: ??
come faccio a far spuntare solo il nome del file e non tutto il percorso?
poi, come faccio ad aprire il file cliccandoci??
Grazie!
Ciau!
-
@talkoman said:
Quindi quando leggo la news poi a fondo pagina metto:
Allegato: ??
come faccio a far spuntare solo il nome del file e non tutto il percorso?
poi, come faccio ad aprire il file cliccandoci??Per fa spuntare solo il nome del file, dato che sai quanti "/" ci sono nel percorso dove li salvi puoi fare, immaginando che il path sia
[php]
$file="../percorso/immagine.jpg";
list ($prt1, $prt2, $prt3)=explode("/", $file);
list($nome,$estensione)=explode(".", $prt3);
[/php]
@talkoman said:poi, come faccio ad aprire il file cliccandoci??
basta che lo inserisci in un href:
[php]
echo "<a href='".$file."' target=.....>".$prt3."</a>";
[/php]
-
ok....grazie Samyorn, funziona perfettamente...
ora xò ora ho un altro problema....io salvo questo file dalla cartella /ammin/
quindi quando cerca ../file/$nome quando sono dentro /ammin/ lo trova perfettamente.....ma se salgo di directory mi sballa...come faccio??