Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: [php]query in un for

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    70

    [php]query in un for

    Stampo tanti input text in base al numero inserito dall'utente oltre ad altri 2 campi(autore e durata)...
    <form action="RegistraCanzoni.php" method="post" >
    Titoli Brani:

    <?
    for ($i=1; $i<=$numero_brani; $i++)
    echo '
    <input type="text" size="40" name="nome_canzone[]" />';
    echo '<input type="hidden" name="i" value="' .$i . '" />';
    echo '<input type="hidden" name="titolo" value="' .$titolo . '" />';
    ?>




    Nel file Registra artista:
    $titolo=$_POST[titolo];
    $nome_canzone[]=$_POST[nome_canzone];
    $autore=$_POST[autore];
    $durata=$_POST[durata];
    $i=$_POST[i];
    poi mi connetto al db

    la query normalmente sarebbe:
    $query = " INSERT INTO Canzoni (nome_canzone, autore, durata)
    VALUES ('$nome', '$autore', '$durata' ) " ;

    Ma dovendo inserire ogni singolo campo text(tanti quanto il valore di i)nel db come faccio?In pratica mettendo che i valga 5 avrei 5 titoli diversi di canzoni da inserire nel db Canzoni insieme ad autore e durata....Posso mettere la query in un for?ma come?grazie e spero di essermi spiegato....

  2. #2
    Capirti è stato un bagno di sangue.

    Seguendo il tuo codice, hai una form con 1 o più post "nome_canzone" + 1 post "autore" + post "durata" (quelli che chiami "i" e "titolo" nel codice che hai postato).

    Se il tuo problema è solo costruire la query, ipotizzando che nel vettore $nome_canzone hai le canzoni e in $autore e $durata i corrispettivi:

    Codice PHP:
    $valori = array();
    foreach (
    $nome_canzone as $canzone) {
      
    $valori[] = "($canzone$autore$data)";
    }

    $query 'INSERT INTO Canzoni (nome_canzone, autore, durata) VALUES ' implode(','$valori); 
    Potresti fare anche un ciclo di 'INSERT INTO' con un record alla volta, ma un'unica query con più VALUES è sicuramente più efficiente.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    70
    la i è quella che utilizzo nel ciclo for, la passo come hidden in modo da sapere nella pagina successiva qual'è il numero di canzoni di un determinato album(per questo passo come hidden anche $titolo)...

    Praticamente ho 2 form consecutivi, nel primo viene inserito il titolo dell'album e il numero di canzoni contenute, si inviano i dati e li salvo su db...nella stessa pagina in cui salvo i dati stampo a video un altro form con tanti campo text quante sono le canzoni...quindi se l'album ha 5 canzoni, il form avrà lo spazio per inserire 5 titoli di canzoni , 5 autori delle singole canzoni e 5 campi per inserire la durata di queste 5 canzoni....

    Quindi volevo sapere se è corretto nel file a cui invio i dati dell' ultimo for ricevere le variabili cosi:
    $titolo=$_POST[titolo];
    $nome_canzone[]=$_POST[nome_canzone];
    $autore[]=$_POST[autore];
    $durata[]=$_POST[durata];
    $i=$_POST[i];

    e se è giusto, come impostare la query per salvare sul db Canzoni il titolo dell'album($titolo che è lo stesso per tutte le canzoni)e poi tutti i nomi delle canzoni con durata e autore...
    Quindi ogni riga del db Canzoni sarà:
    $titolo ! $nome_canzone[1] ! $autore[1] | $durata[1]
    $titolo ! $nome_canzone[2] ! $autore[2] | $durata[2]

    Forse detta cosi è + chiaro, spero

  4. #4
    Mooolto più chiaro, zerbo!

    Dalla prima form hai $titolo e $i, di cui non ce ne frega niente perché li hai già elaborati, dalla seconda form hai un vettore di $i elementi di $nome/$autore/$durata. La seconda form dovrebbe quindi essere qualcosa del tipo:

    Codice PHP:
    <form ...>
      <
    input name="nome[]" ... /> <input name="autore[]" ... /> <input name="durata[]" ... />
      <
    input name="nome[]" ... /> <input name="autore[]" ... /> <input name="durata[]" ... />
      ...
    </
    form
    L'acquisizione dei dati deve essere fatta senza specificare le parentesi quadre e per la generazione della query puoi adattare l'esempio che ti avevo postato prima, cioè:

    Codice PHP:
    $nomi $_POST['nome'];
    $autori $_POST['autore'];
    $durate $_POST['durata'];

    $valori = array();
    foreach (
    $nomi as $id => $nome) {
      
    $autore $autori[$id];
      
    $durata $durate[$id];
      
    $valori[] = "($nome$autore$durata)";
    }

    $query 'INSERT INTO Canzoni (nome_canzone, autore, durata) VALUES ' implode(','$valori); 
    Come puoi notare, della $i non me ne frega una salciccia perché le dimensioni del vettore $nomi mi da già il numero di canzoni dell'album.

    Tieni presente che qui si stà saltando il controllo delle magic quotes (vedi stripslashes()) e l'encoding dei dati per il database (vedi mysql_escape_string()) per cui probabilmente ti compariranno slashes fantasma, ma questo è altro pane per i tuoi denti...

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    70
    Ciao ragazzi, a distanza di mesi riprendo qesto mio tpic...nel frattempo il tutto è rimasto in sospeso e da una aettimana ho ripreso il progetto in mano ke spero di fare entro luglio...Ho risolto vari problemi ma sono ancora alle prese con questo problema, facendo come indicato sopra nn sono riuscito a risolvere.

    Ho tra le altre queste 2 tabelle:
    Album Canzoni
    id_album nome_canzone
    titolo autore
    anno durata
    numero_brani id_album

    Premetto ke nel primo form tutto funziona bene e inserisco i dati nella tabella Album, poi parte subito il form per inserire i dati sulle canzoni, tanti campi text quante sono le canzoni dell'album. Compilo il form ma nn riesco ad inserire i dati nella tabella Canzoni dove dovrei ottenere un risultato come questo:

    titolo_canzone1 autore_canzone1 durata_canzone1 id_album
    titolo_canzone1 autore_canzone1 durata_canzone1 id_album

    Naturalmente canzoni dello stesso album avranno lo stesso id_album

    Ho provato con questo codice:

    Codice PHP:
    <?php
    include("config.inc.php");

    //Recupero dei dati inviati dal form di registrazione dell'artista
    $nomi=$_POST['nome_canzone'];
    $autori=$_POST['autore'];
    $durate=$_POST['durata'];

    $dimensione_array=count($nomi);

    $db mysql_connect($db_host$db_user$db_password) ; 
    if (
    $db == FALSE)
      {
        die (
    'Errore nella connessione. Verificare i parametri nel file config.inc.php');
      }
    mysql_select_db($db_name$db)
    or die (
    'Errore nella selezione del database. Verificare i parametri nel file config.inc.php');

    //Quando sarà il momento di visualizzare, potremmo avere problemi con alcuni 
    //caratteri, in particolare con quelli che vanno in contrasto con i tag html.
    //Per questo conviene ancora sostituire il carattere < con l'equivalente html
    //&lt; e inserire nel testo i tag di fine riga:

    for($i=0;$i<=$dimensione_array;$i++)
      {
       
    $autori str_replace"<""&lt;"$autori);
       
    $autori str_replace">""&gt;"$autori); 
       
    $nomistr_replace"<""&gt;"$autori);
       
    $nomistr_replace">""&gt;"$autori);
       
    $query="INSERT INTO Canzoni (nome_canzone,autore,durata)
               VALUES ('
    $nomi[i]','$autori[i]','$durate[i]')";
       
    mysql_query($query$db);
        
      }   

    if (
    mysql_query($query$db))
      {
       echo 
    '<h2>Registrazione effettuata correttamente</h2>

    '
    ;
       echo 
    'Sarai automaticamente indirizzato alla pagina principale ';
       
    ?>
       <html>
       <SCRIPT LANGUAGE="JavaScript">window.setTimeout("document.location='HomePageArtista.php'",5000)</SCRIPT>
       </html>

    <?php  
      
    }
    else 
      {
       die(
    mysql_error());
       echo 
    "Errore durante l'inserimento" ;
       
    mysql_close($db);
      } 

    ?>
    Al momento l'errore ke mi viene dato ha questa dicitura: Duplicate entry '' for key 1

    Che mi dite raga riguardo all'errore e al codice?sto forse sbagliando concettualmente o no?grazie in anticipo

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    70
    qualcuno può aiutarmi ke sono bloccato? Almeno x capire il tipo di errre e nn ho mai incontrato e non capisco a cosa si riferisce...grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    70
    up

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    70
    Proprio nessun commento allora?almeno ditemi ke direzione prendere...mandatemi pure a quel paese ma ditemi qualcosa

  9. #9
    Hai veramente troppi errori: il tuo codice andrebbe rifatto. Il più madornale è di concetto:

    Originariamente inviato da zerbo
    Codice PHP:
    for($i=0;$i<=$dimensione_array;$i++)
      {
       
    $autori = ...
       
    $nomi= ...
       
    $query="INSERT INTO Canzoni (nome_canzone,autore,durata)
               VALUES ('
    $nomi[ i ]','$autori[ i ]','$durate[ i ]')";
        ...
      } 
    Col for sembra che tu voglia ciclare sull'array, poi tratti $autori e $nomi come variabili singole e poi nella query ritorni a considerarle come array.

    Originariamente inviato da zerbo
    Codice PHP:
       $autori str_replace"<""&lt;"$autori);
       
    $autori str_replace">""&gt;"$autori); 
    L'uso di str_replace, a parte essere fuori luogo, non risolve il problema. Se imposto $autori come
    codice:
    ciao"
    ti rendo la pagina inusabile a causa delle virgolette (e ci sono altri caratteri che possono scassare). Usa:

    Codice PHP:
       $autori htmlspecialchars($autoriENT_QUOTES); 
    specificando il charset della pagina come terzo argomento se usi un charset differente da ISO-8859-1. Lo stesso devi fare con nomi, che però contiene un altro errore:

    Codice PHP:
       // Perché usi $autori?
       // $nomi= str_replace( "<", "&gt;", $autori);
       // $nomi= str_replace( ">", "&gt;", $autori);
       
    $nomi htmlspecialchars($nomiENT_QUOTES); 
    Parlando in generale, ogni tabella ha una primary key che deve essere unica. L'errore che hai riportato viene emesso quanto tenti di registrare due record con la stessa primary key.

    Per finire:

    Originariamente inviato da zerbo
    Codice PHP:
    if (mysql_query($query$db)) 
    ripeti l'ultima query.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    70
    Originariamente inviato da ntd

    Col for sembra che tu voglia ciclare sull'array, poi tratti $autori e $nomi come variabili singole e poi nella query ritorni a considerarle come array.
    Essenzialmente ho 3 array(nomi,autori e durate che hano lo stesso numero di celle)e col for intendo proprio ciclare gli array e ad ogni ciclo inserire con la query nomi[i],autori[i] e durate[i].

    Ipotizzando ke gli array siano cosi:
    nomi[]: autori[] durate[]
    alba chiara vasco 4
    come mai 883 3

    Col primo ciclo in cui il contatore i=1 pensavo di ottenere:
    $query="INSERT INTO Canzoni (nome_canzone,autore,durata)
    VALUES ('alba chiara','vasco','4')";
    poi registro la query con mysql_query($query, $db);

    Col secondo ciclo con i=2:
    $query="INSERT INTO Canzoni (nome_canzone,autore,durata)
    VALUES ('come mai','883','3')";
    poi registro la query con mysql_query($query, $db);

    e cosi via...

    E' questo ke devo capire se è possibile, sul fatto di str_replace ho capito l'errore ke mi hai detto ed ho sistemato.

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.