• User

    manipolare dati e codice php

    Salve a tutti,
    vorrei esporvi brevemente ciò che mi sta mettendo parecchio in difficoltà.
    Il mio problema è di come prelevare i valori da una tabella mysql e manipolare i dati, il tutto in php.
    Esemplifico al massimo per chiarezza.
    Dopo aver inserito da un form i dati in una tabella (tab.clienti)
    (ridotta per esigenze di chiarezza)

    tab.cliente: id, merce, costo, pezzi, tipo, categoria.

    vorrei eseguire successivamente le seguenti operazioni:
    1)controllare se tutti record sono stati inseriti, (alcune colonne possono avere valore 0);

    1. dopo di che eseguo degli update su altre tabelle prelevando i dati del tab.cliente :
      tab.fornitore (id, merce, prov, costo, totale)
      tab.magazzino (id, pezzi, costo, totale);

    3)Dopo di che effettuo una select di tutte le tabelle che sono state cambiate solo nella colonna totale e invio un email.

    Il mio problema è come impostare il codice in php per eseguire i punti elencati 1, 2, 3. Ossia come prelevare i dati del cliente e processarli.

    Per le query ho gia risolto in mysql, funzionano gli update e le select ma non so come poi implementarlo in php. Grazie in anticipo


  • User Attivo

    Del php cosa ti serve di preciso? non sai come fare una query dal php o non sai come strutturare il tutto?


  • User

    come strutturare il tutto, In sostanza non so se utilizzare le condizioni nel momento in cui accedo ai dati del cliente e poi eseguire gli update per quelle tabelle di riferimento, oppure eseguire tutti gli update a prescindere dei valori nulli della tabella cliente e poi eseguire le condizioni ( se la colonna tot della tabella magazzino è 0 non inviare) e
    prendere con la query select le colonne delle tabelle che non sono vuote.
    il codice delle tabelle (senza condizioni) è il seguente:
    (semplifico al massimo)

    <?php
    $db_host = "localhost";
    $db_user = "pinco";
    $db_password = "";
    $db_name = "pallino";
    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri ");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri ");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file ");

    // eseguo update tab.fornitore
    $query = "UPDATE..................totale = .................. + case
    when ................. end ";
    mysql_query( $query) or die(mysql_error());

    //eseguo update tab.magazzino
    $query = "UPDATE..................totale = .................. + case
    when ................. end ";
    mysql_query( $query) or die(mysql_error());

    // eseguo le select tabella fornitore
    $result = "SELECT totale, ...... from .. as . join ........as .. ON ............ = ... order by totale ASC";
    $totale = mysql_query($result) or die ('Error in query: $query. ' . mysql_error());

    // eseguo le select per tabella magazzino
    $resultdue = "SELECT totale, ...... from .. as ... join ........as .. ON ............ = ... order by totale ASC";
    $totaledue= mysql_query($resultdue) or die ('Error in query: $query. ' . mysql_error());

    //seleziono dalla tab.clienti l'email del cliente per poi inviare email
    $tempob = "select clienti.e_mail from clienti where id = 30";
    $tempoc = mysql_query( $tempob) or die(mysql_error());
    $row = mysql_fetch_array ($tempoc);

    //imposto la mail
    $to = $row['e_mail'];
    $subject = 'oggetto';
    $header = 'FROM: pinco';
    $message ='<p>Gentile cliente,<br>................

    while($row = mysql_fetch_object($totale))
    {
    $message.= '<tr>';
    $message.= '<td>' . ucfirst($row->nome) . '</td>';
    $message.= '<td>' . $row->totale . '</td>';
    $message.= '<td>' . ucwords($row->magazzino) . '</td>';

     }echo "invio riuscito";
    

    {
    // print error message
    echo 'No rows found!';
    }

    while($row = mysql_fetch_object($totaledue))
    {
    $message.= '<tr>';
    $message.= '<td>' . ucfirst($row->pezzi) . '</td>';
    $message.= '<td>' . $row->totale . '</td>';
    $message.= '<td>' . ucwords($row->provenienza) . '</td>';

     }echo "invio riuscito";
    

    {
    // print error message
    echo 'No rows found!';
    }

    mail($to, $subject, $message, $header);
    // once processing is complete
    // free result set
    mysql_free_result($result);
    // close connection to MySQL server
    mysql_close($connection);
    ?>

    il codice rappresenta in maniera schematica quello da me utilizzato in cui le tabelle sono più numerose e di conseguenza anche gli update e le select.
    Io vorrei eseguire solo gli update delle tabelle che corrispondono ai valori della tab clienti diverse da 0 ( per esempio il cliente ha omesso il campo tipo per cui non eseguo la query update della tabella corrispondente ) mentre eseguirò le altre.
    Dopo di che al cliente deve arrivare solo la tabella interessata.
    In che modo inserire le condizioni per raggiungere questo risultato?


  • User Attivo

    Scusa allora fai così:
    fai un controllo su quello che inserisce l'utente, prima controlli i campi necessari, per esempio il tipo di merce se non è inserito allora ritorni alla pagina dell'inserimento dati, se invece tutti i campi necessari sono stati inseriti controlli tutti gli altri, se per esempio categoria non è stata dichiarata e non è necessaria fai:
    [PHP]
    if(!isset($_POST['categoria']))
    {
    $categoria=0; //Oppure uguale a un tuo codice che identifica la non immissione del dato
    }
    [/PHP]
    in modo che viene memorizzato nel DB sempre un valore per tutti i campi di ogni tabella ma con valore 0 (o tuo codice) per i campi non compilati.
    Quindi la query di update sarà una per ogni tabella.
    Spero di essermi spiegato 😄


  • User

    Bene, ho un valore per tutti i campi della tabella cliente che è la tabella madre di tutte le altre. Ma io come faccio a prendere solo i campi che hanno un valore diverso da 0 e collegarla alla tabella a cui si riferisce quel valore?


  • User Attivo

    e collegarla alla tabella a cui si riferisce quel valore?

    Puoi farmi un'esempio per questa domanda?
    Mentre per non selezionare quelle diverse da zero conviene che fai una if di controllo, che se (per esempio) utente="codice1349" allora utente è nullo, ti crei un codice che non sia ripetibile in modo che sai quando è nullo 😄


  • User Attivo

    Non so se è utile ma voglio dire che nel post 3 ci sono due mysql_select_db(), ma ne serve solo 1. 😉

    :gthi:


  • User Attivo

    Eh non ti seguo...qualche cosa di pratico? tipo l'utente inserisce questo (quello che fa lo script) e quello che vuoi far visualizzare..:D


  • ModSenior

    @miscordolepw said:

    come faccio a prendere solo i campi che hanno un valore diverso da 0

    WHERE campo != '0'

    @miscordolepw said:

    collegarla alla tabella a cui si riferisce quel valore?

    INNER JOIN


  • User

    Mi spiego meglio:
    l'utente compila il form in php e dopo la validazione dei campi necessari, vengono inseriti tutti i valori dentro la tabella clienti.
    Fin qui tutto bene e se il cliente non compila un campo non necessario nella tabella viene inserito lo zero.
    Adesso vorrei mettere in relazione i campi della tabella clienti con altre tabelle ma per escludere i campi della tabella cliente che non hanno valore come devo fare?
    Esempio tab cliente si collega ad altre tre tabelle tab1,tab2,tab3 per ogni singolo campo. Nella tab cliente ho i seguenti valori per ogni campo:id 1 , merce 10 prov 0, costo 12, totale 20
    merce 10 la collego alla tab1 per cui eseguo un update prelevando il valore 10 e mettendolo in relazione con altri valori della tab1 e calcolando il totale.

    prov 0 non la collego alla tab2 perchè ha valore 0

    costo 12 la collego alla tab3 ed eseguo un update prelevando il valore 12 e mettendo in relazione con altri valori della tab3 e riporto il totale.

    Come dovrei tradurlo in codice php ?
    prendi come riferimento il post n.3 in cui io effettuavo tutti gli update ma in realtà vorrei che venissero fatti solo quelli che si riferiscono a valori diversi dallo 0 presenti della tabella cliente e prelevare con la select solo le tabelle updadate.


  • ModSenior

    SELECT * FROM tabella1 INNER JOIN tabella2 ON tabella1.id=tabella2.id WHERE tabella.campo != '0'

    cosi però se non impari la sintassi base SQL nn credo capirai mai come fare...