Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 50
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764

    Problema con creazione catalogo prodotti online

    Sto lavorando alla creazione di un catalogo online per un sito.

    Il sito sarà in due lingue (italiano ed inglese) e presenterà prodotti di tre nazioni, divisi in categorie:

    Nazione: Italia
    Categorie di prodotto: a, b, c, d

    Nazione: Francia
    Categorie di prodotto: e

    Nazione: Germania
    Categorie di prodotto: f

    Ho strutturato così il database in Access:
    1. Tabella "nazioni", contiene 3 campi: IDNazione, ItNazione, EnNazione (dove ItNazione ed EnNazione sono i nomi delle nazioni in italiano ed in inglese).
    Questa prima tabella contiene 3 record (per esempio): Italia, Francia, Germania

    2. Tabella "categorie", contiene 4 campi: IDCategoria, IDNazione, ItCategoria, ENCategoria (dove IDNazione è preso dalla tabella "nazioni" e ItCategoria ed EnCategoria sono i nomi delle categorie in italiano ed in inglese).
    Questa tabella ha 6 record: 4 record della prima nazione), 1 record della seconda nazione, 1 record della terza nazione.

    3. Tabella "prodotti", contiene 6 campi: IDProdotto, IDCategoria, ItNome, EnNome, ItDescrizione, EnDescrizione (dove IDCategoria è preso dalla tabella "categorie", ItNome ed EnNome sono i nomi dei prodotti nelle due lingue e ItDescrizione ed EnDescrizione sono le descrizioni dei prodotti nelle due lingue).

    In Access ho creato una relazione one-to-many fra il campo IDNazione della tabella "nazione" ed il campo IDNazione della tabella "categorie". Ho creato poi un'altra relazione dello stesso tipo fra il campo IDCategoria della tabella "categorie" ed il campo IDCategoria della tabella "prodotti".


    Sto creando delle pagine ASP che mi servono, innanzitutto per popolare il database.
    Vorrei fare in modo che l'utente, in fase di popolamento, si trovi di fronte, innanzitutto alla scelta della nazione: tramite una pagina "scegli_nazione.asp", dovrà, da un elenco a discesa, scegliere a quale nazione apparterrà il prodotto che sta aggiungendo al database.

    Ho scritto questa pagina (scegli_nazione.asp ):
    codice:
    <html>
    <head>
    <title>Aggiungi prodotti</title>
    <script type="text/JavaScript">
    <!--
    
    function goPage (newURL) {
       	if (newURL != "") {
       	if (newURL == "-" ) {
    			resetMenu();			
    		} else {  	
       			document.location.href = newURL;
       		}
       	}
    }
    //-->
    </script>
    </head>
    
    <body>
    
    <form method="post" action="">
    <table width="600" border="1" align="center">
    	<tr>
    		<td>Scegli la nazione:</td>
    		<td>
    		<select onChange="goPage(this.options[this.selectedIndex].value)" name="nazione" id="nazione">
    		<option value="#" selected="selected">-------------------</option>
    		<%
    		
    		sqlString = "SELECT * FROM nazioni"
    		Set rs = Conn.Execute(sqlString)
    
    		do while not rs.eof
    		nazione=rs("itNazione")
    		valore=rs("idNazione")
    		response.write("<option value=scegli_categorie.asp?nazione=" & valore &">" & nazione &"</option>") 
    		rs.movenext
    		loop %>
    		</select>
    		</td>
    	</tr>
    </table>
    <input name="AggiungiProdotto" value="1" type="hidden">
    </form>
    </body>
    </html>
    La combobox (come evidenziato in rosso), viene popolata dai record della tabella "nazione".

    Una volta scelta la nazione, il javascript permette il passaggio alla pagina successiva, che chiede la scelta di una categoria (scegli_categoria.asp ):
    codice:
    <html>
    <head>
    <title>Aggiungi prodotti</title>
    <script type="text/JavaScript">
    <!--
    
    function goPage (newURL) {
       	if (newURL != "") {
       	if (newURL == "-" ) {
    			resetMenu();			
    		} else {  	
       			document.location.href = newURL;
       		}
       	}
    }
    //-->
    </script>
    </head>
    
    <body>
    <table width="600" cellpadding="0" cellspacing="0" border="1" align="center">
    	<tr>
    		<td colspan="2">
    <%
    scelta = Request.QueryString("nazione") 
    Set RS = Server.CreateObject("ADODB.Recordset")
    RS.ActiveConnection = Conn
    RS.Open "SELECT itnazione FROM nazioni WHERE idNazione="& scelta &""
    Response.Write("")
    
    Do WHILE NOT RS.EOF
    	Response.Write("Nazione: ")
    	Response.Write RS("itnazione")
    	Response.Write("
    </td></tr><tr><td>")
    RS.MoveNext
    LOOP
    
    RS.Close
    Set RS = Nothing
    
    %>
    </td>
    </tr>
    
    	<tr>
    		<td>Scegli la categoria:</td>
    		<td>
    		<form method="post" action="">
    		<select onChange="goPage(this.options[this.selectedIndex].value)" name="categoria" id="categoria">
    		<option value="#" selected="selected">-------------------</option>
    		<%
    		
    		sqlString = "SELECT * FROM categorie WHERE idNazione="& scelta &""
    		Set rs = Conn.Execute(sqlString)
    
    		do while not rs.eof
    		categoria=rs("itCategoria")
    		valore=rs("idCategoria")
    		response.write("<option value=aggiungi_prodotti.asp?nazione=" & scelta &"&categoria=" & valore &">" & categoria &"</option>")
    		rs.movenext
    		loop 
    		%>
    		</select>
    		<input name="AggiungiProdotto" value="1" type="hidden">
    </form>
    		</td>
    	</tr>
    </table>
    
    </body>
    </html>
    In questa pagina, con Request.QueryString("nazione") ho recuperato la scelta che l'utente ha fatto nella pagina scegli_nazione.asp

    DOMANDA: E' corretto fare così?

    Vado avanti...

    Una volta scelta la categoria, si passa alla pagina "aggiungi_prodotti.asp" dove, a fronte di una scelta di una nazione e di una categoria, io vorrei che venisse aggiunto un record alla tabella prodotti, dove nel campo IDCategoria ci fosse la scelta fatta dall'utente nella pagina "scegli_categoria.asp".

    Metto il codice di "aggiungi_prodotto.asp "

    codice:
    <html>
    <head>
    <title>Aggiungi prodotti</title>
    </head>
    
    <body>
    <%
    scelta = Request.QueryString("nazione")
    Set RS = Server.CreateObject("ADODB.Recordset")
    RS.ActiveConnection = Conn
    RS.Open "SELECT itnazione FROM nazioni WHERE idNazione="& scelta &""
    Response.Write("")
    
    Do WHILE NOT RS.EOF
    	Response.Write("Nazione: ")
    	Response.Write RS("itnazione")
    	Response.Write("
    </td></tr><tr><td>")
    RS.MoveNext
    LOOP
    
    RS.Close
    Set RS = Nothing
    
    
    %>
    
    
    <%
    scelta1 = Request.QueryString("categoria")
    	Set RS = Server.CreateObject("ADODB.Recordset")
    	RS.ActiveConnection = Conn
    	RS.Open "SELECT itcategoria FROM categorie WHERE idCategoria="& scelta1 &""
    	Response.Write("")
    	
    	Do WHILE NOT RS.EOF
    		Response.Write("Categoria: ")
    		Response.Write RS("itcategoria")
    		Response.Write("
    </td></tr><tr><td>")
    	RS.MoveNext
    	LOOP
    	
    %>
    <form method="post" action="gestione_prodotti.asp">
      <table width="100%" border="1" align="center">
        <tr>
          <td colspan="4"><h2>AGGIUNGI PRODOTTI</h2></td>
        </tr>
            <tr>
          <td colspan="2"><h3>Italiano</h3></td>
          <td colspan="2"><h3>Inglese</h3></td>
        </tr>
        <tr>
          <td width="25%">Nome prodotto:</td>
          <td width="25%"><input name="itnome" size="50" maxlength="50"></td>
          <td width="25%">Nome prodotto:</td>
          <td width="25%"><input name="ennome" size="50" maxlength="50"></td>
        </tr>
        <tr>
          <td width="25%">Descrizione:</td>
          <td width="25%"><textarea name="itdescrizione" rows="4" cols="44"></textarea></td>
          <td width="25%">Descrizione:</td>
          <td width="25%"><textarea name="endescrizione" rows="4" cols="44"></textarea></td>
        </tr>
        <tr>
          <td colspan="4" align="center"><input name="submit" type="submit" value="Aggiungi prodotto">
    <input name="AggiungiProdotto" value="1" type="hidden"></td>
        </tr>
      </table>
    </form>
    <%
    
    RS.Close
    Set RS = Nothing
    	
    %>
    </body>
    </html>
    Una volta compilato il form, si passa alla pagina "gestione_prodotti.asp ".
    codice:
    <%
    
    function CorreggiVirgolette (stringa)
    	CorreggiVirgolette = Replace (stringa, "'", "''")
    End function
    
    AggiungiProdotto = TRIM (Request("AggiungiProdotto"))
    
    itnome = TRIM (Request("itnome"))
    ennome = TRIM (Request("ennome"))
    itdescrizione = TRIM (Request("itdescrizione"))
    endescrizione = TRIM (Request("endescrizione"))
    
    	
    
    %>
    <html>
    <head>
    <title>Gestione prodotti</title>
    </head>
    
    <body>
    <%
    
    sqlString = "UPDATE prodotti SET " &_
    	"itnome=' " & CorreggiVirgolette(itnome) & "'," &_
    	"ennome=' " & CorreggiVirgolette(ennome) & "'," &_
    	"itdescrizione=' " & CorreggiVirgolette(itdescrizione) & "'," &_
    	"endescrizione=' " & CorreggiVirgolette(endescrizione) & "',"
    
    Conn.Execute sqlString	
    	
    %>
    <table width="600" cellpadding="4" cellspacing="0" align="center">
    	<tr>
    		<td>
    		<%=itnome%> è stato aggiunto nel database.
    		</td>
    	</tr>	
    </table>
    
    <%
    %>
    
    <table width="600" border="1" cellpadding="4" cellspacing="0" align="center">
    	<tr>
    		<td colspan="2">
    		<h2>GESTIONE PRODOTTI</h2>
    		</td>
    	</tr>
    	<tr>
    		<td>
    		<table border="1" width="400" cellpadding="3" cellspacing="0">
    		<%
    		sqlString = "SELECT idprodotto, itnome FROM prodotti " &_
    		"ORDER BY itnome"
    		SET RS = Conn.Execute(sqlString)
    		WHILE NOT RS.EOF
    		%>
    			<tr>
    				<td><%=RS("itnome")%></td>
    			</tr>
    		<%
    		RS.MoveNext
    		WEND
    		%>
    		</table>	
    		</td>
    	</tr>	
    </table>
    <%
    Conn.Close
    Response.buffer=True
    %>
    </body>
    </html>
    E a questo punto mi sono perso...
    All'inizio, dopo l'invio del modulo della pagina "aggiungi_prodotto.asp", mi appariva la pagina "gestione_prodotti.asp" e apparentemente sembrava essere stato aggiunto il nuovo record, invece il database non conteneva i nuovi dati.
    Una successiva modifica, mi aveva portato ad aggiornare il database... solo che i dati che inserivo nel form di "aggiungi_prodotto.asp", apparivano in tutti i record del database (non veniva solo aggiunto un record, ma tutti quelli già esistenti, venivano modificati con i nuovi dati).
    L'ultima modifica (che è quella che ho riportato) mi dà questo errore: Syntax error in UPDATE statement e fa riferimento alla riga in rosso del file "gestione_prodotti.asp":
    codice:
    sqlString = "UPDATE prodotti SET " &_
    	"itnome=' " & CorreggiVirgolette(itnome) & "'," &_
    	"ennome=' " & CorreggiVirgolette(ennome) & "'," &_
    	"itdescrizione=' " & CorreggiVirgolette(itdescrizione) & "'," &_
    	"endescrizione=' " & CorreggiVirgolette(endescrizione) & "',"
    
    Conn.Execute sqlString
    Qualche suggerimento?

    Grazie!

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Non capisco come possa funzionarti questa query senza darti errore

    sqlString = "UPDATE prodotti SET " &_
    "itnome=' " & CorreggiVirgolette(itnome) & "'," &_
    "ennome=' " & CorreggiVirgolette(ennome) & "'," &_
    "itdescrizione=' " & CorreggiVirgolette(itdescrizione) & "'," &_
    "endescrizione=' " & CorreggiVirgolette(endescrizione) & "',"

    Conn.Execute sqlString


    1) C'è una virgola alla fine
    2) Manca la WHERE, ragione per cui AGGIORNA TUTTI i record.

    Roby

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Che pirla!!!

    Ho corretto così la pagina "gestione_prodotti.asp"

    Ho aggiunto all'inizio la riga in rosso:
    codice:
    itnome = TRIM (Request("itnome"))
    ennome = TRIM (Request("ennome"))
    itdescrizione = TRIM (Request("itdescrizione"))
    endescrizione = TRIM (Request("endescrizione"))
    IDprodotto = Request("IDProdotto")
    E la query adesso è così:

    codice:
    <%
    
    sqlString = "UPDATE prodotti SET " &_
    	"itnome=' " & CorreggiVirgolette(itnome) & "'," &_
    	"ennome=' " & CorreggiVirgolette(ennome) & "'," &_
    	"itdescrizione=' " & CorreggiVirgolette(itdescrizione) & "'," &_
    	"endescrizione=' " & CorreggiVirgolette(endescrizione) & "' WHERE " &_
    	"IDProdotto=" & IDProdotto
    	
    Conn.Execute sqlString	
    	
    %>
    A questo punto non mi dà più messaggio di errore (!!!), ma non mi aggiunge niente al database!

    Forse il problema è che non c'è una query tipo: INSERT INTO prodotti, ecc.?

    Faccio un passo indietro... vorrei che l'inserimento prodotti avvenisse così: scelgo da un elenco a discesa (popolato dalla tabella nazioni del database) la nazione, poi scelgo da un elenco a discesa (popolato dalla tabella categorie del database) la categoria e a questo punto compilo il form, inserendo nome del prodotto e descrizione.
    Vorrei che queste informazioni (la nazione scelta, categoria scelta, nome prodotto con relativa descrizione), diventassero un nuovo record della tabella prodotti. Come faccio?

  4. #4
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    La update aggiorna, la INSERT inserisce.

    Roby

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Ehm... immaginavo

    Il mio problema a questo punto è scrivere una insert corretta.

    Questa (forse) non va bene:
    codice:
    <%
    
    sqlString = "INSERT INTO prodotti " &_
    	"(idcategoria, itnome, ennome, itdescrizione, endescrizione) VALUES (" &_
    	" '" &IDcategoria &"', "&_
    	" '" & itnome &"', " &_
    	" '" & ennome &"', " &_
    	" '" & itdescrizione & "', "&_
    	" '" & endescrizione & "')"
    	
    Conn.Execute sqlString	
    	
    %>
    Il browser mi risponde: "You cannot add or change a record because a related record is required in table 'categorie'."

    Ma se tolgo la relazione fra la colonna IDCategoria della tabella "prodotti" e la colonna "IDCategoria" della tabella "categorie", mi aggiunge il nuovo record alla tabella prodotti, ma non mi scrive nella colonna "IDCategoria" il numero della categoria a cui il prodotto fa riferimento.

    Quindi???

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Dimenticavo di scrivere, che in "gestione_prodotti.asp", ho aggiunto la riga in rosso:

    codice:
    itnome = TRIM (Request("itnome"))
    ennome = TRIM (Request("ennome"))
    itdescrizione = TRIM (Request("itdescrizione"))
    endescrizione = TRIM (Request("endescrizione"))
    IDprodotto = Request("IDProdotto")
    IdCategoria = Request.QueryString("categoria")
    Con questo vorrei andare a prendermi la scelta sulla categoria che è stata fatta nella pagina "scegli_categorie.asp".

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Niente da fare: riesco ad aggiungere un nuovo record nella tabella prodotti, ma non riesco in nessun modo a far scrivere nella colonna IDCategoria della tabella "prodotti", il valore scelto nella pagina scegli_categoria.asp!!!

  8. #8
    Utente di HTML.it L'avatar di Sandra
    Registrato dal
    May 2005
    Messaggi
    129

    db

    Il database non dovrebbe essere strutturato in questo modo?


    nazioni
    IDNazione - contatore
    Nazione - testo

    categorie
    IDCategoria - contatore
    IDNazione - numerico
    Categoria - testo

    prodotti
    IDProdotto -contatore
    IDCategoria - numerico
    Nome_Prodotto - testo
    Descrizione - memo

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    764
    Il database è strutturato così.

  10. #10
    Utente di HTML.it L'avatar di Sandra
    Registrato dal
    May 2005
    Messaggi
    129

    db

    Leggendo il primo post avevo capito diversamente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.