Difficoltà per l'invio contemporaneo di file (pdf) e foto (jpg) con Aruba

  • Creatore Discussione Creatore Discussione Davvy
  • Data di inizio Data di inizio

Davvy

Nuovo Utente
20 Ott 2008
4
0
0
Ciao a tutti!
Ho creato una pagina (riportata in basso) che consentirebbe di inviare, attraverso form distinti, informazioni generiche e file (es. pdf) e foto (es. gif o jpg).
Il risultato che ottengo è che tutto viene caricato sul DB (tutti i campi testo/combo-box immessi/selezionati), i file (es., pdf + jpg) vengono uplodati sulla cartella public del sito (Aruba come hosting), ma nel DB, in funzione di come faccio la sequenza delle operazioni (es. carico prima la foto e poi la notizia), nei relativi campi "filename" e "fotografia" compare o, per entrambi, il file della foto o, per entrambi, il file del pdf. Insomma: viene fuori una duplicazione.
Presumo che il problema sia dovuto alla funzione setFileName (val), riportata in grassetto in basso, perché andrebbe a scrivere la stessa informazione su entrambi i campi "filename" e "fotografia" del DB. Non sono riuscito a creare un'altra funzione che gestisca in modo distinto i campi di upload files!
Come posso gestirli separatamente? sto "impazzendo"... Mi dareste una mano? :) GRAZIE in anticipo.
Saluti,
Davide

Segue il codice:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="Connections/DB.asp" -->
<%
' *** Edit Operations: declare variables

Dim MM_editAction
Dim MM_abortEdit
Dim MM_editQuery
Dim MM_editCmd

Dim MM_editConnection
Dim MM_editTable
Dim MM_editRedirectUrl
Dim MM_editColumn
Dim MM_recordId

Dim MM_fieldsStr
Dim MM_columnsStr
Dim MM_fields
Dim MM_columns
Dim MM_typeArray
Dim MM_formVal
Dim MM_delim
Dim MM_altVal
Dim MM_emptyVal
Dim MM_i

MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))
If (Request.QueryString <> "") Then
MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)
End If

' boolean to abort record edit
MM_abortEdit = false

' query string to execute
MM_editQuery = ""
%>
<%
' *** Insert Record: set variables

If (CStr(Request("MM_insert")) = "notizia") Then

MM_editConnection = MM_DB_STRING
MM_editTable = "Notizie"
MM_editRedirectUrl = "menu_area_riservata.asp"
MM_fieldsStr = "categoria_news|value|titolo|value|sottotitolo|value|decrizione_breve|value|descrizione|value|fonte|value|data_pubblicazione|value|filename|value|fotografia|value"
MM_columnsStr = "categoria_news|',none,''|titolo|',none,''|sottotitolo|',none,''|descrizione_breve|',none,''|descrizione|',none,''|fonte|',none,''|data_pubblicazione|',none,NULL|file_name|',none,''|fotografia|',none,''"

' create the MM_fields and MM_columns arrays
MM_fields = Split(MM_fieldsStr, "|")
MM_columns = Split(MM_columnsStr, "|")

' set the form values
For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i)))
Next

' append the query string to the redirect URL
If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then
If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then
MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
Else
MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
End If
End If

End If
%>
<%
' *** Insert Record: construct a sql insert statement and execute it

Dim MM_tableValues
Dim MM_dbValues

If (CStr(Request("MM_insert")) <> "") Then

' create the sql insert statement
MM_tableValues = ""
MM_dbValues = ""
For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
MM_formVal = MM_fields(MM_i+1)
MM_typeArray = Split(MM_columns(MM_i+1),",")
MM_delim = MM_typeArray(0)
If (MM_delim = "none") Then MM_delim = ""
MM_altVal = MM_typeArray(1)
If (MM_altVal = "none") Then MM_altVal = ""
MM_emptyVal = MM_typeArray(2)
If (MM_emptyVal = "none") Then MM_emptyVal = ""
If (MM_formVal = "") Then
MM_formVal = MM_emptyVal
Else
If (MM_altVal <> "") Then
MM_formVal = MM_altVal
ElseIf (MM_delim = "'") Then ' escape quotes
MM_formVal = "'" & Replace(MM_formVal,"'","''") & "'"
Else
MM_formVal = MM_delim + MM_formVal + MM_delim
End If
End If
If (MM_i <> LBound(MM_fields)) Then
MM_tableValues = MM_tableValues & ","
MM_dbValues = MM_dbValues & ","
End If
MM_tableValues = MM_tableValues & MM_columns(MM_i)
MM_dbValues = MM_dbValues & MM_formVal
Next
MM_editQuery = "insert into " & MM_editTable & " (" & MM_tableValues & ") values (" & MM_dbValues & ")"

If (Not MM_abortEdit) Then
' execute the insert
Set MM_editCmd = Server.CreateObject("ADODB.Command")
MM_editCmd.ActiveConnection = MM_editConnection
MM_editCmd.CommandText = MM_editQuery
MM_editCmd.Execute
MM_editCmd.ActiveConnection.Close

If (MM_editRedirectUrl <> "") Then
Response.Redirect(MM_editRedirectUrl)
End If
End If

End If
%>
<%
Dim Inserimento_notizia
Dim Inserimento_notizia_numRows

Set Inserimento_notizia = Server.CreateObject("ADODB.Recordset")
Inserimento_notizia.ActiveConnection = MM_DB_STRING
Inserimento_notizia.Source = "SELECT * FROM Notizie"
Inserimento_notizia.CursorType = 0
Inserimento_notizia.CursorLocation = 2
Inserimento_notizia.LockType = 1
Inserimento_notizia.Open()

Inserimento_notizia_numRows = 0
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Inserimento notizia</title>
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers.document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args);
if (val) { nm=val.name; if ((val=val.value)!="") {
if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
} else if (test!='R') { num = parseFloat(val);
if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
min=test.substring(8,p); max=test.substring(p+1);
if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
} } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
} if (errors) alert('The following error(s) occurred:\n'+errors);
document.MM_returnValue = (errors == '');
}
//-->
</script>
<script language="JavaScript" type="text/JavaScript">
<!--
function setFileName (val)
{
document.notizia.filename.value=val;
document.notizia.fotografia.value=val;
}
-->

</script>

<style type="text/css">
<!--
.style1 {
font-size: 16px;
font-weight: bold;
font-style: italic;
}
.style2 {font-size: 24px; font-weight: bold; font-style: italic; }
-->
</style>
</head>

<body>
<p align="center"><img src="images/foto_small.jpg" width="150" height="151" border="0"></p>
<p align="center" class="style1"><span class="style2">AREA RISERVATA</span></p>
<p align="center" class="style1">PAGINA PER L'INSERIMENTO DI UNA NOTIZIA</p>
<form ACTION="<%=MM_editAction%>" method="POST" name="notizia" id="notizia">
<table width="555" align="center">
<tr valign="baseline">
<td align="right" nowrap class="testo">Categoria News :</td>
<td><select name="categoria_news" id="categoria_news" title="<%=(Inserimento_notizia.Fields.Item("categoria_news").Value)%>">
<option value="A">Appuntamenti</option>
<option value="L">Libri</option>
<option value="N">Notizie</option>
<option value="R">Rubriche</option>
</select></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Titolo:</td>
<td><input type="text" name="titolo" value="" size="50">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Sottotitolo:</td>
<td><input type="text" name="sottotitolo" value="" size="50">
</td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="testo">Decrizione breve:</td>
<td valign="baseline"><textarea name="decrizione_breve" cols="50" rows="4"></textarea>
</td>
</tr>
<tr valign="baseline">
<td align="right" valign="top" nowrap class="testo">Decrizione completa:</td>
<td><textarea name="descrizione" cols="50" rows="10" id="descrizione"></textarea></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Fonte:</td>
<td><input type="text" name="fonte" value="" size="32"></td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="testo">Data pubblicazione (gg/mm/aaaa):</td>
<td><input type="text" name="data_pubblicazione" value="<%=date()%>" size="32">
</td>
</tr>
</table>
<p>
<input type="hidden" name="MM_insert" value="notizia">
<input name="filename" type="hidden" id="filename" value=" ">
<input name="fotografia" type="hidden" id="fotografia" value=" ">
</p>
</form>
<form action="../upload/newsOutputFile_img.asp" method="post" enctype="multipart/form-data" name="uploadForm" target="b" class="testo" id="uploadForm">
<div align="center">Seleziona l'immagine da inserire a corredo della news:
<input name="foto" type="file" id="foto" size="40">
<input name="Submit" type="submit" onClick="MM_openBrWindow('','b','resizable=yes,width=200,height=200')" value="Invia">
</div>
</form>
<form action="../upload/newsOutputFile.asp" method="post" enctype="multipart/form-data" name="uploadForm2" target="b" class="testo" id="uploadForm2">
<div align="center">Seleziona l'articolo da inserire a corredo della news:
<input name="blob" type="file" size="40">
<input name="Submit" type="submit" onClick="MM_openBrWindow('','b','resizable=yes,width=200,height=200')" value="Invia">
</div>
</form>
<p align="center">
<input name="Button" type="button" onClick="MM_validateForm('titolo','','R','sottotitolo','','R','data_pubblicazione','','R','decrizione_breve','','R');if (document.MM_returnValue) document.notizia.submit();return document.MM_returnValue" value="Inserisci Notizia">
</p>
<p align="center"><a href="menu_area_riservata.asp">Ritorna al men&ugrave; dell'Area Riservata</a></p>
</body>
</html>
<%
Inserimento_notizia.Close()
Set Inserimento_notizia = Nothing
%>
 
Ciao lukeonweb,
innanzi tutto grazie per l'interessamento!
spiego meglio quanto ho scritto. Sostanzialmente, dopo che si effettua l'upload dei file (che possono essere in PDF per l'articolo e in JPG per la foto), nel DB, i campi "filename" e "fotografia" vengono valorizzati con lo stesso contenuto che può essere o il nome del file PDF o il nome del file JPG. Tutto ciò, ovviamente, è indesiderato. Il mio obiettivo è far sì che il campo "filename" contenga il nome del file PDF, mentre il campo "fotografia" contenga il nome del file JPG.

Spero di essere stato adesso esaustivo.
Saluti,
Davide
 
Chiarissimo!

Confesso di non aver letto un kilometro di codice, ma vedo che hai evidenziato:

<script language="JavaScript" type="text/JavaScript">
<!--
function setFileName (val)
{
document.notizia.filename.value=val;
document.notizia.fotografia.value=val;
}-->
</script>

Ad occhio mi pare normale che dia errore nel senso che intendi tu.

Fai cosi:

<script language="JavaScript" type="text/JavaScript">
<!--
function setFileName (val_pdf, val_jpg)
{
document.notizia.filename.value=val_pdf;
document.notizia.fotografia.value=val_jpg;
}-->
</script>

Fammi sapere.
 
Ciao!
ho provato, ma non va!
Questa volta, come risultato si ha che:
a) uno dei due campi nel DB (es. "filename") viene valorizzato con il nome del file, ma non sempre con quello corretto
b) l'altro dei due campi (es. "fotografia") viene valorizzato con undefined

In altri termini, in funzione della sequenza con cui si caricano i file (es., prima il PDF e poi il JPG) cambia il risultato: il campo "filename" contiene il nome file del JPG, mentre il campo "fotografia" contiene il valore undefined... e viceversa.

Boh!
 
Ho risolto

Grazie!
il problema risiedeva nel file newsOutputFile_img.asp in cui non era impostato correttamente un parametro.
Sostanzialmente, è stato necessario creare una nuova funzione (simile a setFilename, chiamata setFotoname e impostata anche nella suddetta pagina asp).

Ciao
 

Discussioni simili