Problema acquisizione invio dati form

di il
3 risposte

Problema acquisizione invio dati form

Ciao ragazzi. Ho un problema nell'invio dei dati anzi piu che altro il problema è nell'acquisizione perchè penso l'invio sia giusto.
Questo è lo stralcio di codice
echo ("<div class=\"special\"><table><tr><td>
											<img src =$img alt=\"$img\" width=\"100\"></td><td class=\"special1\">
											<ul>
											<li>Codice: $codicevalue</li>
											<li>Tipo: $tipobevanda</li>
											<li>Marchio: $nomemarchio </li>
											<li>Materiale: $tipomateriale </li>
											<li>Litri cad.: $litri L</li>
											<li>Prezzo: $prezzovalue (per lotto)</li>
											</ul></td><td class=\"special\"><div style=\"float:right; margin-top=\"0px\">
											<form action=\"clientiprodotti.php\" method=\"POST\">
											<input name=\"peso\" type=\"text\" placeholder=\" numero di lotti\" size=\"20\" maxlength=\"10\" />	
											</form>
										[<a href=\"cawrr_insert.php?cod=".$codicevalue."&peso={$_POST['peso']}\" onclick=\"aggiunto()\">aggiungi al carrello</a>]</div></td></tr></table></div>
											");
come faccio ad acquisire il peso da input per poi mandarlo col metodo get ? dove sbaglio? Il codice lo riesco...

3 Risposte

  • Re: Problema acquisizione invio dati form

    Non puoi mettere un form all'interno di una tabella.
    Hai 3 soluzioni:
    1. Metti tutta la tabella all'interno di un form, e usi più submit e un'opportuna numerazione dei campi appartenenti ad ogni form "virtuale", in modo tale che invii tutto ma lato server riesci a isolare i campi desiderati. In tal caso, occhio che php di default non memorizza più di 1000 campi nel vettore $_POST (c'è anche un vincolo sulla dimensione totale in byte, ma nel caso di input testuali solitamente prevale il limite di 1000 campi);
    2. Manipoli il dom con javascript. In tal caso credo che non ti serva neanche il tag form, metti direttamente l'input e un button (ma non sono sicuro);
    3. Fai come phpmyadmin: fai comparire i form "in sovrimpressione", ovvero fuori dal tag table ma settando position:absolute nel css e calcolando in qualche modo gli offset verticali e orizzontali.

    ciao
  • Re: Problema acquisizione invio dati form

    Di javascript conosco poco niente... il primo metodo se metto la form fuori dalla tabella non funziona lo stesso...
    echo (" <form action=\"clientiprodotti.php\" method=\"POST\">
    <div class=\"special\"><table><tr><td>
    <img src =$img alt=\"$img\" width=\"100\"></td><td class=\"special1\">
    <ul>
    <li>Codice: $codicevalue</li>
    <li>Tipo: $tipobevanda</li>
    <li>Marchio: $nomemarchio </li>
    <li>Materiale: $tipomateriale </li>
    <li>Litri cad.: $litri L</li>
    <li>Prezzo: $prezzovalue (per lotto)</li>
    </ul></td><td class=\"special\"><div style=\"float:right; margin-top=\"0px\">
    <input name=\"peso\" type=\"text\" placeholder=\" numero di lotti\" size=\"20\" maxlength=\"10\" />
    [<a href=\"cawrr_insert.php?cod=".$codicevalue."&peso={$_POST['peso']}\" onclick=\"aggiunto()\">aggiungi al carrello</a>]</div></td></tr></table></div></form>
    ");
    non dà nessun errore però non acquisisce i valori da input e di conseguenza non me li invia con il metodo get..
  • Re: Problema acquisizione invio dati form

    Ora che ho rivisto il codice ho notato un errore molto più grave: tu hai un form che ti potrebbe inviare il peso alla pagina clientiprodotti.php (immagino sia la stessa pagina della tabella), però all'interno del form non hai nessun input di tipo submit, bensì un link che vorrebbe passare a un'altra pagina come parametro get il peso ottenuto con post.
    Ebbene, ciò non può funzionare, perché per inizializzare la variabile $_POST['peso'] devi inviare una richiesta http di tipo post alla pagina contenente quella variabile, e ciò si fa tipicamente mettendo un submit nel form che contiene il campo peso (verrà fuori un pulsante che l'utente dovrà cliccare per inviare il dato.

    In definitiva, per risolvere questo problema rimuovi il link e fai puntare l'action del form a cawrr_insert.php, passando il codice dell'articolo o come parametro get nell'action stessa o aggiungendo un campo hidden nel form (1 per ogni articolo). Inserisci poi un submit per ogni articolo.
    A questo punto, cliccando sul submit l'utente verrà portato nella pagina cawrr_insert.php, per cui se vuoi farlo tornare subito alla lista usi un header('Location: clientiprodotti.php').

    Oltre a ciò, per far funzionare tutto devi aggiungere quello a cui accennavo nell'altro messaggio, ovvero la numerazione dei name dei campi peso e dei value dei submit relativi a ciascun articolo, mentre i name dei submit saranno tutti uguali.
    Quindi avrai, ad esempio:
    peso_1 - invio - Invio_1
    peso_2 - invio - Invio_2
    ecc.
    In questo modo, dal momento che verranno inviati tutti i campi peso ma solo il submit cliccato, potrai recuperare il numero dell'articolo con substr($_POST['invio'], 6) (verifica che substr sia proprio così), e usarlo per leggere il peso desiderato.

    Migliorie:
    1. Potresti sostituire il numero col codice dell'articolo;
    2. Per evitare che il numero (o codice) sia visibile all'utente nel caso del submit, mettilo nel name del submit anziché nel value. A questo punto trova le funzioni più adatte per prendere il numero dalla chiave di $_POST['invio_numero'].
Devi accedere o registrarti per scrivere nel forum
3 risposte