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

    Inserimento dati nel db un po' piu' complesso

    Sto facendo un modulo di prenotazione che dovra' contenere i dati di tot passeggeri.
    In pratica con il for mi creo il modulo che ripetera' il modulo per quante persone vanno in viaggio, per esempio, se nella pagina precedente inserisco il numero 3 nel campo numero_persone, nella pagina successiva mi ritrovero' 3 volte il campo nome, cognome, codice_fiscale e data_nascita
    Per ogni passeggero avro' un id_passeggero e se fanno parte della stessa prenotazione avranno' lo stesso id_prenotazione.

    Il problema e' che non so come inserire nel database i vari passeggeri.
    qualcuno sa darmi qualche consiglio?

    Nel database dovrebbe entrare qualcosa tipo: Esempio di 3 persone

    PRIMO PASSEGGERO
    id_prenotazione = 1
    id_passeggero = 1
    nome = pippo
    cognome = rossi
    codice_fiscale = il codice di pippo
    data_nascita = 01/01/2000

    SECONDO PASSEGGERO
    id_prenotazione = 1
    id_passeggero = 2
    nome = pluto
    cognome = rossi
    codice_fiscale = il codice di pluto
    data_nascita = 05/06/2001

    TERZO PASSEGGERO
    id_prenotazione = 1
    id_passeggero = 3
    nome = topolino
    cognome = rossi
    codice_fiscale = il codice di topolino
    data_nascita = 12/12/1965

    Per fare cio', mi serve fare qualche ciclo per l'inserimento?

    La query la faccio cosi'

    Codice PHP:
    $sql_passeggeri "insert into passeggeri
    (id_prenotazione, id_passeggero, nome, cognome, codice_fiscale, data_nascita)
    values
    (\"
    $id_prenotazione\",\"$id_passeggero\",\"$nome\",\"$cognome\",\"$codice_fiscale\",\"$data_nascita\")";

    $risultato_passeggeri = @mysql_query($sql_passeggeri$connessione)
    or die (
    mysql_errno() . ": " mysql_error()) 
    Ma non capisco se serve il ciclo for o il ciclo while...
    Mai dire Mai

  2. #2
    I dati ti arrivano in un array?
    Puoi usare indifferentement for, while o foreach.

  3. #3
    non penso di essere molto lontano dalla soluzione... perche' con il seguente codice mi ritrovo nel db 3 prenotazioni diverse con lo stesso id_passeggero e sempre lo stesso nome e cognome...

    questo e' il codice che sto usando attualmente:

    Codice PHP:
    $numero_persone==$numero_persone;
    for (
    $i 1$i<=$numero_persone$i++)
    {
    $sql_passeggeri "insert into passeggeri
    (id_prenotazione, id_passeggero, nome, cognome, codice_fiscale, data_nascita)

    values

    (\"
    $id_prenotazione\",\"$id_passeggero\",\"$nome\",\"$cognome\",\"$codice_fiscale\",\"$data_nascita\")";

    $risultato_passeggeri = @mysql_query($sql_passeggeri$connessione)
    or die (
    mysql_errno() . ": " mysql_error());

    mi sa che quel for l'ho messo male... come dovrei modificarlo?
    Mai dire Mai

  4. #4
    :master: A prescindere che non si capisce bene se il tuo script generi un errore, secondo me la sintassi della tua query è errata.

    Dovresti riscriverla così:
    Codice PHP:
    $sql_passeggeri "
    INSERT INTO passeggeri 
    (id_prenotazione, id_passeggero, nome, cognome, codice_fiscale, data_nascita) 
    VALUES 
    ('
    $id_prenotazione','$id_passeggero','$nome','$cognome','$codice_fiscale','$data_nascita')
    "

    Peraltro, visto che $id_prenotazione e $id_passeggero sono numeri, se la colonna in cui li inserisci è di tipo INT non serve neanche che tu vada a a mettere l'apice.

    Codice PHP:
    $sql_passeggeri "
    INSERT INTO passeggeri 
    (id_prenotazione, id_passeggero, nome, cognome, codice_fiscale, data_nascita) 
    VALUES 
    (
    $id_prenotazione,$id_passeggero,'$nome','$cognome','$codice_fiscale','$data_nascita')
    "

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

  5. #5
    si quei 2 campi sono di tipo int
    ok per gli apici, errori non me ne da, ma il problema e' che non mi inserisce i dati nel database come dico io, cioe' deve inserire per ogni prenotazione (id_prenotazione) tutti i passeggeri (id_passeggero) inserendo nome, cognome, codice_fiscale e data_nascita

    Mi spiego meglio:
    nel modulo di prenotazione chiedo quante persone sono a fare il viaggio, supponiamo che metto 3, nella pagina successiva mi escono i campi nome, cognome, codice_fiscale e data_nascita per ogni persona e questo l'ho fatto con il for.
    Ora non so se serve il for anche per l'inserimento nel db
    Mai dire Mai

  6. #6
    Con molta probabilità (non c'è il codice per cui vado a lume di naso) potrebbe esserci un errore in due punti dello script.

    1) La form si genera in maniera dinamica, probabilmente non generi automaticamente i nomi della variabile "name" dei campi di input.
    2) Non utilizzi una sintassi corretta nel recupero delle variabili passate dalla form.

    Posta un po' di cocide che ci diamo un'occhiata.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    allora questa e' la parte dove creo il form:
    prenotazione.php
    Codice PHP:
          <?php

    print ("<table width=\"400\" border=\"0\" cellpadding=\"3\" cellspacing=1 bgcolor=\"#006699\">
      <tr>
        <td colspan=\"2\" bgcolor=\"#FFFFFF\">PASSEGGERO N° 1 <input name=\"id_passeggero\" type=\"hidden\" value=\"1\"></td>
      </tr>
      <tr>
        <td width=\"150\" bgcolor=\"#FFFFFF\">Nome:</td>
        <td bgcolor=\"#FFFFFF\"><input name=\"nome\" type=\"text\" value=\"
    $nome\"></td>
      </tr>
      <tr>
        <td bgcolor=\"#FFFFFF\">Cognome:</td>
        <td bgcolor=\"#FFFFFF\"><input name=\"cognome\" type=\"text\" value=\"
    $cognome\"></td>
      </tr>
      <tr>
        <td bgcolor=\"#FFFFFF\">Codice fiscale: </td>
        <td bgcolor=\"#FFFFFF\"><input name=\"codice_fiscale\" type=\"text\" value=\"
    $codice_fiscale\"></td>
      </tr>
      <tr>
        <td bgcolor=\"#FFFFFF\">Data di nascita: </td>
        <td bgcolor=\"#FFFFFF\"><input name=\"data_nascita\" type=\"text\" value=\"
    $data_nascita\"></td>
      </tr>
    </table>

    "
    );

    $numero_persone==$numero_persone;
    for (
    $i 2$i<=$numero_persone$i++)
    {
    print (
    "<table width=\"400\" border=\"0\" cellpadding=\"3\" cellspacing=1 bgcolor=\"#006699\">
      <tr>
        <td colspan=\"2\" bgcolor=\"#FFFFFF\">PASSEGGERO N° 
    $i <input name=\"id_passeggero\" type=\"hidden\" value=\"$i\"></td>
      </tr>
      <tr>
        <td width=\"150\" bgcolor=\"#FFFFFF\">Nome:</td>
        <td bgcolor=\"#FFFFFF\"><input name=\"nome\" type=\"text\"></td>
      </tr>
      <tr>
        <td bgcolor=\"#FFFFFF\">Cognome:</td>
        <td bgcolor=\"#FFFFFF\"><input name=\"cognome\" type=\"text\"></td>
      </tr>
      <tr>
        <td bgcolor=\"#FFFFFF\">Codice fiscale: </td>
        <td bgcolor=\"#FFFFFF\"><input name=\"codice_fiscale\" type=\"text\"></td>
      </tr>
      <tr>
        <td bgcolor=\"#FFFFFF\">Data di nascita: </td>
        <td bgcolor=\"#FFFFFF\"><input name=\"data_nascita\" type=\"text\"></td>
      </tr>
    </table>

    "
    );
    }
    ?>

    mentre questa e' la pagina che dovrebbe inviare i dati:
    conferma_prenotazione.php
    Codice PHP:
    <?php
    include("config/config.php");

    $connessione =  @mysql_connect("$host","$db_user","$db_pass");
    $db = @mysql_select_db($db_nome$connessione);

    $id_prenotazione=$_POST['id_prenotazione'];
    $sesso=$_POST['sesso'];
    $indirizzo=$_POST['indirizzo'];
    $indirizzo=stripslashes($indirizzo);
    $provincia=$_POST['provincia'];
    $provincia=stripslashes($provincia);
    $comune=$_POST['comune'];
    $comune=stripslashes($comune);
    $cap=$_POST['cap'];
    $nazionalita=$_POST['nazionalita'];
    $nazionalita=stripslashes($nazionalita);
    $telefono_fisso=$_POST['telefono_fisso'];
    $telefono_mobile=$_POST['telefono_mobile'];
    $email=$_POST['email'];
    $fax=$_POST['fax'];
    $numero_persone=$_POST['numero_persone'];
    $costo_totale=$_POST['costo_totale'];
    $pagamento=$_POST['pagamento'];
    $codice_agenzia=$_POST['codice_agenzia'];

    $id_passeggero=$_POST['id_passeggero'];
    $nome=$_POST['nome'];
    $cognome=$_POST['cognome'];
    $cognome=stripslashes($cognome);
    $codice_fiscale=$_POST['codice_fiscale'];
    $data_nascita=$_POST['data_nascita']; 

    $sql "insert into prenotazioni
    (id_prenotazione, id_passeggero, nome, cognome, codice_fiscale, data_nascita, sesso, indirizzo, provincia, comune, cap, nazionalita, telefono_fisso, telefono_mobile, email, fax, numero_persone, costo_totale, pagamento, codice_agenzia, data_prenotazione)
    values
    (NULL,\"
    $id_passeggero\",\"$nome\",\"$cognome\",\"$codice_fiscale\",\"$data_nascita\",\"$sesso\",\"$indirizzo\",\"$provincia\",\"$comune\",\"$cap\",\"$nazionalita\",\"$telefono_fisso\",\"$telefono_mobile\",\"$email\",\"$fax\",\"$numero_persone\",\"$costo_totale\",\"$pagamento\",\"$codice_agenzia\",NOW())";

    $risultato = @mysql_query($sql$connessione)
    or die (
    mysql_errno() . ": " mysql_error());

    for (
    $i 1$i<=$id_passeggero$i++)
    {
    $sql_passeggeri "insert into passeggeri
    (id_prenotazione, id_passeggero, nome, cognome, codice_fiscale, data_nascita)

    values

    (\"
    $id_prenotazione\",\"$i\",\"$nome\",\"$cognome\",\"$codice_fiscale\",\"$data_nascita\")";

    $risultato_passeggeri = @mysql_query($sql_passeggeri$connessione)
    or die (
    mysql_errno() . ": " mysql_error());
    }
    echo 
    $sql_passeggeri;
    ?>
    Dove sbaglio?
    Mai dire Mai

  8. #8
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    beh.. sbagli nella raccolta dati (il form) e nella conseguente elaborazione...

    innanzitutto per fare quello che ti serve non è necessario specificare quanti passeggeri ha scelto l' utente... ti faccio un semplice esempio pratico, poi applicalo alle tue necessita

    il form pe rla raccolta dati
    Codice PHP:
    <form name="pippo" method="POST" action="raccolta.php">
    <?php
    foreach ($num=1$num <=$num_passeggeri$num ++) // nota le parentesi quadre che generano un array dei valori per php
      
    {
      echo 
    "PASSEGGERO $num
    "
    ;
      echo 
    'nome<input type="text" name="nome[]">
    '
    ;
      echo 
    'cognome<input type="text" name="cognome[]">
    '
    ;
      echo 
    'eta<input type="text" name="eta[]">
    '
    ;
      }
    ?>
    <input type="submit" name="invia" value="invia">
    </form>

    la pagina raccolta.php che riceve i dati
    Codice PHP:
    <?php
    echo "<pre>";print_r($_POST);echo "</pre>"// vedi come ti arriva il tuo form.. da questa visualizzazione potrai capire a fondo il concetto base di tutta la struttura che ti propongo

    // connessione al db

    $queries=array(); // un array vuoto destinato a raccogliere le query in sequenza
    foreach ($_POST['nome'] as $key=>$nome// per ogni elemento dell' array (ho usato $_POST['nome'] ma poteva essere uno qualsiasi dei dati ripetuti, non ha importanza)
      
    {
      
    $nome=mysql_escape_string(trim($_POST['nome'][$key])); // un pò di pulizia.. :D
      
    $cognome=mysql_escape_string(trim($_POST['cognome'][$key]));
      
    $eta=mysql_escape_string(trim($_POST['eta'][$key]));  

      
    $queries[]="insert into passeggeri (nome,cognome,eta) values ('$nome','$cognome','$eta');"// ho creato la query che sarà inserita nell' array $queries
      
    }

    foreach (
    $queries as $query)
      {
      
    mysql_query ($query) or die('query:'.$query.'
    '
    .mysql_error());
      }
    spero di esserti stato utile

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  9. #9
    ma sicuro di usare il foreach? io con il for riesco a crearmi i campi che dico io senza problemi, assegnandogli anche un id_passeggero con i++, il problema e' l'inserimento nel db...
    Mai dire Mai

  10. #10
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    sono sicuro del del foreach come sono sicuro del fatto che ci vuole il sale nell' acqua degli spaghetti

    m aalmeno hai provato a fare qualcosa?
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

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.