• User Attivo

    Ciao,
    non ho riletto tutti i post, sto guardando solo gli ultimi... vediamo se riassumo bene

    Hai eseguito la query:

    update rubrica set promotore='' where id='7'
    

    ed il risultato è stato:
    Righe interessate: 0 (La query ha impiegato 0.0002 sec)

    Hai eseguito la query:

    SELECT * FROM rubrica where id='7' 
    ```ed il risultato è stato:
    Visualizzazione record 0 - 0 (1 Totali, La query ha impiegato 0.0003 sec)
     
    Quindi, ricapitolando, il record con ID 7 è presente nel database e viene trovato, ma la query di aggiornamento non sembra aggiornarlo.
     
    Domanda:
    Che valore ha il campo "promotore" per il record con ID=7 ?
     
    Perchè mysql_affected_rows() ti segnala il numero di record effettivamente modificati. 
    Ovvero, se modifici un record inserendo per i campi valori che ha già, nessuna riga viene modificata e il risultato è appunto 0.
     
    Alessandro

  • User

    Grazie Magicale per il tuo interessamento.
    Purtroppo esiste questo problema.
    Se tutti i campi del form vengono riempiti, l'inserimento dei dati nel database funziona benissimo.
    Il problema si ha quando si tenta di modificare uno qualsiasi dei dati che hai visto.
    A quel punto il risultato è che non viene modificato quel campo da te digitato nuovamente (cioè per esempio voglio cambiare il nome dell'azienda perchè ha cambiato ragione sociale) ma tutti i valori presenti in quella riga (cioè in quel ID) vengono cancellati .... tranne il numero di ID.

    Quindi se tenti di inserire nuovamente i dati, anche parzialmente, non si ottiene alcun aggiornamento.

    Pertanto, per rispondere alla tua domanda, non c'è alcun valore nel campo "promotore" .... ma neanche in tutti gli altri.


  • User Attivo

    Ciao,
    ho creato sul mio db locale una tabella con gli stessi campi. Ho creato una pagina copiando l'ultima versione del codice che ti ha postato Thedarkita e l'ho testata. L'unica cosa che posso dirti è che accade quanto presumevo: funziona tutto correttamente.

    Non so che altro dirti. L'unico controllo che mi viene di suggerirti è fare un
    [php]var_dump($_REQUEST);[/php]
    subito prima o dopo dell'echo della query. Giusto per verificare che i dati arrivino correttamente alla pagina.

    Alessandro


  • User

    Alessandro,
    grazie per il tuo aiuto.
    Non riesco a capire perchè a me non funziona.
    Ho aggiunto la riga di codice che hai suggerito e questo è il risultato:

    update rubrica set promotore='', nome_azienda='', settore='', città='', indirizzo='', nome_contatto='', telefono='', email='', sede_estero='', azioni='', progressione='', risultato_finale='', note='' where id='8'1array(16) { ["id"]=> string(1) "8" ["Promotore"]=> string(5) "pippo" ["Nome_azienda"]=> string(5) "Apple" ["Settore"]=> string(11) "Informatica" ["Città"]=> string(9) "Cupertino" ["Indirizzo"]=> string(15) "1 Infinite Loop" ["Nome_contatto"]=> string(10) "Steve Jobs" ["Telefono"]=> string(16) "001 212 555 4433" ["Email"]=> string(15) "[email protected]" ["Sede_estero"]=> string(14) "California USA" ["Azioni"]=> string(8) "azione 1" ["Progressione"]=> string(8) "azione 2" ["Risultato_finale"]=> string(8) "azione 3" ["Note"]=> string(4) "note" ["confirm"]=> string(1) "1" ["PHPSESSID"]=> string(32) "a7157b78fcd4e275f0c13751de9ca0fa" } Modificati: 0 records

    Come vedi i dati che ho messo nel form ci sono ma nell'output non si vede nulla e comunque ciò che ho postato appena qui spra è un errore ....
    guardate, io vi ringrazio ancora per la pazienza ma a questo punto mi affido alla vostra clemenza ....


  • User Attivo

    Beh... direi che almeno ora il problema è diventato evidente 😄

    L'inghippo è nei nomi dei campi della tabella.
    Li hai scritti con l'iniziale maiuscola e quando li recuperi con mysql_fetch_field() vengono letti esattamente come li hai scritti, ovvero con, appunto, l'iniziale maiuscola.
    Di conseguenza il name dei campi input ha l'iniziale maiuscola e quando li recuperi facendo ad esempio:
    [PHP]
    $promotore=$_REQUEST['promotore'];
    [/PHP]
    non viene letto alcun dato, perchè in realtà esso si trova in
    [PHP]
    $promotore=$_REQUEST['Promotore'];
    [/PHP]

    Hai due possibili modi per correggere:

    1. sul database: editare tutti i nomi dei campi della tabella togliendo l'iniziale maiuscola (è quello che ti consiglio di fare)
    2. sul codice php: modificare la lettura dei dati mettendo l'iniziale maiuscola alle chiavi dell'array $_REQUEST

    Alessandro


  • User

    FANTASTICO ALESSANDRO !!!
    Hai ragione!
    Ho sostituito le iniziali maiuscole con le minuscole nel database e funziona!
    Inoltre ho rimosso

    var_dump($_REQUEST);

    perchè altrimenti mi dava una risposta strana e finalemnte la tabella si aggiorna !!!

    YAHOOO!!!!! :vaiii::yuppi:

    Se posso approfittare della tua cortesia adesso vorrei risolvere gli ultimi due problemi e poi il risultato è perfetto:

    1. Alla pagina dove viene mostrata la tabella ci si arriva tramite una pagina di login dove bisogna inserire username e password.
      Purtroppo ci si accede anche digitando direttamente l'url di quella pagina, by-passando così la pagina di login.
      Domanda:
      è possibile fare in modo che se si digita direttamente l'url della pagina contenente la tabella, si abbia una risposta del tipo "Non sei autorizzato ad accedere direttamente a questa pagina. Clicca qui per fare il login" e rimandare l'utente obbligatoriamente alla pagina di login?
      Naturalmente se ci si arriva "una volta che hai già fatto il login" quella risposta non deve esserci...

    2. le caselle della tabella hanno una larghezza determinata dalla lunghezza del titolo.
      Per esempio, "nome_azienda" ha una casella più larga di "indirizzo" però l'indirizzo è solitamente più lungo di un nome di azienda.
      Ovviamente se al posto di "indirizzo" ci metto "indirizzo_della_azienda" la casella mi si allarga ma questo comporterebbe rifare il codice di parecchie pagine.
      Domanda:
      c'è modo di allargare le dimensione della casella senza dovere mettere mano al nome della casella stessa?

    Grazie ancora e confido ancora una volta nel tuo preziosissimo aiuto 😄


  • User Attivo

    Ciao,

    1. Sì. Puoi ad esempio memorizzare in una variabile di sessione il dato Loggato/NonLoggato e controll'arlo nelle pagine a cui puoi accedere solo dopo il login. Se in una di quelle pagine risulta non loggato fai u redirect alla pag di login.

    2. Non ho capito a cosa ti riferisci con "casella"


  • User

    Grazie per la tua risposta Alessandro e scusa per il ritardo nella mia replica ma ero in ferie (ora sono purtroppo finite, sigh!).
    Ho provato a rispondere tramite il mio iPhone ma non funziona.

    In ogni caso:

    1. hai ragione... detta così ha un senso logico e a parole è semplice ma, come ho già premesso, non sono un mago del PHP ed è già tanto se sono arrivato a fare il codice di cui abbiamo parlato finora.
      Qualche suggerimento pratico? (ovvero ... ti sto chiedendo in modo spudorato se mi potresti dare il pezzo di codice adatto ...)

    2. per casella intendo quella che insieme alle altre formano la griglia dell'output, dove sono contenuti tutti i dati inseriti tramite il form.
      Ho notato che, a parte quella relativa all'indirizzo e-amil del cliente, per tutte le altre colonne della griglia la larghezza è determinata dalla lunghezza del titolo.
      Sarebbe invece possibile determinare la larghezza indipendentemente dalla lunghezza del titolo?


  • User

    Alessandro,
    ancora in vacanza?
    Non credo ..... hai qualche risposta per me, per favre?


  • User Attivo

    Ciao,
    mi ero perso il tuo post di agosto.

    1. Tutte le pagine devono "iniziare" la sessione prima di qualsiasi tipo di output.
      [php]
      session_start();
      [/php]

    Quando effettui il login salvi una o più variabili di sessione in con i dati che ti possono servire.
    Ad esempio:
    [php]
    $_SESSION['user_logged'] = true;
    $_SESSION['user_id'] = ... ;
    ...
    [/php]

    All'inizio delle pagine "private" devi controllare le variabili di sessione verificando che l'utente sia loggato.
    Ad esempio:
    [php]
    <?php
    session_start();

    if (!$_SESSION['user_logged'])
    {
    //Utente non loggato. Redirect alla pagina di login o altra pagina
    header("Location: login.php");
    exit;
    }

    //Tutto il resto della pagina...
    ?>
    [/php]

    1. Resto confuso.. ma... se ti riferisci alle celle della tabella puoi dimensionarle con l'attributo width
    
    <td width="100"> ... </td>
    
    

    Alessandro