• User

    Inserimento dati in db da form select

    Salve,
    volevo sapere se potevate darmi qualche indicazione su come fare per caricare in un db i dati ad esempio scelti da un form con una select.

    (i dati della select vengono estratti dal contenuto nome dei file presenti in una cartella)

    Sarà domanda banale ma guardando in rete non ho trovato esempi molto chiari e non sono certo una cima in php purtroppo :dull:
    o forse mi sto solo perdendo in un bicchiere d'acqua :arrabbiato:
    Grazie


  • User Attivo

    Guarda se è questo che intendevi

    [PHP]<?
    function dirTraverse($dir) {
    if(!is_dir($dir)) {die("'$dir' non è una cartella");}
    global $filelist;
    //apre handle di directory
    $dh = opendir($dir) or die("impossibile aprire cartella");
    // scorre i files della directory
    while(($file = readdir($dh)) !== false) {
    //esclude "." e ".."
    if ($file != "." && $file !="..") {
    if (is_dir("$dir/$file")) {
    //se è una sottodirectory
    dirTraverse("$dir/$file");
    }
    else {
    //se è un file
    $filelist[] = "$dir/$file";
    }
    }
    }
    //restituisce l'elenco finale
    return $filelist;
    }
    $result = dirTraverse('tua_cartella');
    sort($result);
    ?>
    <select name="nomi">
    <?
    foreach($result as $nomi)
    {
    echo "<option value=".$nomi.">".$nomi."</option>";
    }
    ?>
    </select>[/PHP]


  • User

    Ciao supercapocc,
    questo l'ho già fatto ovvero popolare la select con i nomi dei files estratti dalla cartella quello che mi sfugge è come faccio avendo già questo a dire inseriscimi ciò che viene scelto nella select come opzione in un campo del db?

    Ho idea sia una cavolata ma mi sfugge proprio >_>


  • Consiglio Direttivo

    Ciao Giulietta 🙂

    Basta che tu metta come value della option il valore che ti interessa, ovvero il nome file se non ho compreso male, e quindi fai un semplice INSERT (se devi creare un nuovo record) o UPDATE se è un record già esistente, utilizzando questo valore per popolare quel campo 😉


  • User

    Ciao Samyorn 🙂
    Allora io normalmente riesco a fare inserimenti nel db con i campi input ma con le select non mi è mai riuscito di capire dove sbagliassi.
    In particolare ti posto il pezzo di codice interessato

    [php]<?php
    $sub = ($_GET['dir']);
    $path = 'immagini';
    $path = $path . "$sub";

    switch ($_REQUEST['act']) {
        
        case 'edit':
        if ($_REQUEST['id']!=""){
            $query="SELECT*FROM materiali WHERE id=".$_REQUEST['id'];
            $result=mysql_query($query);
            print "".$riga['id'];
            while ($riga=mysql_fetch_array($result)){
                $id=$riga['id'];    
                $titolo=$riga['titolo'];
                $sottotitolo=$riga['sottotitolo'];
                $descrizione=$riga['descrizione'];
                $nomedocumento=$riga['nomedocumento'];
                $descrizionelink=$riga['descrizionelink'];
                $pubblica=$riga['pubblica'];            
            }
        }
        //form
    
        print "<div>";
        
        print "<p>";
        print "<br/><strong>MODIFICA/INSERIMENTO DESCRIZIONE MATERIALI</strong><br/><br/>\n";
        print "</p>";
        print "<form method='post' action='function.php' enctype='multipart/form-data'>";
        print "<input type='hidden' name='tipo' value='materiali'>";
        print "<input type='hidden' name='act' value='edit'>";
        print "<input type='hidden' name='id' value='".$id."'>";
        
        print "<p>";        
        print " <strong>Titolo</strong><br/><input type='text' name='titolo' value='".$titolo."'><br/><br/>";
        print " <strong>Sottotitolo</strong><br/><input type='text' name='sottotitolo' value='".$sottotitolo."'><br/><br/>";
        print "<strong>Descrizione</strong><br/><textarea name='descrizione' rows='6' cols='42'>";
        print "".$descrizione."</textarea><br/><br/>";        
        //print " <strong>Nome Documento </strong><br/><input type='text' name='nomedocumento' value='".$nomedocumento."'><br/><span style='font-size:10px;'>Nome esatto del file più estensione Es.: 20081212_testo_unico.pdf</span><br/><br/>";
        print " <strong>Descrizione Link</strong><br/><input type='text' name='descrizionelink' value='".$descrizionelink."'><br/><span style='font-size:10px;'>Nome desiderato per il link al file caricato Es.: Testo unico 2008</span><br/><br/>";
    

    echo "<select name='nomedocumento' >";
    $dh = opendir($path);

    while ($file = readdir($dh)) {
    $file_array[] = $file;
    }

    foreach ($file_array as $file) {

    if ( $file == ".." || $file == ".") {
    continue;
    }
    echo "<option value='".$nomedocumento."'>$file</option>";
    }
    echo "</select><br/><br/>";

        print"<strong>Vuoi pubblicarlo? </strong><input type='checkbox' name='pubblica' ";
        if ($pubblica){
                print "checked ";
        }
        print"value='1' /><br />";
        print "<input type='submit' value='Salva'></p>";
        print"</form></div>";
        break;
        
        
        default:
        $query="SELECT * FROM materiali ";
    $result=mysql_query($query);
    while ($riga=mysql_fetch_array($result)){
    
        print "<div>";
        print "<p>";        
        print "<strong>".$riga['titolo']."</strong><br/>";            
            
        print"<br/><a href='admin.php?tipo=materiali&act=edit&id=".$riga['id']."'><strong>MODIFICA</strong></a>&nbsp;";
        print"<a href='function.php?tipo=materiali&act=canc&id=".$riga['id']."' onclick='return confirm(\"Sei sicuro di voler cancellare il file \")'><strong>CANCELLA</strong></a>";    
        print "</p></div><hr />";
    }
        print"<p><span class='indietro'><a href='admin.php?tipo=materiali&act=edit&id=".$riga['id']."'><strong>Aggiungi uno nuovo materiale</strong></a></span></p>&nbsp;";        
    
        break;
    }
    

    ?>[/php]Ed il file dell'action function.php che include questo file a seguire
    [php]
    <?php
    switch ($_REQUEST['act']) {
    case 'edit':
    //modifica e inserimento su DB
    if ($_REQUEST['pubblica']=="") $_REQUEST['pubblica']==0;
    if ($_REQUEST['id']!=""){
    $query="UPDATE materiali ";
    $query.="SET ";
    $query.="id=".$_REQUEST['id'].",";
    $query.="titolo='".$_REQUEST['titolo']."',";
    $query.="sottotitolo='".$_REQUEST['sottotitolo']."',";
    $query.="descrizione='".$_REQUEST['descrizione']."',";
    //$query.="nomedocumento='".$_REQUEST['nomedocumento']."',";
    $query.="descrizionelink='".$_REQUEST['descrizionelink']."',";
    $query.="pubblica=".$_REQUEST['pubblica']." ";
    $query.="WHERE id=".$_REQUEST['id'];
    }else{
    $query="insert into materiali ";
    $query.="VALUES (0,";
    $query.="'".$_REQUEST['titolo']."',";
    $query.="'".$_REQUEST['sottotitolo']."',";
    $query.="'".$_REQUEST['descrizione']."',";
    $query.="'".$_REQUEST['nomedocumento']."',";
    $query.="'".$_REQUEST['descrizionelink']."',";
    $query.=$_REQUEST['pubblica']." )";
    }

        //print $query;
        //exit;
        mysql_query ($query);
        
        header ("location:admin.php?tipo=materiali");
        //print $query;
        break;        
        
        case 'canc':
        $query="DELETE FROM materiali ";
        $query.="WHERE id=".$_REQUEST['id'];
        mysql_query ($query);
        header ("location:admin.php?tipo=materiali");
        break;
    }
    

    ?>[/php]
    In pratica vorrei che, come dicevo prima, la select si riempisse con la lettura dei nomi dei file contenuti nella cartella immagini_(e lo fa) e che in fase di nuovo insert mi inserisse nel db il nome selezionato altrimenti in fase di edit mi facesse vedere quello presente nel db e con update possa cambiare.

    In fase di inserimento/modifica dei dati da input box o textarea o radio o checkbox non ho problemi ma con le select mi accartoccio proprio:?


  • Consiglio Direttivo

    Se quel che ti interessa è inserire il nome del file ($file) nel campo del Db, nel value delle option devi mettere $file 😉


  • User

    :frust:Ecco, lo sapevo io che stavo affogando in un bicchiere d'acqua ... certo che sono proprio cretina :arrabbiato: o forse sarà l'ora ... il tempo ... mah
    Comunque è proprio vero il fatto che più continui a guardare il tuo codice e più non riesci a vedere neanche gli errori più mostruosi ehehe

    Che dire ... 😉 grazie mille per l'aiuto


  • Consiglio Direttivo

    @Giulietta said:

    Comunque è proprio vero il fatto che più continui a guardare il tuo codice e più non riesci a vedere neanche gli errori più mostruosi ehehe
    Sante parole 😄

    Alla prossima :ciauz: