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

    problema inserimento multiplo

    salve, ho un problemino.. ho creato un form per permettere ad un utente di inserire degli episodi di un telefilm nel database

    Codice PHP:
    <?php

    for($p=1$p<=10$p++)
    {
    echo 
    "
    <tr>
    <td>
    <select name= \"nrEp\">
    <option value=\"
    $p\" selected=\"selected\">$p</option>";
    for(
    $i=1$i<=25$i++)
    {
    echo 
    "<option value=\"$i\">$i</option>";
    }
    echo
    "
    </select>

    </td>
    <td>
    <input type=\"text\" size=\"40\" name=\"epIta
    $p\" /></td>
    <td>
    <input type=\"text\" size=\"40\" name=\"epOrig
    $p\" /></td>
    </tr>"
    ;
    }
    vi posto il codice del file di elaborazione

    Codice PHP:
    $telefilm $_REQUEST['telefilm'];
    $stagione $_REQUEST['season'];


    foreach(
    $p=1$p<=10$p++)
    {
    $nrEp $_REQUEST['nrEp'];
    $titolo_italiano $_REQUEST["epIta$p"];
    $titolo_originale $_REQUEST["epOrig$p"];
    $query "INSERT INTO episodes (season, nrEp, titleORIG, titleITA, tid) VALUES ('$stagione', '$nrEp', '$titolo_originale', '$titolo_italiano', '$telefilm')";


    Cosi facendo anche se si lasciano dei campi vuoti vengono caricati allo stesso nel db.. non c'è un modo per impedire ciò?

    Io vorrei che si compilano i campi se non li si utilizzano tutti non devono essere caricati quelli vuoti nel db.. ma semplicemente ignorati
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  2. #2
    nessuno sa aiutarmi a risolvere il mio problema?
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    118
    prima di fare l'operazione insert controlla che le variabili ci siano con un if

  4. #4
    fianlmente ho avuto un po di tempo e gli ho dato un occhiata.. e ho fatto come mi hai suggerito.. ho controllato le variabili, ma ora mi riporta questo errore:

    Parse error: syntax error, unexpected ')' in /var/www/netsons.org/site/episodes.php on line 27


    Ecco il codice. la riga 27 è quella del foreach.. prima c'è semplicemente una parentesi } riferita ad un if

    Codice PHP:

    else
    {
    foreach(
    $p=1$p<=10$p++)
    {

    $nrEp $_REQUEST['nrEp'];
    $titolo_italiano $_REQUEST["epIta$p"];
    $titolo_originale $_REQUEST["epOrig$p"];
    if(
    $titolo_italiano != "" OR $titolo_originale != "")
    {
    $query "INSERT INTO tfn_episodes (nrEp, season, titleORIG, titleITA, tid) VALUES ('$nrEp', '$stagione', '$titolo_originale', '$titolo_italiano', '$telefilm')";
    }
    }

    Come posso risolvere? prima questo errore nn me lo dava.. xo mi caricava tt i campi nel db
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  5. #5
    non capisco xke non funzioni.. Può essere che non funzioni il cilo foreach? C'è un modo per utilizzare un ciclo While in alternativa?
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  6. #6
    Cosi facendo anche se si lasciano dei campi vuoti vengono caricati allo stesso nel db.. non c'è un modo per impedire ciò?
    Io vorrei che si compilano i campi se non li si utilizzano tutti non devono essere caricati quelli vuoti nel db.. ma semplicemente ignorati
    Non credo di avere capito bene, perché la frase qui sopra a mio avviso può essere letta in diversi modi. Sopratutto non ho capito cosa intendi nella frase che ho messo in grassetto.
    Ti scrivo tutte le risposte alle mie interpretazioni, poi vedi se c'è qualcosa che ti torna utile.

    MEDOTO 1:
    Se tu vuoi che tutti i campi vengano compilati per non lasciarli vuoti nel DB, ti basta semplicemente, in fase di creazione della tabella, aggiungere la clausola "NOT NULL" ad ogni campo.
    Quando i tuoi utenti effettueranno una query di INSERT, e non avranno compilato tutti i campi, la query non va in porto.
    Devi essere semplicemente bravo ad intercettare l'errore e a trasformarlo in un messaggio di cortesia per far capire ai tuoi utenti dove sbagliano.
    Preferibilmente, dovresti fare dei controlli sugli input prima di andare a mettere le variabili nella query.... ma questa è anche una questione di sicurezza!

    MEDOTO 2:
    Se tu vuoi che nel DB, i campi rimangano effettivamente vuoti, nello script precedente alla query di INSERT, puoi andare a sostituire tutti i campi lasciati vuoti e metterci il NULL.
    Codice PHP:
    $var1 trim($_POST['variabile_1_da_form']);
    $var2 trim($_POST['variabile_2_da_form']);
    $var3 trim($_POST['variabile_3_da_form']);
    $var4 trim($_POST['variabile_4_da_form']);

    if (!isset(
    $var1) OR $var1 == "") { $var1 NULL; }
    if (!isset(
    $var2) OR $var2 == "") { $var2 NULL; }
    if (!isset(
    $var3) OR $var3 == "") { $var3 NULL; }
    if (!isset(
    $var4) OR $var4 == "") { $var4 NULL; } 
    Queste variabili verranno poi passate alla query di INSERT... ma bada che, al contrario del METODO 1, in questo caso le colonne del DB non dovranno essere state create con la clausola "NOT NULL".

    MEDOTO 3:
    Puoi anche provare a crearti la stringa SQL in maniera dinamica, ma dovresti fare molta attenzione alla sintassi.

    Se poi intendevi una quarta cosa, fammi sapere.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Provo a spiegarmi meglio.. Io ho 10 celle che metto a disposizione dell'utente per caricare delle stringe di testo.

    Se l'utente le compila tutte e 7 non ci sono prob.. nel db vengono caricati correttamente tutti i campi.

    Se invece l'utente ne compila solo 2 nel db vengono caricati i 2 campi giusti (riempiti) e gli altri 7 vuoti.. io voglio che i campi non utilizzati non vengano caricati nel db..

    Seguendo il suggerimento di lucagiaca ho controllato i campi cosi facendo se uno risultava vuoto la query non partiva e dunque nel db non veniva caricato nessun dato.. solo che come puoi vedere mi genera questo errore:

    Codice PHP:
    Parse errorsyntax errorunexpected ')' in /var/www/netsons.org/site/episodes.php on line 27 

    il codice "incriminato" è il seguente:

    Codice PHP:
    else
    {
    foreach(
    $p=1$p<=10$p++) //questa è la riga 27
    {

    $nrEp $_REQUEST['nrEp'];
    $titolo_italiano trim($_REQUEST["epIta$p"]);
    $titolo_originale trim($_REQUEST["epOrig$p"]);
    if(
    $titolo_italiano != "" OR $titolo_originale != "")
    {
    $query "INSERT INTO tfn_episodes (nrEp, season, titleORIG, titleITA, tid) VALUES ('$nrEp', '$stagione', '$titolo_originale', '$titolo_italiano', '$telefilm')";
    }
    }

    spero ora di essermi spiegato meglio..
    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  8. #8
    Dunque.... forse non avevi capito te il mio precedente post, ma lì trovavi due ottime soluzioni: sia al metodo 2 sia a quello 3.
    Se non vuoi che i campi vuoti vengano aggiornati, o metti NULL nelle variabili che vanno a popolarli, o compili dinamicamente la stringa SQL ed eviti di aggiornarli in qualsiasi modo.

    Vabé... a parte questa precisazione, molto semplicemente FOREACH serve a scorrere un ARRAY, mentre te lo usi in sostituzione di un ciclo di FOR.

    Ti consiglio, per eventuali errori di sintassi futuri, di cercare sempre il giusto metodo di scrittura in PHP.net.
    ==> FOREACH.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    118
    l'errore e' in: foreach($p=1; $p<=10; $p++)

    il ciclo for e il foreach sono 2 cose completamente differenti

    for($i=1; $i<=10; $i++)

    foreach($array as $k => $v)

    studiati bene i differenti cicli ogniuno ha un suo specifico utilizzo

  10. #10
    Ok.. ho un modo di caricare tt i miei dati (nomeTelefilm, nr. Episodio, stagione, Titolo Italiano e Titolo originale) in un array? cosi poi da poter utilizzare un ciclo foreach?

    Documentandomi sono venuto a conoscienza degli array multidimenisionali ovvero:

    Codice PHP:
    $arr = array();
    $arr['preferiti'] = array("auto" => "Ferrari",
                              
    "cane" => "Labrador"
                              
    ); 
    che potrei adattare cosi alle mie esigenze:

    Codice PHP:
    $arr = array();
    $arr["nomeTelefilm-ricevuto-da-form"] = array("nrEp" => "nrEpisodio-dal-form",
                                                  
    "stagione" => "stagione-ricevuta-dal-form",
                                                  
    "titoloIta" => "titolo-italiano-ricevuto-dal-form",
                                                  
    "titoloOrig" => "titolo-originale-ricevuto-dal-form",
                                                  ); 
    cosi poi potrei creare la query in questa maniera:
    Codice PHP:

    foreach($arr as $array)
    {
    $nrEp $array['nomeTelefilm-ricevuto-dal-form']['nrEp'];
    $stagione $array['nomeTelefilm-ricevuto-dal-form']['stagione'];
    $titolo_originale $array['nomeTelefilm-ricevuto-dal-form']['titoloOrig'];
    $titolo_italiano $array['nomeTelefilm-ricevuto-dal-form']['titoloIta'];
    $telefilm $array['nomeTelefilm-ricevuto-dal-form'];

    $query "INSERT INTO tfn_episodes (nrEp, season, titleORIG, titleITA, tid) VALUES ('$nrEp', '$stagione', '$titolo_originale', '$titolo_italiano', '$telefilm')"

    Spero la sintassi sia giusta e tt sia corretto.. ora vorrei sapere come fosse possibile ricreare l'array descritto sopra con i dati richiamati dai campi di inserimento.. xke fino a quando si tratta di un solo campo basta dare il nome dell'array e aggiungerci le parentesi []
    es:

    Codice PHP:
    <form method="GET" action="esegui.php">
    <
    input type="checkbox" name"array[]" value="opz 1">
    <
    input type="checkbox" name"array[]" value="opz 2">
    <
    input type="checkbox" name"array[]" value="opz 3">
    </
    form
    però nel mio caso non saprei come fare. Perchè se creo l'array nella seguente maniera mi crea un array contenente tt i dati e non divisi come descritto sopra:
    Codice PHP:
    for($p=1$p<=10$p++)
    {
    echo 
    "
    <tr>
    <td>
    <select name= \"arr[]\">
    <option value=\"
    $p\" selected=\"selected\">$p</option>";
    for(
    $i=1$i<=25$i++)
    {
    echo 
    "<option value=\"$i\">$i</option>";
    }
    echo
    "
    </select>

    </td>
    <td>
    <input type=\"text\" size=\"40\" name=\"arr[]\" /></td>
    <td>
    <input type=\"text\" size=\"40\" name=\"arr[]\" /></td>
    </tr>"
    ;

    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

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.