PDA

View Full Version : [MySQL] Voglio memorizzare 1 pathfile ma fallisco ..


Matrixbob
01-07-2005, 17:34
Il codice è 1 pezzo di JSP:

<%-- inserisco il lavoro nel db --%>
<sql:statement id="statement2" conn="conn1">
<sql:query>
INSERT INTO lavoro (lavoro_id, titolo, argomento, path_file, evento_id)
VALUES ('', '<%=request.getParameter("titolo")%>',
'<%=request.getParameter("argomento")%>', '<%=request.getParameter("path_file")%>',
'<%= pageContext.getAttribute("evento_id") %>')
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>

ed il risultato a \c:\tmp\prova.zip" mi pare 1 escape, cmq è qualcosa che non voglio:
http://img23.imageshack.us/img23/8905/prob0pe.jpg

Lo scopo è invece questo, avete consigli:
• inserire e modificare il programma dei lavori presentati alla conferenza ed ai workshop (visualizzabile da chiunque si colleghi alla conferenza); per gli utenti gia’ registrati ad un evento deve anche essere possibile scaricare il file corrispondente ai lavori a programma (per es: articoli pdf per conferenza e workshop o presentazioni ppt per tutorial).

Matrixbob
03-07-2005, 19:25
UP!

DigitalKiller
03-07-2005, 19:40
Il campo path_file di che tipo è? Prima di memorizzare la stringa, hai provato a stamparla a video? Viene visualizzata correttamente?

Matrixbob
04-07-2005, 11:56
Il campo path_file di che tipo è? Prima di memorizzare la stringa, hai provato a stamparla a video? Viene visualizzata correttamente?
... il campo è di tipo text nel form e diventa di tipo varchar(128) in MySQL.
Non ho ancora provato a stamparlo perchè ero preso dall'implementazioni delle altre query in JSP.
Oggi ritorno al PHP e dovrei implementare i controlli sui form JSP tramite JS, insomma, uno sbattimento assurdo!

Cerco di ricordarmi di stamparlo.

In questo modo:
C:/tmp/file.zip
lo memorizza ....
così:
C:\tmp\file.zip
esce invece una porcheria!! :(

http://img24.imageshack.us/img24/6538/pathfile4lq.jpg

DigitalKiller
04-07-2005, 12:14
... il campo è di tipo text nel form e diventa di tipo varchar(128) in MySQL.
Non ho ancora provato a stamparlo perchè ero preso dall'implementazioni delle altre query in JSP.
Oggi ritorno al PHP e dovrei implementare i controlli sui form JSP tramite JS, insomma, uno sbattimento assurdo!

Cerco di ricordarmi di stamparlo.

In questo modo:
C:/tmp/file.zip
lo memorizza ....
così:
C:\tmp\file.zip
esce invece una porcheria!! :(

Immaginavo che utilizzando / invece di \ non ti desse problemi...
Il percorso al file, lo inserisci tu o utilizzi il controllo file?

Matrixbob
04-07-2005, 12:19
Immaginavo che utilizzando / invece di \ non ti desse problemi...
Il percorso al file, lo inserisci tu o utilizzi il controllo file?
Lo inserisco io, dopo pranzo se mi contatti via ICQ o in PVT ti passo l'IP della mia macchina, così capisci meglio il contesto! :)
A dopo ... e W deep impact!

PS "... outilizzi il controllo file" non so nemmeno cosa intendi con questo. :D

DigitalKiller
04-07-2005, 12:23
Lo inserisco io, dopo pranzo se mi contatti via ICQ o in PVT ti passo l'IP della mia macchina, così capisci meglio il contesto! :)
A dopo ... e W deep impact!

PS "... outilizzi il controllo file" non so nemmeno cosa intendi con questo. :D

Non ho ICQ, comunque puoi contattarmi via PVT.
Il controllo file fa comparire una casella di testo con accanto il tasto Sfoglia. Invece di inserire a mano il percorso, puoi cliccare su Sfoglia e scegliere il file

Matrixbob
04-07-2005, 12:58
Non ho ICQ, comunque puoi contattarmi via PVT.
Il controllo file fa comparire una casella di testo con accanto il tasto Sfoglia.

Come lo ottengo questo risultato?
Devo mettere qualcosa nel form?!

PS:
Come faccio a ciattare con te o sapere i tuoi commenti se non ho icq o msn tuo?! :confused:

DigitalKiller
04-07-2005, 13:04
Come lo ottengo questo risultato?
Devo mettere qualcosa nel form?!

Fai così:

<form name="form1" method="post" action="">
<input name="" type="file">
</form>



Ps. ok, reinstallo msn :D

kk3z
04-07-2005, 13:09
Non ho ICQ, comunque puoi contattarmi via PVT.
Il controllo file fa comparire una casella di testo con accanto il tasto Sfoglia. Invece di inserire a mano il percorso, puoi cliccare su Sfoglia e scegliere il file

Quel tipo di form serve per uploadare un file, ti permette di scegliere la path al file (e te la fornisce) ma insieme ti carica il file sul server.

Matrix, prova ad usare il doppio backslash: c:\\tmp\\file.zip

Matrixbob
04-07-2005, 13:12
Fai così:

<form name="form1" method="post" action="">
<input name="" type="file">
</form>



Ps. ok, reinstallo msn :D
... io uso Miranda che implementa tutti i tipi di chat:
http://www.hwupgrade.it/forum/showthread.php?t=961894&highlight=miranda

Però mi devo assentare 2 orette causa commissione incombente. A dopo.

DigitalKiller
04-07-2005, 13:25
Quel tipo di form serve per uploadare un file, ti permette di scegliere la path al file (e te la fornisce) ma insieme ti carica il file sul server.

Matrix, prova ad usare il doppio backslash: c:\\tmp\\file.zip

Il file selezionato non te lo carica automaticamente sul server. Per farlo caricare, devi associare al form una pagina con le istruzioni per, appunto, leggere il file e caricarlo sul server. Se non inserisci queste istruzioni, non ottieni nulla. Al massimo puoi recuperarti il percorso del file.

kk3z
04-07-2005, 13:33
e invece no, il file ti viene uploadato in una path temporanea e poi tu da lì puoi copiarlo dove ti pare...

Cmq se sei sicuro spiegami quale funzione usi per copiare un file dall'hard disk al server

Matrixbob
04-07-2005, 13:45
confermo che usando la sintassi
C:\\tmp\\file.zip
il path viene memorizzato normalemnte ad 1 backslash.

Ma perchè serve fare l'escape del carattere \ ?!

Quale è il linguaggio che rompe le balle?! Il JSP?!

---
PS
Tornando al form-file, essendo io il gestore del sito sarebbe meglio che io metto il file che l'autore mi spedisce via email in una directory (così controllo l'assenza di malaware) e poi aggiungo il path a mano attraverso il form d'inserimento lavoro-utente.
Anche secondo voi è la soluzione migliore?!

---
PPS
Secondo me potrebbe addirittura dipendere dal browser ... ma forse come dice "kk" va a finire in un path temporaneo od una specie di cache.

kk3z
04-07-2005, 14:05
confermo che usando la sintassi
C:\\tmp\\file.zip
il path viene memorizzato normalemnte ad 1 backslash.

Ma perchè serve fare l'escape del carattere \ ?!

Quale è il linguaggio che rompe le balle?! Il JSP?!


è una caratteristica delle stringhe, uno slash solo indica un carattere speciale come \n \r \t , infatti nel database veniva inserito c: mp... perchè \t indica il tab, mentre \f (di \file) non indicava nessun carattere speciale.

La stessa cosa accade in windows quando devi inserire un &, ne devi inserire due perchè uno solo significa che sotto alla lettera che segue il carattere & deve essere disegnato un trattino (che indica lo shortcut da tastiera normalmente)

---
PS
Tornando al form-file, essendo io il gestore del sito sarebbe meglio che io metto il file che l'autore mi spedisce via email in una directory (così controllo l'assenza di malaware) e poi aggiungo il path a mano attraverso il form d'inserimento lavoro-utente.
Anche secondo voi è la soluzione migliore?

puoi uploadarlo comunque con il form e poi lo copi in qualche remota e inaccessibile cartella, e poi inserisci per esempio nel database un campo "validated" dove 0 indica che deve essere controllato e 1 che è già stato controllato, e ti crei una pagina che controlla quali upload devono ancora essere controllati.

---
PPS
Secondo me potrebbe addirittura dipendere dal browser ... ma forse come dice "kk" va a finire in un path temporaneo od una specie di cache.

al massimo può dipendere dal php, e comunque sono sicurissimo che non esiste una funzione che ti uploada il file conoscendo la path (al massimo si possono usare le funzioni ftp, se il php compilato sul tuo server lo permette...)

DigitalKiller
04-07-2005, 14:43
e invece no, il file ti viene uploadato in una path temporanea e poi tu da lì puoi copiarlo dove ti pare...

Cmq se sei sicuro spiegami quale funzione usi per copiare un file dall'hard disk al server
No, non sono sicuro di questo fatto..anche perchè non ho mai utilizzato l'upload di file. Diverso tempo fa, l'avevo implementata in asp, ma avevo lasciato perchè il progetto a cui lavoravo era cambiato e non mi serviva più

Matrixbob
11-07-2005, 17:57
Posso usare questo file upload x caricare 1 foto nello spazio in cui ho preso il dominio e memorizarne il path nel database in maniera da stamparla?! (sempre col PHP ovviamente)

Se avete pazienz mi fate vedere 1 esempio d'utilizzo?! TNX!!

cionci
12-07-2005, 08:59
Non ti serve il path completo, ma quello realtivo alla home del sito...
Se te definisci /upload come la directory di default su cui vengono memorizzate le immagini, allora rinomina le immagini che ci salvi sopra con un nome che comprende l'id che hai memorizzato nel database per quell'immagine...

Ad esempio puoi chiamare le immagini: img0000001.jpg

Salvati nel record relativo a quell'immagine il suo id (1 in questo caso), la sua estensione (gif, jpg, png), dopo componi il path per la visualizzazione dell'immagine in questo modo:

<img src="/upload/img[id].[ext]" />

Matrixbob
14-07-2005, 14:33
Non ti serve il path completo, ma quello realtivo alla home del sito...
Se te definisci /upload come la directory di default su cui vengono memorizzate le immagini, allora rinomina le immagini che ci salvi sopra con un nome che comprende l'id che hai memorizzato nel database per quell'immagine...

Ad esempio puoi chiamare le immagini: img0000001.jpg

Salvati nel record relativo a quell'immagine il suo id (1 in questo caso), la sua estensione (gif, jpg, png), dopo componi il path per la visualizzazione dell'immagine in questo modo:

<img src="/upload/img[id].[ext]" />
Come faccio il controlla sulla estensione del file che uploado?!

cionci
14-07-2005, 14:54
Ce l'hai il nome del file ? Allora che ci vuole ? Basta individuare l'ultimo "." da codice... Quello che resta dopo è l'estensione... E le ammesse sono png, bmp, gif, jpeg, jpg...

Matrixbob
14-07-2005, 15:03
Ce l'hai il nome del file ? Allora che ci vuole ? Basta individuare l'ultimo "." da codice... Quello che resta dopo è l'estensione... E le ammesse sono png, bmp, gif, jpeg, jpg...
Ci proverò allora, appoggiadomi anche a:
Caricare file (http://docs.php.net/it/features.file-upload.html)

Matrixbob
20-07-2005, 20:38
Alla fine ho srotolato fuori dalla mia mente il seguente codice.

<?php
include ("top.php");

//recupero dati dalla sessione
$utente_id = $_SESSION['utente_id'];
?>

<br />
<div align="center">
<fieldset id="nominativo">
<legend>Feedback</legend>

<?php
$url_fb = "./feedback/".$_FILES["file_name"]["name"];

//preparo le query da eseguiire prima di connettermi
$sqlquery0 = "SELECT * FROM feedback WHERE url_fb='$url_fb'";

//inclusione del file che mi connette al database
include("connetti.php");

//esecuzione query
$queryresult0 = mysql_query($sqlquery0) or die(errore());

//conto le tuple che ho ottenuto dalle SELECT
$numero0 = mysql_num_rows($queryresult0);
print('File esistente: '.$numero0.'<br/>');

if ($numero0 == 1)
{
$errore = TRUE;
print("<font color=\"red\">Il nome del file già esiste, cambialo!</font><br /><br />\n");
print("<meta http-equiv=\"Refresh\" content=\"4; url=http://$HTTP_HOST/sysconf/help.php\" />");
}

else
{
/*Srampo i dati relativi al file uplodato in cartella temporanea*/
print("<b>Uploaded File Details</b><br /><br />");
printf("File Name: %s <br />", $_FILES["file_name"]["name"]);
printf("Temporary file name: %s <br/>", $_FILES["file_name"]["tmp_name"]);
printf("Size: %s <br />", $_FILES["file_name"]["size"]);
printf("Type: %s <br />", $_FILES["file_name"]["type"]);

/*controllo la validità del tipo di file*/
if (($_FILES["file_name"]["type"] == "application/pdf") ||
($_FILES["file_name"]["type"] == "application/msword") ||
($_FILES["file_name"]["type"] == "application/x-zip-compressed") ||
($_FILES["file_name"]["type"] == "application/vnd.ms-powerpoint")||
($_FILES["file_name"]["type"] == "text/plain"))
{
if (move_uploaded_file($_FILES["file_name"]["tmp_name"], "./feedback/".$_FILES["file_name"]["name"]))
{
$errore = FALSE;
print("<b>[Caricamento file: riuscito.]</b><br />\n");
}
else {
$errore = TRUE;
print("<b>[Caricamento file: fallito.]</b><br />\n");
}
}

/*in caso di non validità lo segnalo a video*/
else {
$errore = TRUE;
print("<font color=\"red\">Tipo di file non permesso! I file permessi sono: DOC, PDF, PPT, ZIP e TXT.</font><br /><br />");
print("<meta http-equiv=\"Refresh\" content=\"4; url=http://$HTTP_HOST/sysconf/help.php\" />");
}

/*se non ci sono errori si procede ad inserire il feedback nel db*/
if ($errore == FALSE)
{
//preparo le query da eseguiire prima di connettermi
$sqlquery1 = "INSERT INTO feedback (fb_id, tipo, url_fb, lavoro_id, utente_id)
VALUES ('', '$tipo', '$url_fb', '$lavoro_id', '$utente_id')";

//esecuzione query
mysql_query($sqlquery1) or die(errore());

//inclusione del file che mi disconnette dal database
include("disconnetti.php");

print("<font color=\"green\">Feedback inserito correttamente.</font><br /><br />");
print("<meta http-equiv=\"Refresh\" content=\"4; url=http://$HTTP_HOST/sysconf/feedback.php\" />");
}

/*incaso d'errori li segnalo a video*/
else {
print("<font color=\"red\">Si è verificato un errore o la sicurezza è stata messa a rischio: contatta l'admin.</font><br /><br />");
print("<meta http-equiv=\"Refresh\" content=\"4; url=http://$HTTP_HOST/sysconf/help.php\" />");
}
}
?>

</fieldset>
</div>
<br />
<?php include ("bottom.php"); ?>

Se volete controllarlo o servirà a qualcun'altro questo mio sfrozo, ne sarò contento! :P