Visualizzazione risultati 1 fino 11 di 11

Discussione: Invio e-mail automatica

  1. #1
    bcprojects non è connesso Utente AlterBlog
    Data registrazione
    21-09-2017
    Messaggi
    46

    Predefinito Invio e-mail automatica

    Ciao a tutti, devo fare in modo che quando invio un modulo al database in automatico parta anche un email. Nel form ho un campo select di questo tipo:

    Codice PHP:
    select name="consulente" value="">
    <?
    $query
    = 'SELECT * FROM users ORDER BY nominativo';
    $result = mysql_query($query) or die (mysql_error());

    while (
    $row = mysql_fetch_assoc($result)) {

    echo
    '<option>'.$row['nominativo'].'</option>';

    }

    ?>
    </select>
    Il problema che ho è di far passare anche la variabile $row['email'] con la selezione, in modo da poterla passare allo script che invia la mail.. ho fatto vari tentativi ma non ci sono ancora riuscito.. qualche consiglio? grazie

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    L'etichetta mostrata per un <option> non necessariamente coincide con il suo valore: puoi mostrare il nominativo e al tempo stesso passare l'indirizzo email:
    Codice PHP:
    echo '<option value="' . $row['email'] . '">' . $row['nominativo'] . '</option>';
    A meno che tu non abbia necessità di passare entrambe le informazioni. In questo caso devi cambiare approccio: passa solo una chiave per la tabella users (ad esempio l'id) e lascia che sia lo script di destinazione a recuperare tutte le informazioni di cui ha bisogno dalla base di dati.

    E non usare mysql, che è deprecato: passa a mysqli o PDO.
    Ultima modifica di mzanella : 17-07-2018 alle ore 09.02.57

  3. #3
    bcprojects non è connesso Utente AlterBlog
    Data registrazione
    21-09-2017
    Messaggi
    46

    Predefinito

    La selezione riguarda esclusivamente il nominativo associato all'user scelto, allo stesso tempo pero devo far passare anche la variabile email dell'user scelto per poter mandare a quest'ultimo una notifica email. Se metto nel value di <option> la var email il risultato che ottengo è quello di andarmi a scrivere in tabella la mail anzichè il nominativo...

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    La selezione riguarda esclusivamente il nominativo associato all'user scelto, allo stesso tempo pero devo far passare anche la variabile email [...]
    Quindi la selezione non riguarda esclusivamente il nominativo, ma anche l'email associata.

    Se metto nel value di <option> la var email il risultato che ottengo è quello di andarmi a scrivere in tabella la mail anzichè il nominativo...
    Nel codice hai una SELECT e parli di invio di email: cosa c'entrano le scritture sulle tabelle?

    In effetti non capisco quale sia il problema

    I suggerimenti che do più spesso:


  5. #5
    bcprojects non è connesso Utente AlterBlog
    Data registrazione
    21-09-2017
    Messaggi
    46

    Predefinito

    il modulo va a creare un nuovo record in una tabella sql, che è diviso nelle colonne nome,cognome,città ecc.... fino ad arrivare ad un campo che si chiama "consulente". Questo campo dal form io lo compilo con un select dal quale scelgo il nome di un'utente registrato, e fin qui tutto ok, ho creato il record che mi interessa. Poi a parte, io voglio passare l'email associata a quell'utente che si è scelto dall'elenco per inviargli una notifica mail. Il problema cel'ho solo nel passare la variabile mail, se nel <select> io volessi mettere la mail anzichè il nominativo il problema non si porrebbe ma io in quell'elenco voglio far apparire solo il nominativo

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Ah, ecco!
    In questo caso torniamo a quanto ti dicevo all'inizio, ovvero devi passare una chiave (ad esempio l'id) come value dell'elemento <option>.

    In questo modo la pagina di destinazione potrà recuperare tutte le informazioni di cui ha bisogno dalla base di dati: nominativo, email e quant'altro.

    Altra cosa: se vuoi inserire in una tabella il riferimento ad un consulente (che è un "membro" della tabella users), non dovresti usare il suo nominativo, bensì la sua chiave primaria, altrimenti la tua base di dati non è più (terza?) forma normale.
    Se il tuo campo "nominativo" è già la chiave primaria (il che sembra improbabile) ovviamente questo problema non si pone.

    I suggerimenti che do più spesso:


  7. #7
    bcprojects non è connesso Utente AlterBlog
    Data registrazione
    21-09-2017
    Messaggi
    46

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Altra cosa: se vuoi inserire in una tabella il riferimento ad un consulente (che è un "membro" della tabella users), non dovresti usare il suo nominativo, bensì la sua chiave primaria, altrimenti la tua base di dati non è più (terza?) forma normale.
    Se il tuo campo "nominativo" è già la chiave primaria (il che sembra improbabile) ovviamente questo problema non si pone.
    La scelta di usare il nominativo è dettata dal fatto che quella tabella verrà usata per fare dei ricorrenti import/export di file csv..


    l'option mi permette di passare una cosa sola, se nel value metto l'id poi in tabella mi va stampare il numero invece del nominativo. se io ho:

    <select name="consulente" value="">
    <?
    $query = 'SELECT * FROM users';
    $result = mysql_query($query) or die (mysql_error());

    while ($row = mysql_fetch_assoc($result)) {

    echo '<option>'.$row['nominativo'].'</option>';

    }

    ?>
    </select>

    Quello che sta nell'option diventa la variabile $consulente=$_POST['consulente'];, quindi come faccio a passare anche un altra var? mi potresti fare un esempio di quello che intendi? Grazie :)

  8. #8
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    La scelta di usare il nominativo è dettata dal fatto che quella tabella verrà usata per fare dei ricorrenti import/export di file csv..
    Non è così che funziona una base di dati relazionale.
    Hai diverse entità in gioco, e queste sono o possono essere in relazione tra loro. In questo caso hai degli users e delle persone (qualunque sia il modo in cui hai chiamato la tabella). Queste persone hanno un consulente, che è uno degli users: una persona quindi è relazionata ad un user, non ad un nominativo.
    Non si tratta solo di un concetto filosofico, ci sono implicazioni concrete: supponiamo tu abbia almeno due users con lo stesso nominativo. Se nella tabella persone inserisci solo il nominativo, non puoi più identificare univocamente il consulente, e questo è un problema.
    Altra implicazione: si verifica un errore accidentale durante la scrittura dei dati nella tabella persone e, al posto del nominativo di uno degli users viene inserito un nome falso. Col tuo approccio sei fregato. Prima o poi -forse- ti accorgerai dell'errore se ispezioni manualmente i dati. Se anziché il nominativo usi, invece, un id (o una qualsiasi altra chiave), puoi avvalerti degli strumenti che la base di dati ti mette a disposizione per prevenire questi errori. Per la precisione si tratta di definire una chiave esterna.
    La normalizzazione delle basi di dati è una tecnica standard, non c'è motivo di non seguirla (anzi...).

    quindi come faccio a passare anche un altra var?
    Come già accennato, non puoi.

    mi potresti fare un esempio di quello che intendi?
    Pagina con il form:
    Codice PHP:
    <select name="consulente">
    <?php
    $query
    = "SELECT id, nominativo FROM users ORDER BY nominativo";
    $result = mysqli_query($conn, $query) or die (mysqli_error($conn));

    while (
    $row = mysqli_fetch_assoc($result)) {
    echo
    '<option value="' . $row['id'] . '">' . $row['nominativo'] . '</option>';
    }
    ?>
    </select>
    Pagina che riceve i dati:
    Codice PHP:
    ...
    $id_consulente = $_POST['consulente'];

    $query = "SELECT * FROM users WHERE id = $id_consulente";
    $result = mysqli_query($conn, $query) or die(mysqli_error($conn));
    $consulente = mysqli_fetch_assoc($result) or die("Wrong user ID");
    ...
    $corpo_email = "Il consulente è " . $consulente['nominativo']
    .
    ", il suo numero di telefono è " . $consulente['telefono']
    .
    " ed il suo numero di scarpe è " . $consulente['calzature'];
    ...

    $query = "INSERT INTO persone(nome, cognome, citta, consulente) VALUES('$nome', '$cognome', '$citta', $id_consulente)";
    mysqli_query($conn, $query) or die(mysqli_error($conn));
    ...
    Infine, nella pagina che esporta il CSV:
    Codice PHP:
    $query = "SELECT * FROM persone JOIN users ON persone.consulente = users.id";
    ...

    I suggerimenti che do più spesso:


  9. #9
    bcprojects non è connesso Utente AlterBlog
    Data registrazione
    21-09-2017
    Messaggi
    46

    Predefinito

    Grazie. Cosi facendo riesco a inviare la mail ma poi nel campo consulente non va a scrivere nulla, nè il nominativo nè l'id...

  10. #10
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Nel campo consulente ci va a scrivere quello che tu decidi che ci debba scrivere. Nell'esempio del messaggio precedente viene inserito l'id (al netto di possibili errori di sintassi o simili, che vanno controllati).

    Inserendo l'id mantieni la massima flessibilità, se proprio non ti piace puoi sempre inserire il nominativo.

  11. #11
    bcprojects non è connesso Utente AlterBlog
    Data registrazione
    21-09-2017
    Messaggi
    46

    Predefinito

    Tutto chiaro, mi era sfuggito un piccolo particolare comunque ora ho risolto! riesco a mandare email e inserire il parametro che voglio nel campo consulente. Grazie mille!

Regole di scrittura

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