Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Problema allineamento iscrizione e disiscrizione php mys pdo

    Salve a tutti.

    Ho tre tabelle una USER con s_id come identificativo univoco
    una ISCRIZIONE e una DISICRIZIONE.
    Ogni user ha 4 posibilità di iscrizione e disiscrizione, (sequenza 1,2,3,4)
    I campi delle due tabelle sono i seguenti

    ISCRIZIONE:

    id_entrata, s_id(user id), iscrizione_sequenza, tessera, data_tessera, data_iscrizione, timestamp


    DISICRIZIONE:

    Id_ucita, s_id(user id), uscita_sequenza, tessera, data_tessera, data_uscita, timestamp

    Praticamente un utente si registra gli si assegna un numero tessera e puo essere a vita o decide di disiscriversi.
    Questo lo puo fare fino a 4 volte, poi gli sará impossibile inscriversi.
    Quello che non riesco a fare, è visualizzare l'utente con il suo stato di iscrizioni.


    esempio.jpg

    Chiaramente se ha solo fatto una iscrizione sara solo una linea con 1º iscrizione.

    Ho fatto varie prove pero la query non mi funziona.

    Codice PHP:

    <?php
    .........................
    .........................

    try {
        
        
        
    $sql2 "select a.*, b.*"
            
            
    "FROM " TBL_ISCRIZIONE " a, " TBL_DISICRIZIONE" b "
            
            
    "WHERE 1 AND a.s_id = :id AND b.s_id = :id ";
        


      
    $altaq $DB->prepare($sql2);

      
    $altaq->bindValue(":id"intval($_GET["id"]));

      
    $altaq->execute();

      
    $resalta $altaq->fetchAll();
        
        

      
    } catch (
    Exception $ex) {

      echo 
    $ex->getMessage();

    }

    ?>
    codice HTML:
    <tr>
    
                      
    
                      <th style="text-align: center;">Sequenza Iscrizione</th>
                      <th width="19%" style="text-align: center;">Iscrizione</th>
                      <th width="19%" style="text-align: center;">Tessera</th>
                      <th width="63%" style="text-align: center;">Disicrizione</th>
                      
                        
    
                     
                    </tr>

    Codice PHP:
    <?php foreach ($resalta as $ralta) { 
                        
                        
    $card $ralta["tessera"];
                        
    $fromdate $ralta["data_iscrizione"];
                        
    $fromdate date_format (new DateTime($fromdate), 'd-m-Y');
                        
    $todate $ralta["data_uscita"];
                        
    $todate date_format (new DateTime($todate), 'd-m-Y');}
                       
                      
    ?>
    codice HTML:
     <tr>
                            <td style="text-align: center;">Risutato sequenza ?</td>
                           <td style="text-align: center;"><?php echo $fromdate ?></td>
                           <td style="text-align: center;">Tessera</td>
                           <td style="text-align: center;"><?php echo $todate ?></td>
                           <td style="text-align: center;">&nbsp;</td>
                          
    
    
                        
    
                      </tr>

    Codice PHP:
    <?php ?>

    Non so' se sono riuscito a spiegarmi bene.
    Ugualmente un grazie a tutti quelli che perderanno un po' di tempo a leggeremi.
    Ciao

    Massimo

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Io farei diversamente, tutto con la sola tabella user.

    s_id, username, email, ... , num_tessera, attivo, num_iscrizioni

    - L'utente si registra, gli viene assegnato un numero di tessera, si mettono i campi "attivo" e "num_iscrizioni" a 1.
    - L'utente si disiscrive, si mette il campo "attivo" a 0
    - L'utente si riiscrive, si rimette a 1 il campo "attivo" e si porta a 2 quello "num_iscrizioni", se vuoi cambi il numero di tessera, oppure gli ridai lo stesso.
    - e così via

    ovviamente prima della riiscrizione va fatto il controllo per vedere a che punto è il contatore e per il login si controlla oltre a username e password anche il campo "attivo" se è 0 o 1.

    p.s. quando scrivi del codice misto html/php metti tutto dentro un unico tag [php] ed usa <?php e ?> dove ci va il codice php, il codice viene riconosciuto correttamente, non alternare [php] e [code] che è più confusionato.
    Ultima modifica di Alhazred; 04-06-2017 a 10:45

  3. #3
    Ciao e grazie per rispondere.
    Non posso utilizzare la tua procedura perché le iscrizioni devo essere tutte visibili come registro attività del utente.
    Sicuramente la cosa è più semplice di quello che penso, pero i miei limiti logici arrivano solo a pensare la mia soluzione, anche se poi non riesco a metterla in pratica.
    Grazie per il suggerimento dei codice misto, non sono molto pratico...
    Spero che tra tutti i lettori del forum, che sono sicuramente migliori di me a livello di php, riescano a darmi, se non la soluzione, almeno nel indicarmi la strada...
    Grazie ancora e ciao dal Costa Rica

  4. #4
    fai un a echo della query, quello che va a finire dentro $sql2, forse è solo un problema di spazi, prova cosi:

    Codice PHP:

        $sql2 
    "select a.*, b.* "
            
            
    "FROM " TBL_ISCRIZIONE " AS a, " TBL_DISICRIZIONE" AS b "
            
            
    "WHERE a.s_id = :id AND b.s_id = :id "

  5. #5
    Ciao, la query sta funzionando, pero mi duplica il risultato, non so' come applicare un distinct o simile, cosi che mi dia solo un risultato.
    Forse mi sono spiegato male nel mio primo post.
    Grazie per la tua risposta-

  6. #6
    Risolto, come immaginavo mi annegavo in un bicchier d'acqua.
    Mancava nela query un altro AND

    Codice PHP:
      $sql2 "select a.*, b.* "
            
            
    "FROM " TBL_ISCRIZIONE " AS a, " TBL_DISICRIZIONE" AS b "
            
            
    "WHERE a.s_id = :id AND b.s_id = :id AND a.iscrizione_sequenza = b.uscita_sequenza "
    Grazie a tutti per leggermi.
    Saluti

  7. #7
    Ciao, sono contento tu abbia risolto, se non ti spiace avrei una domanda, giusto per capire se ho inteso correttamente il tuo post iniziale.

    Tu usi tre tabelle per registrare un utente e le 'azioni' che questo compie, dove per azioni intendo l'iscrizione e/o la revoca da ... qualcosa.


    Poi hai la necessita', mediante una query, di selezionare per il singolo utente, i suoi dati e le sue azioni, in modo di poter controllare e visualizzare le sue azioni e il suo status attuale, e a fronte di questa verifica di decidere se l'utente puo' aggiungere altre 'azioni' controllando che, data la situazione dell'utente l'azione richiesta, ad esempio una iscrizione sia compatibile con il suo status.


    Se l'ultima 'azione' e' una revoca la successiva, se consentita non puo' essere altro che una iscrizione.

    E' corretto ?

    Grazie. Mauro

  8. #8
    Ciao Mauro
    si esatto,
    Il blocco iscrizioni lo effettuo nel form della iscrizione, previo un controllo del record sequenza.
    Se = 4 non permette più iscrizioni.
    In realtà avevo semplificato tutto perché fosse più semplice capire, visto che tutti i record e nomi eran in spagnolo, ho modificato i nomi campi e cambiato un poco, in realtà la tessera è una risoluzione di una giunta di persone che da' l'ok all'inserimento nella lista dei arruolati.
    Pertanto è diversa nella iscrizione e nella descrizione. (una casino insomma hahaha)
    Ciao
    Massimo
    Ultima modifica di coinfeuropea; 05-06-2017 a 00:19

  9. #9
    Ciao, grazie per la risposta.


    Se la questione non esula dall'argomento del post, posso chiederti se esiste una ragione particolare che ti ha sconsigliato l'uso
    della soluzione piu' semplice, ovvero due tabelle master/detail.


    Nella Master, UTENTI, inserisci i dati anagarafici degli utenti, nella Detail, AZIONI inserisci i record della iscrizioni/disdette,
    per differenziarle basta un flag di un carattere.


    Poi con una semplice join tra le due tabelle puoi estrarre sia lo storico dell'utente per quanto attiene adesioni/disdette sia
    calcolare quante azioni dei due tipi ha gia' con delle semplici count.


    Magari nell'uso pratico attuale non hai vantaggi immediatamente visibili, pero', sempre se ho capito il problema, avresti fatto
    un passo avanti nella normalizzazione del DB cosa che probabilemente potrebbe esserti utile quando il programma, o sistema,
    dovesse 'crescere'in futuro.


    Situazione questa che, immagino, sia auspicata ad ogni latitudine.


    La mia non e' certo una critica, da altri tuoi post mi rendo conto che sei molto migliore di me in PHP, il mio scopo e', da neofita,
    cercare di comprendere perche' persone evidentemente piu' esperte fanno scelte diverse da quelle che apparentemente sono quelle
    piu' logiche, questo e', a mio avviso, un metodo utile per apprendere.


    Grazie per la pazienza.

  10. #10
    Ciao Mauro,
    scusa il ritardo, pero fuso orario differente e lavori vari.
    Effettivamente quella delle due tabelle Master/Detail è una opzione valida, solo che di abitudine preferisco le tabelle separate. (mio errore sicuro).
    Per quanto rigurda il fatto che io sia migliore di te, non lo credo proprio...
    Io mi posso considerare solo il miglior mago del copia e incolla...
    Ho imparato tutto da solo e molto l'ho modificato da esempi in rete e con tentativi e tentativi riesco a far funzinare quello che mi serve.
    Poi magari come ultima istanza, utilizzo l'aiuto dei ragazzi del forum di html.it (grandi tutti).
    Un saluto.
    Massimo

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