Visualizzazione risultati 1 fino 7 di 7

Discussione: Parse string in variabile globale

  1. #1
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito Parse string in variabile globale

    Buongiorno.
    Un form in ajax mi invia una stringa di questo tipo:
    Codice:
    abc=123&def=456&ghi=789
    Adesso vorrei che "abc", "def" e "ghi" fossero passate ad uno script secondario come variabili $_POST quindi ho pensato di utilizzare la funzione parse_str in questo modo:

    Codice PHP:
    $ajax_data = filter_input(INPUT_POST, 'ajax_req');
    parse_str($ajax_data, $_POST);
    Questi esempi restituiscono correttamente i valori:
    Codice PHP:
    echo $_POST['abc'];

    var_dump($_POST);
    Mentre se eseguo un ulteriore filter_input non va:
    Codice PHP:
    echo filter_input(INPUT_POST, 'abc', FILTER_SANITIZE_NUMBER_INT);
    Come mai?
    Apprezzi l'aiuto? Offrimi un caffè!

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Tralasciando se invi i dati urlencodati con jquery e invii questo
    Codice:
    abc=123&def=456&ghi=789
    il codice dovrebbe essere questo (per il primo script)EDIT:Ho effettuato un invio da un form in php
    Codice PHP:
    <?php
    $trans
    = array('+' => '', '-' => '');
    $ajax_data='abc='.strtr(filter_input(INPUT_POST, 'abc',FILTER_SANITIZE_NUMBER_INT ),$trans);
    $ajax_data.='&def='.strtr(filter_input(INPUT_POST, 'def',FILTER_SANITIZE_NUMBER_INT ),$trans);
    $ajax_data.='&ghi='.strtr(filter_input(INPUT_POST, 'ghi',FILTER_SANITIZE_NUMBER_INT ),$trans);
    echo(
    $ajax_data); // Stampo a titolo di debug
    parse_str($ajax_data, $dati);
    print_r($dati, $ajax_data); //quando arriva qui non stampa più nulla.
    ?>
    preciso subito che non funziona dopo che finisce da parse_str(). $_POST è una matrice multidimensionale autoglobale non una variabile! filter_input() come secondo parametro accette una stringa, pero esiste filter_input_array() per gli array. Spero che qualcuno porti buone nuove. edit tolgo pure i caratteri + e -.perché fanno parte di un intero con segno, inoltre per per essere un intero si deve ricontrollare perché 010 non è un intero ma numerico. Lo scrivo a titolo informativo perchi leggera
    Ultima modifica di darbula : 20-09-2015 alle ore 00.36.04

  3. #3
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Penso che quella che mi hai illustrato sia una soluzione alquanto sporca e troppo piena di codice inutile. Il decode delle URL può andar fatto con urldecode() mentre il filtro del parse con un ciclo :/
    Apprezzi l'aiuto? Offrimi un caffè!

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,148

    Predefinito

    Non ho capito quel che vorresti fare: vorresti recuperare i valori da $_POST, assicurarti che siano interi e riassegnare $_POST?

    Assegnare valori a $_POST è "brutto" e tra l'altro ho provato e la filter_input(INPUT_POST, ...) non li legge. Del tipo:
    Codice PHP:
    #vera richiesta ?abc=123
    echo filter_input(INPUT_POST, 'abc', FILTER_SANITIZE_NUMBER_INT); //funziona
    Codice PHP:
    $_POST['abc'] = 123; //questo è un po' quel che fa la parse_str() nel tuo caso
    echo filter_input(INPUT_POST, 'abc', FILTER_SANITIZE_NUMBER_INT); //non funziona
    var_dump($_POST['abc']); //funziona, probabilmente lo vede come variabile "normale".
    Ciao!

  5. #5
    Guest

    Predefinito

    iO NON HO CAPITO , Non so se ho capito bene, ma tu hai una query_string cioè quello che tu hai postato è una query string(abc=123&def=456&ghi=789) che tu non puoi avere in post ma in get ricavare da $_SERVER['QUERY_STRING'] come ti fanno a funzionare le prime due righe di codice è un mistero.Le variabili le hai in post o in get inviate da Ajax?
    Non ti va la filter sanitize string ma non ti vanno nemmeno le prime due righe guarda bene il var_dump $_POST se ti funziona non ti funziona per le prime due righe di codice.Quello che hai scritto è una semplice query che ricavi per eesempio usando $.param({});

  6. #6
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    filter_input() legge lo standard input, il filling di $_POST è un'elaborazione successiva: utilizza piuttosto filter_var().

    Per chi non avesse chiaro cosa vuole ottenere, se ho ben capito ha in input POST la chiave ajax_req che rappresenta una querystring, della quale vuole il parsing intero del valore corrispondente alla chiave abc.

    Ciao!

  7. #7
    Guest

    Predefinito

    Quindi vuole verificare che sia un intero? ahh behh un'altra cosa VALIDATE_INT con filter var

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •