Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    select dinamiche popolate da db

    In realtà avevo già chiesto la stessa cosa in un altra discussione ma data la mia inesperienza è diventata presto confusa. cerco di riiniziare con più ordine:

    Cosa voglio fare:

    Una select che si popoli con i dati di una tabella (es delle categorie di articoli) e che alla mia scelta mi popoli un'altra select con tutti gli articoli che appartengono alla categoria scelta. dopodichè io seleziono l'articolo che mi interessa e lui mi manda ad un'altra pagina il valore (tipo il prezzo) di quell'articolo.

    mi è stato passato gentilmente questo script di 13manuel84 :
    Codice PHP:
    Originariamente inviato da 13manuel84 
    beh, la cosa la puoi fare così (come faccio sempre io): nel primo menù prendi tutte le categorie presenti nel db, e nel secondo tramite un'altra query prendi solo le sottocategorie appartenenti alla categoria selezionata; per fare questo io uso due tabelle, una per la categorie (id_categoria, tipo_categoria) e una per le gruppo(id_gruppo, tipo_gruppo, id_categoria), e per realizzarlo è un misto di php, sql e js.

    Menù per le categorie: 
    codice:<select name="categoria" onChange="inviaCambiamenti()">
    <?
     query
    ="SELECT * FROM categoria order by 'tipo_categoria'";
     
    $result mysql_query($query);
     echo 
    "<option value=\"\">Seleziona</option>";
     while(
    $row mysql_fetch_assoc($result))
     {
      if(!empty(
    $categoria))
      {
       if (
    $row[id_categoria]<>$categoria)
       {
        echo 
    '<option value="'.$row[id_categoria].'" >'.$row[tipo_categoria].'</option>';
       }
       else                    
       {
        echo 
    '<option value="'.$row[id_categoria].'" SELECTED>'.$row[tipo_categoria].'</option>';            
       }
      }
      else 
      {
       echo 
    '<option value="'.$row[id_categoria].'">'.$row[tipo_categoria].'</option>';
      }
    }
    ?>
    </select>

    Menù per le sottocategorie: 
    codice:<select name="gruppo">
    <?
      $query
    ="SELECT * FROM gruppo WHERE id_categoria='$categoria' order by 'tipo_gruppo'";
      
    $result mysql_query($query);
      echo 
    "<option value=\"\">Seleziona</option>";
      while(
    $row mysql_fetch_assoc($result))
      {
       if(!empty(
    $gruppo))
       {
        if (
    $row[id_gruppo]<>$gruppo)
        {
        echo 
    '<option value="'.$row[id_gruppo].'" >'.$row[tipo_gruppo].'</option>';
        }
        else                    
        {
         echo 
    '<option value="'.$row[id_gruppo].'" SELECTED>'.$row[tipo_gruppo].'</option>';
        }
       }
       else 
       {
        echo 
    '<option value="'.$row[id_gruppo].'">'.$row[tipo_gruppo].'</option>';
       }
    }
    ?>
    </select>

    n.b. il codice vale per la struttura delle tabelle che ho usato io, se la tua è diversa ricordati di modificare leggermente il codice.

    la funzione che vedi (onChange="inviaCambiamenti()") è una funzione js che ricarica la pagina inviando il valore della categoria selezionata, in modo da poter fare la seconda query; la devi mettere nell'head dell'html:

    codice:<script language="javascript">

    function inviaCambiamenti(){
      document.form1.action = "<?php echo $PHP_SELF?>";
      document.form1.submit();
    }

    </script>

    form1 è il nome della form in cui hai messo i menù, se è diverso cambialo pure nella funzione.


    Io l'ho adattato al mio codice e.... qualcuno può darmi una mano? :master:

    Codice PHP:
    <title>Documento senza titolo</title> 


    <script language="javascript"> 

    function inviaCambiamenti(){ 
      document.form1.action = "<?php echo $PHP_SELF?>"; 
      document.form1.submit(); 


    </script> 

    </head> 


    <body> 
    <form name="form1" action="somma_preventivo.php" method="post"> 
    <select name="categoria" onChange="inviaCambiamenti()"> 
    <?php 
    include("mysql.php"); 
    $query"SELECT Descrizione FROM categoria"
    $result mysql_query($query); 
    echo 
    "<option value=\"\">Seleziona</option>"
    while(
    $row mysql_fetch_assoc($result)) 

      if(!empty(
    $categoria)) 
      { 
       if (
    $row['Descrizione']<>$categoria
       { 
        echo 
    '<option value="'.$row['Descrizione'].'" >'.$row['Descrizione'].'</option>'
       } 
       else                     
       { 
        echo 
    '<option value="'.$row['Descrizione'].'" SELECTED>'.$row['Descrizione'].'</option>';             
       } 
      } 
      else 
      { 
       echo 
    '<option value="'.$row['Descrizione'].'">'.$row['Descrizione'].'</option>'
      } 

    ?> 
    </select> 




    <select name="gruppo"> 
    <? 
      $query
    ="SELECT * FROM listino WHERE Categoria='$categoria' order by 'Descrizione'"
      
    $result mysql_query($query); 
      echo 
    "<option value=\"\">Seleziona</option>"
      while(
    $row mysql_fetch_assoc($result)) 
      { 
       if(!empty(
    $gruppo)) 
       { 
        if (
    $row[Descrizione]<>$gruppo
        { 
        echo 
    '<option value="'.$row['Prezzo_Unitario'].'" >'.$row['Descrizione'].'</option>'
        } 
        else                     
        { 
         echo 
    '<option value="'.$row['Prezzo_Unitario'].'" SELECTED>'.$row['Descrizione'].'</option>'
        } 
       } 
       else 
       { 
        echo 
    '<option value="'.$row['Prezzo_Unitario'].'">'.$row['Descrizione'].'</option>'
       } 

    ?> 
    </select> 


    <input name="submit" type="submit" value="Invia" /> 
    </form> 


    </body> 
    </html>

  2. #2
    mi sono interstardito

    gentilmente mi passi la query di creazione delle tue tabelle? cosi provo a simularmelo e poi ti faccio sapere

  3. #3
    Acc. appena arrivo in uff. te la spedisco
    Rigrazie

  4. #4
    Originariamente inviato da mensana3
    Acc. appena arrivo in uff. te la spedisco
    Rigrazie


  5. #5
    pant pant eccomi vedi un pò se ti basta, della tabella listino ti ho mandato solo la struttura perche erano migliaia di articoli, basta che tu ne inserisca 2 o 3, la tabella categorie non ha un ID che corrisponda a un campo ID_categoria su listino, essendo stata creata successivamente a listino, per cui io pensavo ,per quanto brutti ,di fare i confronti tra Descrizione dellla tab listino e Descrizione della tabella categoria.
    io in buona sostanza quello che non riesco a capire e come funziona il ricarico della pagina tramite $PHP_SELF; se la ricarica come fosse una qualunque pag esterna (tipo l'action del form) io dovrei recuperare in quache modo la variabile che mi passa (ma con che metodo poi GET o POST?) e invece trovo delle variabili (ndr $categoria e $gruppo) che sembrano già valorizzate e non sò se manca qualcosa nell'esempio (in quanto solo esempio) .

    vedi un po:

    codice:
    -- phpMyAdmin SQL Dump
    -- version 2.6.1
    -- http://www.phpmyadmin.net
    -- 
    -- Host: localhost
    -- Generato il: 01 Set, 2006 at 04:06 PM
    -- Versione MySQL: 4.1.9
    -- Versione PHP: 4.3.10
    -- 
    -- Database: `listino`
    -- 
    
    -- --------------------------------------------------------
    
    -- 
    -- Struttura della tabella `listino`
    -- 
    
    CREATE TABLE "listino" (
      "ID" int(11) NOT NULL,
      "Codice" double default NULL,
      "Descrizione" varchar(255) default NULL,
      "Note" longtext,
      "Prezzo" double default NULL,
      "Immagine" varchar(255) default NULL,
      "Produttore" varchar(255) default NULL,
      "Categoria" varchar(255) default NULL,
      "Qtà" double default NULL,
      "Rincaro" double default NULL,
      "Prezzo_Unitario" double(10,0) unsigned default '0',
      "Totale" double default NULL,
      PRIMARY KEY  ("ID")
    ) AUTO_INCREMENT=689 ;
    
    
    
    
    
    
    CREATE TABLE `categoria` (
      `ID` int(3) NOT NULL auto_increment,
      `Descrizione` varchar(255) NOT NULL default '',
      PRIMARY KEY  (`ID`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=47 ;
    
    -- 
    -- Dump dei dati per la tabella `categoria`
    -- 
    
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (1, 'Alimentatori');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (2, 'Cabinet');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (3, 'Cabinet Add-On');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (4, 'Casse Audio - Schede Sonore');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (5, 'Cavetteria');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (6, 'Dissipatori CPU-HDD-SVGA');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (7, 'Fotocamere');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (8, 'Gruppi di Continuita');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (9, 'Hard Disk');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (10, 'Hard Disk Add-On');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (11, 'LCD PC Enface Envision 570W');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (12, 'Lettori CD - DVD - Floppy');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (13, 'Mainboard per CPU AMD');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (14, 'Mainboard per CPU Intel');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (16, 'Masterizzatori CD-DVD-COMBO');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (17, 'Memorie RAM');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (18, 'Modding');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (19, 'Modem 56k- ISDN- ADSL- Router');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (20, 'Monitor - TV LCD');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (21, 'Multimedia Add-On');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (22, 'Multimedia Audio & Video');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (23, 'Multimedia IN & OUT');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (24, 'Networking & Wireless');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (25, 'Notebook Accessori');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (26, 'Notebook ACER');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (27, 'Notebook Enface Octave S10M');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (28, 'Notebook Enface Octave T10M');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (29, 'Notebook Enface OctaveT100A');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (30, 'Notebook Flybook A33i');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (31, 'Notebook Flybook V23i');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (32, 'Notebook HP');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (33, 'Opzini Flybook');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (34, 'Pc Assemblati in Offerta');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (35, 'PC Assemblati Serie Chakra');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (36, 'PC Assemblati Serie Pandora');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (37, 'PC Assemblati Serie Red Line');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (38, 'PC Barbone ASUS');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (39, 'Pen Drive & Flash Memory');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (40, 'Processori AMD');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (41, 'Processori Intel');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (42, 'Schede Video Slot AGP');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (43, 'Schede Video Slot PCI-Express');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (44, 'Software');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (45, 'Supporti registrabili CD - DVD');
    INSERT INTO `categoria` (`ID`, `Descrizione`) VALUES (46, 'Tastiere e Mouse');

  6. #6
    Utente di HTML.it L'avatar di neida
    Registrato dal
    Feb 2005
    Messaggi
    1,478
    A prescindere dalla struttura delle tabelle nel tuo database, il procedimento è lo stesso di quello che solitamente viene utilizzato per recuperare qualsiasi tipo di dato inviato attraverso un form. Nel tuo case ti basta controllare di volta in volta se sono state trasmesse oppure no le informazioni necessarie che ti permetteranno di procedere nell'esecuzione dello script. Esempio (pseudo-codice)...

    Codice PHP:
    <?php
    /*
     controlla sia stata effettuata una scelta dalla prima select-box
     quella contenente l'id delle categorie dei prodotti, per intenderci 
    */

    if(isset($_POST['cat_id'])) {
    $cat_id $_POST['cat_id'];

    /*
     recuperato in $cat_id l'id della categoria dei prodotti
     potrai fare una semplice query del tipo
     SELECT * FROM prodotti WHERE categoria = '$cat_id'
     e infine stampare i risultati in una nuova select box
     che si occuperà di inviare i dati alla pagina che andrà
     a recuperare il prezzo per il prodotto selezionato

     se non è stata selezionata nessuna categoria
     allora staperai a video la select-box interessata
    */ 
    } else {
    ?>
    <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
    CATEGORIE: <select name="cat_id" onChange="this.form.submit();">
    <option value="1">Categoria1</option>
    <option value="2">Categoria2</option>
    <option value="3">Categoria3</option>
    </form>
    <?php
    }
    ?>
    non l'ho provato ma dovrebbe andare... Quello che realmente ti potrebbe tornare utile per eventuali altre select-box è questo evento onChange="this.form.submit(); che ti consente di inviare i dati alla stessa pagina e recuperare dinamicamente il contenuto che desideri. Alla fine, quando mostrerai l'ultima select, quella con i prodotti, potrai aggiungere un pulsante (type=submit) e indicare nell'action del form l'indirizzo della pagina che ti fornirà il prezzo per il prodotto selezionato.


  7. #7
    se nn funziona come ti ha detto neida fammi sapere


    cmq sembra giusto il concetto

  8. #8

    direi che và, siete stati veramente gentili, adesso cerco di dargli una ripulita e poi magari lo posto.

  9. #9
    ...scusate è una prova

  10. #10
    Buon lunedì a tutti ...cominciamo bene.

    Dunque fino a qui funziona tutto. il problema è che queste due select insieme rappresentano una scelta delle tante che io devo inserire in un form (ricordo che il mio scopo era creare un form per un preventivo online, quindi più select per formare a ns piacimento un computer partendo da tutti i suoi componenti e rimando a una pagina diversa di tutti i totali per il prezzo finale), e se provo a duplicare queste select (chiaramente cambiando nome select e variabili), mi và tutto in tilt quando si rilegge la pagina.

    ...un aiutino

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 © 2025 vBulletin Solutions, Inc. All rights reserved.