Visualizzazione risultati 1 fino 7 di 7
Like Tree1Likes
  • 1 Post By dreadnaut

Discussione: database di un negozio

  1. #1
    amaggi non è connesso Utente Blog
    Data registrazione
    21-09-2021
    Messaggi
    4

    Predefinito database di un negozio

    ciao a tutti. avrei bisogno di una mano per poter capire e scrivere un codice in php per collegare, modificare e visualizzare le tabelle con tutte le informazioni che ho gia inserito per fare delle prove ma che in realtà potranno essere inserite e ricercate dall'utente.

    In breve (punto di vista dell'utente/negozio)quando hai bisogno di ordinare un articolo, scegli un articolo e la quantità che vuoi acquistare; il sistema dovrebbe trovare quali fornitori vendono quell'articolo (controlla se è disponibile una quantità sufficiente in magazzino) e calcola l'importo totale dell'ordine di acquisto applicando gli sconti (se disponibili). L'elenco dei risultati dovrebbe suggerire il miglior fornitore evidenziando quello più economico. Anche visualizzare i giorni minimi che ogni fornitore ha bisogno di spedire il vostro ordine; in questo modo è possibile scegliere che un fornitore più veloce è ancora meglio di uno più economico.

    lascio il codice sql e che ho aggiunto nel myphpadmin (tranne la query di selezione per il fornitore più economico)
    grazie in anticipo per qualsiasi aiuto/consiglio :)<3

    Codice:
    -- Tabella per gli articoli
    CREATE TABLE Articoli (
        ID INT PRIMARY KEY,
        Nome VARCHAR(100),
        PrezzoVendita DECIMAL(10, 2)
    );
    
    -- Tabella per i fornitori
    CREATE TABLE Fornitori (
        ID INT PRIMARY KEY,
        Nome VARCHAR(100),
        GiorniSpedizione INT
    );
    
    -- Tabella per gli sconti dei fornitori
    CREATE TABLE ScontiFornitori (
        ID INT PRIMARY KEY,
        FornitoreID INT,
        ImportoMinimo DECIMAL(10, 2),
        PercentualeSconto DECIMAL(5, 2),
        DataInizio DATE,
        DataFine DATE,
        FOREIGN KEY (FornitoreID) REFERENCES Fornitori(ID)
    );
    
    -- Tabella per il magazzino
    CREATE TABLE Magazzino (
        ID INT PRIMARY KEY,
        ArticoloID INT,
        FornitoreID INT,
        Quantita INT,
        FOREIGN KEY (ArticoloID) REFERENCES Articoli(ID),
        FOREIGN KEY (FornitoreID) REFERENCES Fornitori(ID)
    );
    
    -- Tabella per gli ordini
    CREATE TABLE Ordini (
        ID INT PRIMARY KEY,
        ArticoloID INT,
        FornitoreID INT,
        Quantita INT,
        ImportoTotale DECIMAL(10, 2),
        DataOrdine DATE,
        FOREIGN KEY (ArticoloID) REFERENCES Articoli(ID),
        FOREIGN KEY (FornitoreID) REFERENCES Fornitori(ID)
    );
    
    -- Inserimento dei dati relativi agli articoli, magazzino, fornitori e agli sconti dei fornitori
    INSERT INTO Articoli (ID, Nome, PrezzoVendita)
    VALUES (1, 'Articolo 1', 10.00),
           (2, 'Articolo 2', 15.00),
           (3, 'Articolo 3', 20.00);
           
    INSERT INTO Fornitori (ID, Nome, GiorniSpedizione)
    VALUES (1, 'Fornitore A', 3),
           (2, 'Fornitore B', 2),
           (3, 'Fornitore C', 5);
    
    INSERT INTO ScontiFornitori (ID, FornitoreID, ImportoMinimo, PercentualeSconto, DataInizio, DataFine)
    VALUES (1, 1, 50.00, 0.1, '2023-01-01', '2023-12-31'),
           (2, 2, 100.00, 0.15, '2023-01-01', '2023-12-31'),
           (3, 2, 200.00, 0.2, '2023-01-01', '2023-12-31');
    
    INSERT INTO Magazzino (ID, ArticoloID, FornitoreID, Quantita)
    VALUES (1, 1, 1, 100),
           (2, 1, 2, 50),
           (3, 2, 1, 80),
           (4, 2, 3, 100),
           (5, 3, 2, 70),
           (6, 3, 3, 120);
    
    -- Esempio di query per trovare il fornitore più economico per un determinato articolo e quantità, considerando gli sconti applicabili
    SELECT A.ID AS ArticoloID, A.Nome AS NomeArticolo, F.ID AS FornitoreID, F.Nome AS NomeFornitore, 
           (A.PrezzoVendita * O.Quantita * (1 - COALESCE(S.PercentualeSconto, 0))) AS ImportoTotale,
           F.GiorniSpedizione
    FROM Articoli A
    JOIN Magazzino M ON A.ID = M.ArticoloID
    JOIN Fornitori F ON M.FornitoreID = F.ID
    LEFT JOIN ScontiFornitori S ON F.ID = S.FornitoreID
    LEFT JOIN Ordini O ON O.ArticoloID = A.ID AND O.FornitoreID = F.ID
    WHERE A.ID = 1 -- ID dell'articolo desiderato
      AND M.Quantita >= 10 -- Quantità desiderata
    ORDER BY ImportoTotale ASC, F.GiorniSpedizione ASC;

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Ah, buone vecchie esercitazioni! Non mi mancano, devo dire

    Suggerirei di cominciare, e tornare quando hai domande più precise. "Come si fa?" richiederebbe pagine di discussione, ed alla fine toglierebbe senso all'esercizio.

    Se davvero non sai dove cominciare, il problema è diverso e si risolve chiedendo più dettagli a chi ha assegnato l'esercitazione - di solito aiuta a chiarire le idee.
    laravista likes this.

  3. #3
    amaggi non è connesso Utente Blog
    Data registrazione
    21-09-2021
    Messaggi
    4

    Predefinito

    Non è proprio un esercizio, l'ho messa molto in generale la spiegazione inerente a questo negozio perche servirebbe ad una mia amica e oltre all'sql avrei bisogno di sapere come si possono modificare gli elementi presenti nelle tabelle. Mi sono accorta che non ho inserito il codice php che già ho fatto e che visualizza solo gli elementi inseriti a mano, però si mi rendo conto che richiede tanto tempo da lavorarci su.
    L'unica cosa che mi servirebbe, come ho già detto, in base al database che ho scritto è come poter modificare in php gli elementi presenti.

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Citazione Originalmente inviato da amaggi Visualizza messaggio
    Non è proprio un esercizio [...]
    Whops, scusa se ho supposto - avevo interpretato l'esempio con i suoi numeri semplici in quel senso.

    Se hai già codice che mostra i dati, siamo ad un buon punto. Così come hai query SELECT per estrarre i dati dalle tabelle, puoi usare INSERT o UPDATE per aggiornarne il contenuto — rispettivamente aggiungere o modificare righe. Lato PHP, le stesse funzioni che ti permettono di eseguire una query di lettura possono essere usate anche per scrivere.

    Magari comincia con qualcosa di meno intricato, tipo aggiungere un nuovo prodotto. Posta il codice e possiamo costruire su quello.

  5. #5
    amaggi non è connesso Utente Blog
    Data registrazione
    21-09-2021
    Messaggi
    4

    Predefinito

    certo! ti carico quello che son riuscita a fare, ho sempre avuto problemi a capire bene se modificando funzionasse bene il sistema. Perche ad esempio in questo caso devo interagire con due tabelle, articoli e fornitori... gli articoli sono in diversi fornitori, chiamiamoli tipo f1, f2 e f3. Adesso non l'ho ancora impostata ma l'idea era di mettere come prima cosa una barra di ricerca che ti fa l'elenco dei fornitori che hanno quell articolo. Quindi io cerco tipo 'mouse' e mi esce fuori ad esempio:
    - f1 ha quantità: 10 e prezzo singolo: 20€
    - f2 ha quantità: 39 e prezzo singolo: 15€
    - f3 ha quantità: 23 e prezzo singolo: 45€


    https://amaggi.altervista.org/TEST_R...ONA/index.html
    questo è il risultato
    grazie mille per l'aiuto (⁠✿⁠^⁠‿⁠^⁠)

    Codice HTML:
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta name="generator" content="AlterVista - Editor HTML"/>
      <title>Pagina principale</title>
    </head>
    <body>
      <form action="" method="post">
            	Inserisci l'ID: 
        		<input type="number" name="ID" value=""> 
     	   		<br><br>
        		Inserisci il nome: 
        		<input type="text" name="Nome" value=""> 
     	   		<br><br>
     			Inserisci il prezzo:
     			<input type="number" name="PrezzoVendita" value="">
       			<br><br> 
        		Cliccare questo pulsante per visualizzare i dati:
                <input formaction="visual.php" type="submit" name="visual" value="Visualizza"> 
                <br><br>
                Cliccare questo pulsante per inserire i dati:
                <input formaction="inserimento.php" type="submit" name="inserire" value="Inserisci">
                <br><br>
                Cliccare questo pulsante per svuotare le caselle:
                <input type="reset" name="cancella" value="Annulla">
                <br><br>
    	</form>
    </body>
    </html>
    Codice PHP:
    <html>
    <head><title> Inserimento </title></head>
    <body>
    <form action='' method='post'>
    <button type='submit' formaction="index.html" name='Indietro'>Indietro</button>
    </form>

    <?php
    $myconn
    = new mysqli("localhost","amaggi"," ","my_amaggi");
    if(
    $myconn->connect_errno){
    echo
    "Errore";
    exit();
    }
    $sql="INSERT INTO Articoli(ID,Nome,PrezzoVendita)
    VALUES ('
    $_POST[ID]', '$_POST[Nome]', '$_POST[PrezzoVendita]')";
    if (
    mysqli_query($myconn, $sql)) {
    echo
    "Nuovo record creato con successo";
    } else {
    echo
    "Errore: " . $sql . "<br>" . mysqli_error($myconn);
    }
    mysqli_close($myconn);
    ?>
    </body>
    </html>
    Codice PHP:
    <html>
    <head>
    <title>display articoli</title>
    </head>
    <body>
    <?php
    $myconn
    = mysqli_connect("localhost", "amaggi", "my_amaggi") or die("1.Errore... " . mysqli_error());
    mysqli_select_db($myconn, "my_amaggi") or die("2.Errore... " . mysqli_error($myconn));

    $sql = "SELECT * FROM Articoli";
    $rs = mysqli_query($myconn, $sql) or die("3.Errore... " . mysqli_error($myconn));

    $numrows = mysqli_num_rows($rs);

    if (
    $numrows == 0) {
    echo
    "Database vuoto!";
    } else {
    while (
    $riga = mysqli_fetch_assoc($rs)) {
    $ID = $riga["ID"];
    $Nome = $riga["Nome"];
    $PrezzoVendita = $riga["PrezzoVendita"];
    $Quantita = $riga["Quantita"];

    echo
    "Id: <b>" . $ID . "</b>";
    echo
    " - Nome: <b>" . $Nome . "</b><br/>";
    echo
    "Prezzo: <b>" . $PrezzoVendita . "</b> quantità " . $Quantita . "<br/><br/>";
    }
    }

    mysqli_close($myconn);
    ?>
    </body>
    </html>
    Ultima modifica di amaggi : 17-07-2023 alle ore 15.06.59

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Occhio che questo:
    Codice PHP:
    $sql="INSERT INTO Articoli(ID,Nome,PrezzoVendita)
    VALUES ('
    $_POST[ID]', '$_POST[Nome]', '$_POST[PrezzoVendita]')";
    if (
    mysqli_query($myconn, $sql)) {
    è pericoloso. Stai mettendo dentro ad una query quello che arriva via $_POST dal browser, senza controlli. Qualcuno potrebbe inserire un nome preciso che trasforma quella query in una che fa danni. Bobby Tables insegna.

    PHP mette a disposizione i prepared statement, vedi questa discussione o cerca sul form per esempi.

    Per raccogliere dati da più tabelle in una sola query, puoi usare JOIN ... ON .... Questo tutorial potrebbe esserti utile.

  7. #7
    amaggi non è connesso Utente Blog
    Data registrazione
    21-09-2021
    Messaggi
    4

    Predefinito

    Grazie mille!!! Purtroppo ho usato codici che ci hanno insegnato a scuola, non è proprio il massimo quindi questo sono riuscita a fare. Però grazie mille vedrò di fare delle modifiche :D

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •