Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    HELP: variabili che si perdono nei form (lungo)

    Ciao a tutti, avrei bisogno di voi per capire dove sbaglio, le ho provate tutte.... suppongo ci sia un sistema di gestione dei $_POST che continua a sfuggirmi...
    Il codice che vi riporto sotto non dovrebbe fare nulla di complicato (scusate la formattazione ma non sono riuscita a incollarlo come molti di voi riescono a fare) :
    all'inizio dello script ho enunciato

    $id = $_POST["TxID"];
    $change = $_POST['change'];
    ---------------------------------

    $id = $_POST["TxID"] è semplicemente un input form che accetta una stringa (un indirizzo email)
    cui a seguire c'è un controllo del formato del dato immesso con la funzione "controllaMail" e poi parte la query per la ricerca della mail nel database. Se la mail non è già contenuta (il codice l'ho omesso) la aggiunge semplicemente e il tutto si ferma. Se la mail invece viene trovata all'interno del database allora viene presentata a video con tutti suoi parametri (STATO, WANT_DELETE, ecc ecc che sono tutti dei controlli che a me servono e che possono essere impostati o =1 o =0 - attivo/disattivato). Dopodichè viene semplicemente chiesto se si vuol cambiare uno dei parametri dell'indirizzo in questione con un altro form "$change = $_POST['change']" - In pratica parte uno switch con 5 case a seconda della scelta e lo switch funziona perfettamente. Come si vede, nel case 4, (gli altri li implementerò se e quando capirò dove sta l'errore) chiedo di aggiornare una delle colonna del record della mail in questione. Purtroppo pero', a quel punto, il valore "$id = $_POST["TxID"];" si è perso e php non mi aggiorna il database perchè non trova più il record di partenza!!
    Da notare che se allo stesso case 4 faccio partire questa query :
    "$sqlquery = "insert into nl_mailing_list values ('', '$id','1','','','')";
    il database viene perfettamente aggiunto un nuovo record con tutti i suoi campi tranne che per l'indirizzo mail di cui si è ormai persa la variabile.....
    Chiedo scusa per la lunghezza, ma sono 10 giorni che lavoro su questa cosetta, sto cercando di imparare, ma davvero non ci salto fuori.....
    Grazie a chiunque vorrà darmi una dritta
    Alessandra



    °°°°°°°°°°°°°°°°°°°°°°°° INIZIO CODICE INTERESSATO °°°°°°°°°°°°°°°°°°°°°°°°
    <?php
    if(isset($id)) {
    if(controllaMail($id)) {
    $sqlquery = "SELECT * FROM $table WHERE email = '$id' ";
    $result = mysql_query($sqlquery) or die ("Query fallita: ".mysql_error());

    if($result) {
    if(mysql_num_rows($result) != 0) {
    while
    ($row = mysql_fetch_row($result)) {?>
    <div class="text-red"><?php echo "Indirizzo email gi&agrave; presente con i seguenti attributi:

    ";?>
    <div class="text-mail"><?php printf("$row[1]
    "); ?></div>
    <?php
    printf("STATO (attivato/disattivato): $row[2]
    ");
    printf("WANT_DELETE (ha chiesto la cancellazione): $row[3]
    ");
    printf("FAILURE (delivery failure): $row[4]
    ");
    printf("SELF_REQUEST (ha chiesto l'iscrizione): $row[5]
    ");?>
    </div>
    <?php
    }
    echo "
    Vuoi modificare uno o pi&ugrave; attributi dell'indirizzo email?";?>

    <form name="change" method="post" action="">


    Menu:

    <select name="change">
    <option value="0">*** Nessuna modifica ***</option>
    <option value="1">STATO</option>
    <option value="2">WANT_DELETE</option>
    <option value="3">FAILURE</option>
    <option value="4">SELF_REQUEST</option>
    </select>
    <input type="submit" name="Submit" value="Invia">
    </p>
    </form>
    <?php
    echo "
    DEVI ANCORA EFFETTUARE UNA SCELTA";
    echo('
    ');
    echo('Change: ' .$change);
    echo('
    ');
    echo('Result: ' .$id);

    mysql_free_result($result);

    } else {
    $id = trim($id);
    $sqlquery = "insert into nl_mailing_list values ('', '$id','1','','','')";
    $result = mysql_query($sqlquery) or die ("Query fallita: ".mysql_error()); ?>

    <div class="text-green"><?php echo "L'indirizzo '$id' &egrave; stato aggiunto correttamente al database.";
    echo "
    Per una nuova ricerca inserire un nuovo indirizzo oppure andare su \"Nuovo controllo\""; ?>
    </div>
    <?php
    }
    return;
    }
    }
    echo "
    Prova a inserire un nuovo indirizzo.";
    return;
    }

    if(isset($change)) {

    switch ($change) {
    case 0:
    echo "Hai scelto: 0 cio&egrave; *** Nessuna modifica ***";
    break;
    case 1:
    echo "Hai scelto 1. STATO dell'indirizzo mail &egrave; stato aggiornato";
    break;
    case 2:
    echo "Hai scelto: 2 cio&egrave; WANT_DELETE";
    break;
    case 3:
    echo "Hai scelto: 3 cio&egrave; FAILURE";
    break;
    case 4:
    $sqlquery = "UPDATE nl_mailing_list SET self_request = 4 WHERE email = '$id' ";
    $result = mysql_query($sqlquery) or die ("Query fallita: ".mysql_error());
    echo "Hai scelto: 4 cio&egrave; SELF_REQUEST";
    break;
    }
    }

    ?>

  2. #2
    up

  3. #3
    Ogni form e' un'entita a se' stante, quindi form eseguiti successivamente non hanno memoria di cio' che e' successo prima. In altre parole, nel tuo secondo form (quello "change") devi specificare l'id che vuoi trasmettere esplicitamente tramite qualcosa come
    Codice PHP:
    <input type="hidden" name="change_id" value="<?php echo $id?>">
    infatti se noti, in questo pezzo (che e' il form completo):
    Codice PHP:
    <form name="change" method="post" action="">
        

    Menu:

        <
    select name="change">
            <
    option value="0">*** Nessuna modifica ***</option>
            <
    option value="1">STATO</option>
            <
    option value="2">WANT_DELETE</option>
            <
    option value="3">FAILURE</option>
            <
    option value="4">SELF_REQUEST</option>
        </
    select>
        <
    input type="submit" name="Submit" value="Invia">
        </
    p>
    </
    form
    non e' indicato l'id da nessuna parte.

  4. #4
    Purtroppo non funziona lo stesso, ho modificato il codice così

    Codice PHP:
    <form name="change" method="post" action="">                               


    Menu:
                                     
    <select name="change">                                   
    <option value="0">*** Nessuna modifica ***</option>                                   
    <option value="1">STATO</option>                                   
    <option value="2">WANT_DELETE</option>                                   
    <option value="3">FAILURE</option>                                   
    <option value="4">SELF_REQUEST</option>                                 
    </select>                                 
    <input type="hidden" name="change_id" value="<?php echo $id?>">                               
    <input type="submit" name="Submit" value="Invia">                               
    </p>                             
    </form>
    come si vede nel codice successivo, al case 4 lancio una query per aggiornare uno dei campi del record della mail trovata con il form precedente ($id). La query viene eseguita correttamente ma solo in teoria perchè in pratica, avendo perso la variabile col nome della mail non riesce ad aggiornare di fatto l'indirizzo mail, pur non dando errori...

    Codice PHP:
    if(isset($change)) { 
    switch (
    $change) { 
    case 
    0: echo "Hai scelto: 0 cio&egrave; *** Nessuna modifica ***"
    break; 
    case 
    1
    echo 
    "Hai scelto 1. STATO dell'indirizzo mail &egrave; stato aggiornato"
    break; 
    case 
    2
    echo 
    "Hai scelto: 2 cio&egrave; WANT_DELETE"
    break; 
    case 
    3
    echo 
    "Hai scelto: 3 cio&egrave; FAILURE"
    break; 
    case 
    4:  $sqlquery "UPDATE nl_mailing_list SET self_request = 4 WHERE email = '$id' ";  
    $result mysql_query($sqlquery) or die ("Query fallita: ".mysql_error()); 
    echo 
    "Hai scelto: 4 cio&egrave; SELF_REQUEST"; break; 


    non riesco proprio a capire eppure immagino che per molti di voi sarà di una banalità sconcertante

    Qualche altro suggerimento per favore?
    Grazie
    Alessandra

  5. #5
    Ho dato il nome "change_id" come esempio, comunque qualunque nome dai a quell'input hidden, poi lo devi estrarre da $_POST:
    Codice PHP:
    $id $_POST['change_id']; 

  6. #6
    Originariamente inviato da k.b
    Ho dato il nome "change_id" come esempio, comunque qualunque nome dai a quell'input hidden, poi lo devi estrarre da $_POST:
    Codice PHP:
    $id $_POST['change_id']; 
    Mamma se sono impedita, scusami......
    Non lo avevi specificato e io, non essendo proprio una cima in php non avevo estratto la variabile...
    adesso funziona perfettamente, grazie grazie grazie 1000 k.b.

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.