Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    problema con foreach e query mysql

    ciao,

    ho una pagina con 3 select multiple in cui seleziono vari comuni, distretti, regioni, etc. al submit devo inserire all'interno di una tabella mysql gli ID delle voci selezionate.
    La tabella, come dicevo è formata dagli ID.

    id_servizio
    id_ambito
    id_distretto
    id_comune

    non ho capito bene come fare ad inserire tutti questi ID insieme in quella tabella.
    So come inserire i dati attraverso un foreach, ma uno alla volta
    ad esempio:

    Codice PHP:
    if (isset($_POST['ambito'])) {         
               foreach (
    $_POST['ambito'] as $value) {               

    $strSQL "INSERT INTO tbl_associazioni ( id_ambito ) VALUES ( '$value' )";  
          
    $result dbQuery($strSQL);     



    grazie per il supporto

  2. #2
    Ciao, questa è la sintassi per fare un corretto insert.

    Codice PHP:
    INSERT INTO table_name (column1column2column3,...)
    VALUES (value1value2value3,...) 
    Il resto dipende da come hai impostato il form.
    Dato il seguente form
    Codice PHP:
    <form method="post" action="miaurl.php">
        <
    select name="id_servizio">
            <
    option value="43">Vendita Ricotta</option>
            <
    option value="54">Lezioni torrefazione caffè</option>
            [... 
    etc]
        </
    select>
        <
    select name="id_ambito">
            <
    option value="3">Enogastronomia</option>
            <
    option value="54">Urbanistica</option>
            [... 
    etc]
        </
    select>
    </
    form
    La pagina miaurl.php riceverà in $_POST id_servizio e id_ambito
    A questo punto se hai dato all'attributo name delle select gli stessi nomi dei campi della tabella ti basterà
    Codice PHP:
    array_map($_POST'mysql_real_escape_string'); //per prevenire sql injection
    $p = (object) $_POST//lo faccio solo per comodità
    //Usando la tua sintassi
    $strSQL "INSERT INTO tbl_associazioni ( id_servizio, id_ambito [... etc (se lo scrivi con questa parte tra le parentesi quadre darà errore] ) VALUES ( '{$p->id_servizio}', '{$p->id_ambito}' )";   
    $result dbQuery($strSQL); 
    Fammi sapere se ti ho aiutato.
    Ciao
    Antonio Correnti
    www.resetstudio.it

  3. #3
    ciao,
    grazie per la risposta.

    non ho capito bene il tuo script.

    nel form select io devo passare via POST più di una variabile quindi le devo mettere in un array

    <select name="ambito[] " multiple="multiple">
    ...query per popolare la select...
    <option> dati estratti dalla query in un ciclo while</option>

    quindi per inserire ciò che ricevo da POST lo devo estrarre per forza con un foreach come ho descritto sopra.
    Il problema che devo risolvere è che avendo 3 form select, come faccio poi ad inserire tutti i dati ricevuti dalle 3 select nella stessa e unica tabella INSERT INTO tbl_associazioni?
    mi spiego?
    grazie

  4. #4
    Ciao Blur,
    Il problema è che una tabella mysql è bidimensionale.
    Teoricamente se avessi tre selezioni ambito, dovresti o fare tre insert, o avere 3 diverse colonne (ambito1 ambito2 ambito3).
    Oppure potresti inserire gli id ambito separati da virgola nel campo ambito, o ancora potresti salvare i valori convertiti in json nel campo.
    O potresti fare come me e passare ad un database noSql(document oriented) come mongoDB o CouchDB.
    Antonio Correnti
    www.resetstudio.it

  5. #5
    che casino... :master:

    ma non è possibile inserire all'interno di un unico foreach i 3 diversi array che ricevo via POST
    cioè ambito[] , distretto[] e comuni[] in modo poi da inserirli in un unica query come colonne campi ( id_ambito, id_distretto, id_comuni ) e come valore ( '$value1', '$value2', '$value3' )?

    scusa se per caso hai già risposto a questa domanda, ma se non uso sto foreach sono perso...

  6. #6
    Scusa, ma perché ambito[](parentesi quadre)? ha più valori?
    E' possibile vedere una demo del form?
    Antonio Correnti
    www.resetstudio.it

  7. #7
    ha le parentesi quadre perchè nella select multipla, che è popolata dinamicamente ho più valori da passare.

    il form è molto semplice:

    codice:
    <form action="processProduct.php?action=addProduct" method="post" enctype="multipart/form-data" name="frmAddProduct" id="frmAddProduct">  
    <select name="ambito[]" id="sel5" class="box" size="10" multiple="multiple">       
    
    <?php      $query = "SELECT * FROM tbl_ambiti ORDER BY nome_ambito ASC";       
    $result = dbQuery($query) or die('Impossibile trovare l\'ambito. ' . mysql_error());      
     while($row = dbFetchArray($result)) 
    {                 
    list($id_ambito, $nome_ambito) = $row;              
    ?>    
    <option value="<?php echo $id_ambito ?>">
    <?php echo $nome_ambito ?></option>      
    <?php } ?>             </select>       
    <input type="button" id="nada5" value="none"/>       
    <input type="button" id="todos5" value="all"/>

    ti riassumo cosa devo fare e qual'è il problema

    ho una pagina con 3 form select multiple. I dati selezionati vengono spediti via POST al file di controllo che dovrebbe inserirli, tramite query nel DB mysql.
    i nomi delle select sono:

    <select name="ambito[]">
    <select name="distretto[]">
    <select name="comune[]">

    tutti i dati contenuti in ciascuno di questi array, dovrebbero essere inseriti in un unica tabella chiamata "tbl_associazioni".

    tbl_associazioni:

    id_ambito
    id_distretto
    id_comune

    com'è intuibile, si tratta degli ID di altre tabelle per creare le associazioni.
    Il problema qual'è: come faccio ad inserire questi dati nella tabella tbl_associazioni.

    se si trattasse di una sola select, con un semplice foreach:

    if (isset($_POST['ambito'])) {
    foreach ($_POST['ambito'] as $value) {
    $strSQL = "INSERT INTO tbl_associazioni ( id_ambito ) VALUES ( '$value')";

    $result = dbQuery($strSQL);


    oplà il gioco è fatto...MA con 3 select????
    ho provato a fare 3 foreach con 3 query, ma alla seconda mi da errore....

    come posso fare per risolvere il problema??

  8. #8
    Che errore ti da?
    Prova a farti un echo di $strSQL e incollalo sul tuo dbmanager (phpmyadmin o simili) per vedere che errore ti da.
    Antonio Correnti
    www.resetstudio.it

  9. #9
    l'errore lo vedo già direttamente sulla pagina dopo aver inviato il form:

    Field 'id_ambito' doesn't have a default value

    l'id_ambito riguarda la seconda query e secondo foreach

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.