Visualizzazione dei risultati da 1 a 9 su 9

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    in un foreach con input dovresti usare come name un "array" altrimenti ti verrà postato solo l'ultimo input in quanto avranno tutti lo stesso nome.
    Inoltre dovresti correlare il checkbox con il campo hidden in quanto i campi hidden verranno tutti iniviati mentre i checkbox solo quelli selezionati.
    Quindi

    Codice PHP:

    $i 
    0;
    foreach(
    $data as $row): 
      ...
      <
    input type="checkbox" name="selected[]" value="<php echo $i >" >
       <
    input type="hidden" name="esempio[<php echo $i >]"  value="$row['name'], $row['surname'] , $row['address], ecc ,ecc" >
      ...
      
    $i++;
     endforeach; 
    Nel createcsv.php
    Codice PHP:
    //per ogni checkbox
    foreach($_POST['selected'] as $i){
        
    $arr explode(','$_POST[esempio][$i]);

    Ora, io non ti consiglierei cmq di procedere in questo modo per i seguenti motivi:
    1. Ogni volta fai il post di ogni riga (esempio[]) indipendentemente se il checkbox è checked o meno.
    ricorda che ci sono limiti sul numero di input inviabili da una form (max_input_vars) e la dimensione massima del post (post_max_size)
    che di default sono alti (3000 e 2mb) ma possono essere cambiati dal hosting
    2. i valori che metti nel value (indirizzo, nome, cognome ) potrebbero avere caratteri che ti vanno a "rompere" il codice html. per esempio
    se address contiene " (doppi apici) o il carattere che usi per separare i valori (la virgola in questo caso), etc

    Per questo ti avevo consigliato di metter nel form solo l'indice di riga del json ed usarlo a mo di database

    PS non mi prende i tag di php, quindi ho messo solo "<php"

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    48
    Quote Originariamente inviata da boots Visualizza il messaggio
    in un foreach con input dovresti usare come name un "array" altrimenti ti verrà postato solo l'ultimo input in quanto avranno tutti lo stesso nome.
    Inoltre dovresti correlare il checkbox con il campo hidden in quanto i campi hidden verranno tutti iniviati mentre i checkbox solo quelli selezionati.
    Quindi

    Codice PHP:

    $i 
    0;
    foreach(
    $data as $row): 
      ...
      <
    input type="checkbox" name="selected[]" value="<php echo $i >" >
       <
    input type="hidden" name="esempio[<php echo $i >]"  value="$row['name'], $row['surname'] , $row['address], ecc ,ecc" >
      ...
      
    $i++;
     endforeach; 
    Nel createcsv.php
    Codice PHP:
    //per ogni checkbox
    foreach($_POST['selected'] as $i){
        
    $arr explode(','$_POST[esempio][$i]);

    Ora, io non ti consiglierei cmq di procedere in questo modo per i seguenti motivi:
    1. Ogni volta fai il post di ogni riga (esempio[]) indipendentemente se il checkbox è checked o meno.
    ricorda che ci sono limiti sul numero di input inviabili da una form (max_input_vars) e la dimensione massima del post (post_max_size)
    che di default sono alti (3000 e 2mb) ma possono essere cambiati dal hosting
    2. i valori che metti nel value (indirizzo, nome, cognome ) potrebbero avere caratteri che ti vanno a "rompere" il codice html. per esempio
    se address contiene " (doppi apici) o il carattere che usi per separare i valori (la virgola in questo caso), etc

    Per questo ti avevo consigliato di metter nel form solo l'indice di riga del json ed usarlo a mo di database

    PS non mi prende i tag di php, quindi ho messo solo "<php"
    Grandissimo grazie, funziona.
    ero arrivato al fatto che ci voleva nel name il formato array, ma mi ingrippavo sul checkbok il quale aveva di bisogno un value per differenziarlo dagli altri file.

    Allora il programmino gira in localhost, crea lo stesso problemi file massimi inviabili? Nel caso dovrei cambiare il file.ini in xampp

    si alcuni campi portano i doppi apici, potrei pulire la stringa prima che diventi array solo dalle virgolette?.

    Il tuo secondo approccio invece sarebbe stato quello invece di mettere tutto il JSON in un input hidden.
    In questo caso nel createcsv.php dopo aver ricevuto il post e fatto il JSON decode, come si sarebbe dovuto fare poi?

    Grazie tanto, saluti
    Ultima modifica di phelps; 06-06-2021 a 09:25

  3. #3
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Quote Originariamente inviata da phelps Visualizza il messaggio
    Allora il programmino gira in localhost, crea lo stesso problemi file massimi inviabili? Nel caso dovrei cambiare il file.ini in xampp
    Dovresti vedere...se non superi i limiti puoi lasciare tutto cosï. Un centinaio di input non dovrebbero crearti problemi (a parte rendere il tutto più pesante)

    Quote Originariamente inviata da phelps Visualizza il messaggio
    si alcuni campi portano i doppi apici, potrei pulire la stringa prima che diventi array solo dalle virgolette?.
    Potresti anche provare a fare una codifica base64 e poi decodificare il tutto:

    Codice PHP:
    $value64 base64_encode($row['name'] .','$row['surname'] .','$row['address].','. ecc ,ecc');
    <
    input type="hidden" name="esempio[<php echo $i >]"  value="<php echo $value64 >" >

    // createcsv.php
    $arr explode(','base64_decode($_POST[esempio][$i])); 
    per� andrebbe provato e non risolverebbe il problema del carattere che usi come separatore(magari al posto della virgola potresti usare un carattere meno usato es #, $ o una coppia tipo <>)

    Quote Originariamente inviata da phelps Visualizza il messaggio
    Il tuo secondo approccio invece sarebbe stato quello invece di mettere tutto il JSON in un input hidden.
    In questo caso nel createcsv.php dopo aver ricevuto il post e fatto il JSON decode, come si sarebbe dovuto fare poi?
    Il file lo salvi sul server, in hidden solo il nome:
    Codice PHP:
    $file_name '<qualcosa>.json';
    file_put_contents('<path>/'.$file_name$data);
    $data json_decode($datatrue);

    ...

    <
    form>
    <
    input type="hidden" value="<$filename>" name="file_json">
    ...
    $i 0;
    foreach(
    $data as $row): 
      ...
      <
    input type="checkbox" name="selected[]" value="<php echo $i >" >
      
    // Non ti serve il campo dei dati
      
    $i++;
     endforeach;  


    //nel createcsv.php

    $data json_decode(file_get_contents('<path>./'.$_POST['file_json']), true);

    foreach(
    $_POST['selected'] as $i){
        
    $arr $data[$i];

    Pi� o meno cosï...forse c'è qualche errore, ma la logica è quella: ti porti dietro solo l'indice del file json e non i dati
    Ultima modifica di boots; 06-06-2021 a 13:08

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.