Visualizzazione risultati 1 fino 9 di 9

Discussione: problema con replace o update in php con variabile da funzione

  1. #1
    Guest

    Predefinito problema con replace o update in php con variabile da funzione

    Codice PHP:

    <?php
    //FUNZIONE
    function mandamail($indmail, $pwutente)
    {
    $oksi = "si";
    $to = $indmail;
    $headers = "From: La Coccinella";
    // soggetto della mail
    $subject = "Credenziali d'accesso a www.lacoccinella.it";

    // corpo messaggio
    $body = "Mail generata automaticamente, si prega di NON rispondere.\n";

    $body .= "Per eventuali domande: xxxxx@xxx.it\n\n";

    $body .= "Credenziali d'accesso:\n";

    $body .= "\tNOME UTENTE: " . $indmail . "\n";
    $body .= "\tPASSWORD: " . $pwutente . "\n";
    $body .= "Buona giornata,\n\n\tLa Coccinella";

    $indmail=$row['mail'];
    $query = "UPDATE clienti SET invsino = 'si' WHERE mail = '$indmail'";

    $result = mysql_query($query);

    mail($to, $subject, $body, $headers,$message);
    }





    $con=mysqli_connect("localhost","formcontatti","xxxxxxx","my_formcontatti");
    // Check connection
    if (mysqli_connect_errno())
    {
    echo
    "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $result = mysqli_query($con,"SELECT * FROM clienti");


    while(
    $row = mysqli_fetch_array($result))
    {
    if(
    $row['invsino']=="no")
    {
    echo
    $row['mail'] . " | " . $row['object']. " | " . $row['invsino']. " | " . $row['passut'];
    echo
    "<input type=\"submit\" name=\"ciao\" value=\"INVIA\" onClick=\"".mandamail($row['mail'], $row['passut']) ."\" />";
    echo
    "<br>";
    }
    }

    mysqli_close($con);
    ?>

    funziona tutto ma non mi cambia il campo invsino nel database
    come mai secondo voi?

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

    Predefinito

    In questi casi, per prima cosa devi sempre guardare se e cosa dice la funzione mysql_error(). Comunque, le funzioni mysql_* sono deprecate. Andrebbero usate le mysqli_*. (comunque, anche se son deprecate, ancora dovrebbero funzionare).

    Ciao!
    Ultima modifica di alemoppo : 14-03-2014 alle ore 14.30.27

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    In questi casi, per prima cosa devi sempre guardare se e cosa dice la funzione mysql_error(). Comunque, le funzioni mysql_* sono deprecate. Andrebbero usate le mysqli_*. (comunque, anche se son deprecate, ancora dovrebbero funzionare).

    Ciao!
    non riesco molto a raccapezzarmi, non è che potresti darmi qualche consiglio? anche su un'altra funzione in cui ho tentato l'update non ottengo risultati!

    Codice PHP:
    <?php
    // PROVA CREAZIONE FILE PER GENERARE MAIL A CLIENTI GIA ISCRITTI

    $con=mysqli_connect("localhost","***","*****","my_formcontatti");

    $result = mysqli_query($con,"SELECT * FROM clienti WHERE LENGTH(passut) < 8");


    while(
    $row = mysqli_fetch_array($result))
    {
    $password = '';

    $possibleChars = '0123456789';

    $i = 0;
    $length = 8;
    while (
    $i < $length)
    {
    $char = substr($possibleChars, mt_rand(0, strlen($possibleChars)-1), 1);

    if (!
    strstr($password, $char))
    {
    $password .= $char;
    $i++;
    }
    }

    //questo update non mi funziona!
    $indmail=$row['mail'];
    $query = "UPDATE clienti SET passut = '$password' WHERE mail = '$indmail'";

    }

    mysqli_close($con);
    ?>

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

    Predefinito

    Nel primo codice, prima di invocare la mail(), controlla $result se è un errore, ad esempio:
    Codice PHP:
    if(!$result)
    echo
    'Errore mysql:'.mysql_error();
    In questo modo dovresti vedere cosa non va.

    EDIT: adesso che guardo meglio, dove fai:
    Codice PHP:
    $indmail=$row['mail'];
    , $row non esiste dentro la funzione. $indmail esiste già invece, perché è il primo parametro della funzione.

    Nel secondo caso, invece, metti la query dentro una stringa ma in realtà non la esegui mai!

    Ciao!
    Ultima modifica di alemoppo : 17-03-2014 alle ore 11.46.52

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Nel primo codice, prima di invocare la mail(), controlla $result se è un errore, ad esempio:
    Codice PHP:
    if(!$result)
    echo
    'Errore mysql:'.mysql_error();
    In questo modo dovresti vedere cosa non va.

    EDIT: adesso che guardo meglio, dove fai:
    Codice PHP:
    $indmail=$row['mail'];
    , $row non esiste dentro la funzione. $indmail esiste già invece, perché è il primo parametro della funzione.

    Nel secondo caso, invece, metti la query dentro una stringa ma in realtà non la esegui mai!

    Ciao!
    ho provato con l'error ma non mi da nessuna stringa quindi suppongo che il richiamo al database funzioni, infatti mi stampa la lista e mi fa inviare le mail quando clicco il pulsante, l'unica nota dolente è l'aggiornamento del campo invsino tramite UPDATE! come posso fare a far funzionare il controllo WHERE dell'UPDATE? passo anche la $row['mail'] come parametro della funzione?


    EDIT: in pratica io vorrei fare in modo che scorra tutto l'elenco mail fino a trovare la corrispondenza, e in caso il pulsante INVIA venga schiacciato automaticamente lui imposti invsino = 'si' sulla riga corrispondente alla mail in questione!
    Ultima modifica di FORMCONTATTI : 17-03-2014 alle ore 12.50.08

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

    Predefinito

    Rileggi il mio "EDIT". Chiedi pure se non capisci.

    Ciao!
    Ultima modifica di alemoppo : 17-03-2014 alle ore 13.38.29

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Rileggi il mio "EDIT". Chiedi pure se non capisci.

    Ciao!
    ho provato levando la riassegnazione di row a $indmail ma comunque non mi modifica il campo invsino nel database, ti posto il codice modificato e commentato per maggior chiarezza

    se per te è più comodo lavorare via PM scrivimi pure li!

    grazie!


    Codice PHP:
    <?php
    //FUNZIONE CHE AL CLICK DI INVIO MANDA LA MAIL ALL'INDIRIZZO
    //E DEVE INSERIRE 'si' ALL'INTERNO DEL CAMPO invsino DEL DATABASE

    function mandamail($indmail, $pwutente)
    {
    $oksi = "si";
    $to = $indmail;
    $headers = "From: La Coccinella";
    // soggetto della mail
    $subject = "Credenziali d'accesso a www.lacoccinella.it";
    // corpo messaggio
    $body = "Mail generata automaticamente, si prega di NON rispondere.\n";
    $body .= "Per eventuali domande: riccardo@lacoccinella.it\n\n";
    $body .= "Credenziali d'accesso:\n";
    $body .= "\tNOME UTENTE: " . $indmail . "\n";
    $body .= "\tPASSWORD: " . $pwutente . "\n";
    $body .= "Buona giornata,\n\n\tLa Coccinella";

    //QUERY PER CAMBIARE invsino IN 'si'
    $query = "UPDATE clienti SET invsino = 'si' WHERE mail = '$indmail'";
    $result = mysql_query($query);
    mail($to, $subject, $body, $headers,$message);
    }





    $con=mysqli_connect("localhost","formcontatti","__________","my_formcontatti");
    // CHECK CONNESSIONE
    if (mysqli_connect_errno())
    {
    echo
    "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    //QUERY CHE SELEZIONA TUTTO DA DB PER VISUALIZZARE ELENCO NOMINATIVI
    $result = mysqli_query($con,"SELECT * FROM clienti");
    //CHECK
    if(!$result)
    echo
    'Errore mysql:'.mysql_error();
    //CICLO CHE VISUALIZZA ELENCO COMPLETO DEI NOMINATIVI CON PULSANTE INVIA A FIANCO DI OGNUNO
    while($row = mysqli_fetch_array($result))
    {
    if(
    $row['invsino']=="no")
    {
    echo
    $row['mail'] . " | " . $row['object']. " | " . $row['invsino']. " | " . $row['passut'];
    echo
    "<input type=\"submit\" name=\"ciao\" value=\"INVIA\" onClick=\"".mandamail($row['mail'], $row['passut']) ."\" />";
    echo
    "<br>";
    }
    }
    //CHIUSURA DATABASE
    mysqli_close($con);
    ?>

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

    Predefinito

    Mi è più comodo qui nel forum, anche perché così possono rispondere altri in caso io non ci fossi.
    Comunque, fai stampare con una echo la variabile $query. Quindi vai su phpMyAdmin -> SQL e prova se funziona.

    In ogni caso, aggiungi anche mysql_error() perché avere messaggi di errore se ci son degli errori, aiuta a risolvere i problemi. In generale, anche a inizio file un
    Codice:
    error_reporting(E_ALL);
    farebbe comodo per eventuali warning di PHP.

    Ciao!

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Comunque, fai stampare con una echo la variabile $query. Quindi vai su phpMyAdmin -> SQL e prova se funziona.
    sostituisco $indmail con una delle mail presente del db e provo subito!


    query stampata a video da echo:
    UPDATE clienti SET invsino = 'si' WHERE mail = 'blabla@gmail.com'
    cosi facendo mi inseriva effettivamente si nel campo invsino, e ogni riga aveva l'indirizzo mail corrispondente!

    ho inserito i codici error che dicevi ma niente! come diavolo può non funzionare che la query è giusta >.<

    EDIT: ho notato però che mettendo echo "\n".$query; nella funzione, viene stampato anche senza pressione del bottone che richiama la funzione, strano D:
    Ultima modifica di FORMCONTATTI : 18-03-2014 alle ore 10.32.09

Regole di scrittura

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