Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    117

    SQL / PHP - Variabile che cambia valore

    Buongiorno a tutti.
    Non sono esattamente nuovo ma ho perso il mio account e mi sono registrato nuovamente.
    Mi sono da poco approcciato a php e mysql quindi non sono molto ferrato ed ho riscontrato un problema al quale non riesco a venire a capo. Sto creando un gestionale di clientela assicurativa (sono un assicuratore) e nel mio ambito una polizza pu� venire sostituita da un'altra che successivamente pu� a sua volta essere sostituita da una terza, poi una quarta e cos� via.

    Il problema che riscontro � sul codice seguente (che potete verificare a questo link: http://www.axive.it/cliente.php?id=1).
    Il codice � strutturato (spero bene) per mostrare dal database, tabella "polizze", tutte le righe con stato "ATTIVA" oppure "SOSPESA" e, per ognuna di queste, mostrare eventuali righe sostituite da quella ATTIVA o SOSPESA.
    Il campo "sostituzione" dovrebbe significare "questa riga sostituisce la riga numero ... ".
    Esempio: riga 1 ha sostituzione 3, quindi sotto alla riga 1 devo visualizzare la riga 3; la riga 3 ha sostituzione 4, quindi sotto di essa vorrei la riga 4 (questa seconda parte, come vi scrivo alla fine, non ho idea di come implementarla senza compincollare codice 10 volte).
    Il problema � che, nella seconda istanza del ciclo while principale, viene successivamente mostrata una riga che non dovrebbe ed il motivo � (almeno credo) che la variabile $psostituzione cambia valore da "NULL" a "5" senza un apparente comando.
    Questa � la tabella attualmente: http://oi67.tinypic.com/r0b6op.jpg
    Come vedete, nel secondo while viene presa in considerazione la riga 2 e, nel momento in cui viene considerato il suo campo "sostituzione" (che � NULL), improvvisamente diventa 5 e questo di conseguenza fa mostrare anche la riga 5. Ho messo un po' di variabili in echo a giro per poter monitorare questa cosa.

    Riuscite a darmi una mano per favore? Non so che pesci prendere.
    Allo stesso modo, poich� come vi accennavo la riga 2 pu� essere sostituita dalla 3, la 3 dalla 4 e cos� via, vorrei che sotto ogni riga "ATTIVA" venisse mostrato l'elenco delle polizze che vengono a loro volta sostituite ma non ho idea di come fare senza copincollare un while dentro all'altro per 10 volte. Mi date un consiglio?

    Grazie mille.

    Codice PHP:
    <!-- RIASSUNTO POLIZZE -->
    <table style="text-align: center">
    <tr>
    <td>Compagnia</td>
    <td>Polizza</td>
    <td>Prodotto</td>
    <td>Stato</td>
    <td>Premio</td>
    <td>Rateazione</td>
    <td>Effetto</td>
    <td>Scadenza</td>
    <td>Oggetto</td>
    </tr>
    <?
    // Prende le polizze del cliente e smista i dati di ogni polizza in un array
    $datipolizze = @mysql_query("SELECT * FROM polizze WHERE cliente = $cid") or die (mysql_error()); 
    while(
    $polizza=mysql_fetch_array($datipolizze))
        {
        
    $pid $polizza['id'];
        
    $pcliente $polizza['cliente'];
        
    $pnumero $polizza['numero'];
        
    $pcompagnia $polizza['compagnia'];
        
    $pprodotto $polizza['prodotto'];
        
    $pagenzia $polizza['agenzia'];
        
    $pstato $polizza['stato'];
        
    $peffetto $polizza['effetto'];
        
    $pscadenza $polizza['scadenza'];
        
    $ppremio $polizza['premio'];
        
    $pfrazionamento $polizza['frazionamento'];
        
    $poggetto $polizza['oggetto'];
        
    $psostituzione $polizza['sostituzione'];
        
    // Mostra le polizze se attive o sospese
        
    if (($pstato == ATTIVA) or ($pstato == SOSPESA)) 
            {
            echo 
    "<tr>
            <td>ID "
    $pid$pcompagnia$psostituzione" SOST</td>
            <td>"
    $pprodotto"</td>
            <td>"
    $pagenzia" / "$pnumero"</td>
            <td>"
    $pstato"</td>
            <td>"
    $ppremio"</td>
            <td>"
    $pfrazionamento"</td>
            <td>"
    $peffetto"</td>
            <td>"
    $pscadenza"</td>
            <td>"
    $poggetto"</td>
            </tr>"
    ;
            }
        
    $psostituzione $polizza['sostituzione'];
        echo 
    " S"$psostituzione;
        
    // Se la polizza ne sostituise un'altra, la prende
        
    if ($psostituzione !== NULL)
            {
            
    $sostituzioni = @mysql_query("SELECT * FROM polizze WHERE id = $psostituzione") or die (mysql_error());
            if(
    $psostituita=mysql_fetch_array($sostituzioni))
                {
                
    $psid $psostituita['id'];
                
    $pscliente $psostituita['cliente'];
                
    $psnumero $psostituita['numero'];
                
    $pscompagnia $psostituita['compagnia'];
                
    $psprodotto $psostituita['prodotto'];
                
    $psagenzia $psostituita['agenzia'];
                
    $psstato $psostituita['stato'];
                
    $pseffetto $psostituita['effetto'];
                
    $psscadenza $psostituita['scadenza'];
                
    $pspremio $psostituita['premio'];
                
    $psfrazionamento $psostituita['frazionamento'];
                
    $psoggetto $psostituita['oggetto'];
                
    $pssostituzione $psostituita['sostituzione'];
                
    // Mostra la polizza sostituita
                
    echo "<tr style='color: orange'>
                <td>^- SOSTITUITA "
    $psostituzione" ID "$psid$pscompagnia$pssostituzione" SOSTITUZIONE</td>
                <td>"
    $psprodotto"</td>
                <td>"
    $psagenzia" / "$psnumero"</td>
                <td>"
    $psstato"</td>
                <td>"
    $pspremio"</td>
                <td>"
    $psfrazionamento"</td>
                <td>"
    $pseffetto"</td>
                <td>"
    $psscadenza"</td>
                <td>"
    $psoggetto"</td>
                </tr>"
    ;
                }
            }
        }
    ?>
    </table>
    Ultima modifica di fluxKami; 20-02-2017 a 11:47 Motivo: Precisazione

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    117
    Up

  3. #3
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    abbozzo una risposta anche se non ho capito esattamente cosa vuoi
    vado ad intuito

    allora quello che sbagli se non ho capito male è la seconda query. (ovviamente)
    La seconda query dovrebbe caricare le polizze sostitutive SOLO del cliente corretto.
    Quindi dovrebbe essere una cosa tipo:
    Codice PHP:
    SELECT FROM polizze WHERE cliente $pnumero and id $psostituzione 
    aspetta però a fare copia e incolla..
    pnumero suppongo sia il numero di polizza. che cambia al cambio/sostituzione di polizza?
    ...se la risposta è sì, allora la query sopra non va bene.
    Devi fare la query in modo che un determinato cliente abbia un campo (..numerico, intero diciamo..) nel DB che sia UGUALE PER TUTTE LE SUE POLIZZE. se non lo hai, non puoi fare nulla di quello che chiedi.. perchè il DB non può ritrovare i risultati come li vuoi se non è ben istruito

    in questo senso io rifarei tutto daccapo, facendo una tabella di SOLA anagrafica e una tabella di SOLE polizze.
    Questo ti faciliterebbe di parecchio la vita (del gestionale.. ) e ti permetterebbe di tenere tutto ordinato
    (oltre che impari più cose sul PHP )

    P.S.: Spero di aver capito

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    117
    Cerco di spiegarmi meglio. Una polizza A ha un cliente a cui si riferisce e può essere sostituita da una polizza B: in questa operazione cambia sempre il numero di polizza e talvolta anche il cliente a cui si riferisce. Nonostante questo, sotto la polizza B vorrò comunque vedere la polizza A per avere maggiori informazioni sulla storia della polizza B, anche se il cliente è un altro.

    Prendi come riferimento la tabella di cui ti ho messo lo screen.
    Prima creo una query che mostra le polizze ATTIVE o SOSPESE, in questo caso le polizze con id 1, 2 e 6.
    Sotto ognuna, ad esempio la 1, prima che venga mostrata la successiva (la 2), voglio la polizza che è stata sostituita dalla 1: dall'ultima colonna della riga io so che la riga/polizza 1 ha sostituito la 3, quindi sotto la 1 voglio la 3. A sua volta, sotto la 3 vorrò anche la 4 e poi la 5.
    La riga 5 ha sostituzione NULL (non ha preso il posto di niente), il che significa che è stata il primo anello della catena, quindi lì deve fermarsi la prima istanza del ciclo.
    IL PROBLEMA: l'unica soluzione che mi viene in mente per realizzare questa roba è copincollare codice N volte (sperando che non capitino mai più di N sostituzioni consecutive).

    Nella seconda istanza del ciclo si va a trattare la riga 2. La polizza 2 ha sostituzione NULL, il che significa che è stata la prima polizza della catena (e visto che è ATTIVA e non SOSTITUITA, significa che per il momento è anche l'unica finché non verrà sostituita/annullata). Questo significa che la seconda istanza del ciclo deve fermarsi alla riga 2 e passare alla riga 6, ed invece tra queste due righe trovo la riga 5 e non capisco il motivo perché non capisco in che modo la variabile $psostituzione possa avere da un momento all'altro valore 5.

    Se hai bisogno di ulteriori chiarimenti non esitare a chiedere, ti sono riconoscente per la disponibilità e spero tu voglia riuscire ad aiutarmi fino in fondo.

    EDIT: ovviamente ho anche una tabella con i clienti: sopra all'elenco polizze, come potrai vedere dal link, vengono recuperati i dati del cliente 1 dalla tabella "clienti".
    Se nella tabella "polizze" la riga 1 ha cliente 1 significa che quella polizza è del cliente 1: ciò non toglie che anche altre polizze possono essere di proprietà del cliente 1.
    Ultima modifica di fluxKami; 21-02-2017 a 16:04

  5. #5
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    AH!!! capito..
    no, è una follia fare n query, non ha proprio senso..
    potresti aggiustare mettendo un secondo ciclo dentro al primo e mettendo in ordine crescente le polizze di quel cliente, ma comunque DEVONO avere un dato in comune, che hanno sostituzione != 0 o da null

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    117
    Il secondo ciclo dentro al primo è esattamente quello che ho fatto.
    La domanda è: per quale motivo mi viene mostrata una riga (la 5) che secondo me, in base al codice che ho scritto, non dovrebbe comparire?

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    117
    Ho risolto da solo, grazie comunque.

  8. #8
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    come?
    il tuo secondo "ciclo" non è un ciclo
    Ultima modifica di telegio; 22-02-2017 a 11:14

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2017
    Messaggi
    117
    Ho spostato la dichiarazione della variabile che mi aumentava da sola fuori dal ciclo poiché, anche se l'echo era filtrato da un if, la dichiarazione e la modifica della variabile avveniva comunque all'interno del ciclo: in altre parole anche se le righe non venivano mostrate le variabili continuavano ad operare (cosa ovvia e banalissima ma alla quale non avevo pensato).

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 © 2024 vBulletin Solutions, Inc. All rights reserved.