[PHP] Form e database

giuseppe_123

Utente Attivo
8 Set 2016
53
0
6
24
Salve, avrei bisogno di una mano nel creare una piccola tabella attraverso la quale verranno visualizzati tutti gli utenti, da me registrati attraverso un form, che mi servirà a inserire la loro presenza/assenza.
innanzitutto ho gia creato una tabella nella quale vengono inseriti tutti dati inseriti via form. I campi di questa tabella sono: ID, NOME, COGNOME, DATA_DI_NASCITA,CODICE FISCALE.
Questa tabella può essere visualizzata sul sito che sto creando in locale. Nella pagina web oltre a quelle colonne ne ho inserita un'altra per poter inserire la presenza a ciascun id.
In ogni cella di quella colonna ho creato due bottoni radio per spuntare la casella "presente" o "assente" e un tasto invia.
solo che non riesco a inviare alla tabella del database la dicitura "presente"/"assente"
Ho gia creato una tabella contenente solamente due campi: ID, PRESENZA_ASSENZA.
ID dovrebbe essere la stessa colonna presente nella prima tabella che vi ho descritto. Ho sentito parlare di database relazionali o tabelle relazionali.. Qualcuno può spiegarmi come crearle? ho trovato delle guide ma ci ho capito poco. Comunque entrambe le tabelle che ho creato sono InnoDB.
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Quando parli di database relazionali, ti stai riferendo al database all'interno del quale hai creato le due tabelle. Si chiama relazionale in quanto le tabelle possono essere messe in relazione tra di loro, attraverso dei campi chiave. Nel tuo caso hai l'ID dell'utente che compare in entrambe le tabelle, per cui la relazione tra queste ultime si basa proprio su questo campo, attraverso il quale, dalla tabella delle presenze, puoi risalire a tutte le informazioni riferite a quell'utente con quello specifico ID, contenute all'interno della tabella delle anagrafiche. Per cui le tabelle sono già create.

Il tuo problema, a questo punto, si riduce alla scrittura di codice PHP e, nello specifico, alla comunicazione tra lo script e il database. Dovresti innanzitutto postare il tuo codice, in modo da avere una base da cui partire per aiutarti.
 
  • Like
Reactions: giuseppe_123

giuseppe_123

Utente Attivo
8 Set 2016
53
0
6
24
Diciamo che ho risolto già un po dei problemi che avevo. Posto qua il codice.


PHP:
<?php
/* Template name: tabella mysql

 */
get_header();
?>

<html>
<head>
<link rel="stylesheet" type="text/css" href="tab.css">
</head>
    <body>

        <html>
        <head>
            <meta charset="utf-8" />
            <title>Table Style</title>
            <meta name="viewport" content="initial-scale=1.0; maximum-scale=1.0; width=device-width;">
        </head>

        <body>
        <div class="table-title">
            <h3></h3>
        </div>
        <div id="scroll">
        <table class="table-fill" class="scrollable">
            <thead>

            <tr>
                <th class="text-left">ID</th>
                <th class="text-left">NOME</th>
                <th class="text-left">COGNOME</th>
                <th class="text-left">DATA DI NASCITA</th>
                <th class="text-left">CODICE FISCALE</th>
                <th class="text-left">LUOGO DI NASCITA</th>
            </tr>
            </thead>
            <tbody class="table-hover">


<?php

include 'conn_selez_db.php';


$query = "SELECT * FROM persone_inserite ORDER BY id  ";
$result = mysqli_query($conn,$query) or die(mysqli_error($conn));
while($row = mysqli_fetch_array($result)) {
    echo "<tr>";
    echo "<td class='text-left'>" . $row['0'] . "</td><td class='text-left'>" . $row['1'] . "</td>
    <td class='text-left' >" . $row['2'] . "</td><td class='text-left' >" . $row['3'] . "</td><td class='text-left' >" . $row['4'] . "</td>
    <td class='text-left' >" . $row['5'] . "</td>";

    echo"<td><form action='' method='POST' >
        presenza/assenza:<br>
    <input type='radio' name='registro' value='presente'>pre
    <input type='radio' name='registro' value='assente''>ass<br>

    <input type='submit' name='submit' value='INVIA'><br>
    </form></td>";


if(isset($_POST['submit'])) {
    include('conn_selez_db.php');



    $p_a=$_POST["registro"];


    $query= "insert  into presenze (ID,PRESENZA_ASSENZA) values ('.$row[0]','$p_a')";
    if (mysqli_query($conn, $query))
    {
        echo  "<script type='text/javascript'>alert('registrata')</script>";
        

    } else {echo "errore";}
}
}
?>




                </div>
            </tbody>
        </table>


        </body>
</body>

</html>

Ho creato dentro una cella per ogni utente un form per inserire la presenza/assenza in una tabella nel database che è composta da due campi: id e presenza/assenza.
Quando schiaccio invia al database arrivano nel campo id solamente due valori, o 0 o 1, e nel campo presenza_assenza solamente la scritta presente anche se viene selezionato assente. Io vorrei che nel campo id fosse inserito l'id corrispondente a l'utente cui vado a inserire la presenza/assenza
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Ho modificato il codice usando il tuo come base, commentando i vari passaggi.

PHP:
<?php /* Template name: tabella mysql*/ ?>
<html>
   <head>
        <title>Table Style</title>
        <meta charset="utf-8" />
        <meta name="viewport" content="initial-scale=1.0; maximum-scale=1.0; width=device-width;">
        <link rel="stylesheet" type="text/css" href="tab.css">
    </head>

    <body>
        <div class="table-title">
            <h3>Registro presenze</h3>
        </div>
        <div id="scroll">
            <form action='' method='POST' > <!-- IL FORM SARÀ TUTTA LA TABELLA -->
                <table class="table-fill" class="scrollable">
                    <thead>
                        <tr>
                            <th class="text-left">ID</th>
                            <th class="text-left">NOME</th>
                            <th class="text-left">COGNOME</th>
                            <th class="text-left">DATA DI NASCITA</th>
                            <th class="text-left">CODICE FISCALE</th>
                            <th class="text-left">LUOGO DI NASCITA</th>
                            <th class="text-left">PRESENZA/ASSENZA</th>
                        </tr>
                    </thead>
                    <tbody class="table-hover">
                        <?php
                            include('conn_selez_db.php');
                            $query = "SELECT * FROM persone_inserite ORDER BY id";
                            $result = mysqli_query($conn,$query) or die(mysqli_error($conn));
                            while($row = mysqli_fetch_array($result)) {
                                echo "
                                <tr>
                                    <td class='text-left'>" . $row['0'] . "</td>
                                    <td class='text-left'>" . $row['1'] . "</td>
                                    <td class='text-left'>" . $row['2'] . "</td>
                                    <td class='text-left'>" . $row['3'] . "</td>
                                    <td class='text-left'>" . $row['4'] . "</td>
                                    <td class='text-left'>" . $row['5'] . "</td>
                                    <td>
                                        <input id='pre$row[0]' type='radio' required checked name='registro[$row[0]]' value='presente'>
                                        <label for='pre$row[0]'>pre</label>

                                        <input id='ass$row[0]' type='radio' required name='registro[$row[0]]' value='assente'>
                                        <label for='ass$row[0]'>ass</label>
                                    </td>
                                </tr>";
                                // il name di ogni input sarà un array che avrà come chiavi
                                // gli id degli utenti e come valori le rispettive presenze

                            }
                            if(isset($_POST['submit']) && isset($_POST["registro"])) {

                                $registro = $_POST["registro"]; // recupero l'array registro che contiente id e presenza degli utenti
                                $count = 0; // inizializzo una variabile che mi conterà quante presenze vengono registrate

                                foreach ($registro as $id => $presenza) { // per ogni coppia chiave->valore all'interno dell'array $registro
                                    $insert = "INSERT INTO presenze (ID,PRESENZA_ASSENZA) VALUES ($id,'$presenza');"; //definisco la query

                                    /*
                                    N.B.: all'interno della query $id non è racchiuso tra apici
                                     poiché nella mia tabella è definito come intero.
                                    */

                                    $count++; // incremento il conteggio

                                    if(!mysqli_query($conn,$insert)) { // se la query di inserimento fallisce...
                                            $count--; // riduco il conteggio di uno
                                            echo "Errore".mysqli_error($conn)."<br>"; // e stampo il relativo errore mysql
                                        }
                                }
                                echo "<div><h3>".$count." presenze registrate.</h3></div>";
                                // quando tutto l'array è stato processato stampo il messaggio informativo
                            }
                        ?>
                    </tbody>
                </table>
                <input type='submit' name='submit' value='INVIA'><br>
            </form>
        </div>
    </body>
</html>

Se hai dubbi o perplessità, chiedi pure ;)
 

giuseppe_123

Utente Attivo
8 Set 2016
53
0
6
24
Sei stato gentilissimo. Grazie mille.
Volevo anche chiederti se è possibile, quando si inserisce la presenza, che venga aggiunta la data automaticamente. E dunque dovrò anche creare un'altra colonna nella tabella del database giusto?
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Certo, è possibilissimo. Ovviamente dovrai creare un'altra colonna, avendo l'accortezza di settare, a livello di tabella, la coppia (ID, DATA) come chiave, in modo da evitare di avere duplicati o dati addirittura discordanti (verrebbe violato il vincolo di integrità secondo cui le chiavi primarie debbano essere uniche). In alternativa, puoi fare a meno di questo passaggio e controllare direttamente attraverso lo script che non siano già presenti record per quella persona in quel determinato giorno.

Puoi scegliere il formato data che più preferisci, utilizzando la funzione built-in date().

PHP:
date("d-m-Y") // 17-09-2016
date("d/m/Y") // 17/09/2016
date("d/m/y") // 17/09/16

Ti lascio il link alla pagina di php.net, nel caso volessi approfondire.
 
  • Like
Reactions: giuseppe_123

giuseppe_123

Utente Attivo
8 Set 2016
53
0
6
24
Vorrei chiederti un'ultima cosa, allego uno screenshot dove ci sono due righe della mia tabella. le colonne sono:
1--> ID
2--> NOME
3--> COGNOME
4--> DATA DI NASCITA
5--> CODICE FISCALE
6--> LUOGO DI NASCITA
7-->PRESENZA/ASSENZA
Ho intenzione di far vedere solamente id nome cognome e presenza/assenza più un pulsante che se schiacciato dovrebbe far vedere tutte le altre informazioni(data di nascita, codice fiscale, luogo di nascita). Come posso farlo?
 

Allegati

  • Schermata 2016-09-18 alle 11.11.03.png
    Schermata 2016-09-18 alle 11.11.03.png
    54 KB · Visite: 218

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Potresti mettere un link che se premuto ti ricarica la pagina e ti mostra le altre informazioni, gestendo il tutto tramite una GET.

Forse però l'alternativa migliore è il JavaScript, in quanto eviteresti il refresh della pagina.
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Questo è forse il metodo più immediato. Ho nascosto via CSS i dati che non vengono immediatamente visualizzati, quindi ho aggiunto uno pseudo-bottone che, se cliccato, mostra/nasconde i dati tramite una funzione JavaScript (JQuery in questo caso) che toglie/aggiunge la classe "hidden".

PHP:
<?php /* Template name: tabella mysql*/ ?>
<html>
   <head>
        <title>Table Style</title>
        <meta charset="utf-8" />
        <meta name="viewport" content="initial-scale=1.0; maximum-scale=1.0; width=device-width;">
        <link rel="stylesheet" type="text/css" href="tab.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

        <style type="text/css">
            .hidden {
                display: none;
            }

            .info {
                background-color: #eee;
                border: 1px solid black;
                border-radius: 5px;
                cursor: pointer;
                padding: 2px 3px;
                width: 200px;
            }

        </style>
    </head>

    <body>
        <div class="table-title">
            <h3>Registro presenze</h3>
        </div>
        <div id="scroll">
            <form action='' method='POST' > <!-- IL FORM SARÀ TUTTA LA TABELLA -->
                <table class="table-fill" class="scrollable">
                    <thead>
                        <tr>
                            <th class="text-left">ID</th>
                            <th class="text-left">NOME</th>
                            <th class="text-left">COGNOME</th>

                            <th class="text-left">PRESENZA/ASSENZA</th>
                            <th class="text-left"></th>
                            <span class="show">
                           <!--  <th class="text-left more hidden">DATA DI NASCITA</th>
                            <th class="text-left more hidden">CODICE FISCALE</th>
                            <th class="text-left more hidden">LUOGO DI NASCITA</th> -->
                            </span>
                        </tr>
                    </thead>
                    <tbody class="table-hover">
                        <?php
                            include('conn_selez_db.php');
                            $query = "SELECT * FROM persone_inserite ORDER BY id";
                            $result = mysqli_query($conn,$query) or die(mysqli_error($conn));
                            while($row = mysqli_fetch_array($result)) {
                                echo "
                                <tr>
                                    <td class='text-left'>" . $row['0'] . "</td>
                                    <td class='text-left'>" . $row['1'] . "</td>
                                    <td class='text-left'>" . $row['2'] . "</td>
                                    <td>
                                        <input id='pre$row[0]' type='radio' required checked name='registro[$row[0]]' value='presente'>
                                        <label for='pre$row[0]'>pre</label>

                                        <input id='ass$row[0]' type='radio' required name='registro[$row[0]]' value='assente'>
                                        <label for='ass$row[0]'>ass</label>
                                    </td>
                                    <td><span class='main" . $row['0'] . " info'>More..</span></td>
                                    <td class='more" . $row['0'] . " hidden'><strong>Nascita:      </strong>" . $row['3'] . "</td>
                                    <td class='more" . $row['0'] . " hidden'><strong>CF:      </strong>" . $row['4'] . "</td>
                                    <td class='more" . $row['0'] . " hidden'><strong>Luogo:      </strong>" . $row['5'] . "</td>
                                </tr>
                                        <script type='text/javascript'>
           
                                            $('.main".$row['0']."').click(function() {
                                                $('.more".$row['0']."').toggleClass('hidden');
                                                $('.more').removeClass('hidden');
                                            });


                                            </script>

                                ";
                                // il name di ogni input sarà un array che avrà come chiavi
                                // gli id degli utenti e come valori le rispettive presenze

                            }
                            if(isset($_POST['submit']) && isset($_POST["registro"])) {

                                $registro = $_POST["registro"]; // recupero l'array registro che contiente id e presenza degli utenti
                                $count = 0; // inizializzo una variabile che mi conterà quante presenze vengono registrate

                                foreach ($registro as $id => $presenza) { // per ogni coppia chiave->valore all'interno dell'array $registro
                                    $insert = "INSERT INTO presenze (ID,PRESENZA_ASSENZA) VALUES ($id,'$presenza');"; //definisco la query

                                    /*
                                    N.B.: all'interno della query $id non è racchiuso tra apici
                                     poiché nella mia tabella è definito come intero.
                                    */

                                    $count++; // incremento il conteggio

                                    if(!mysqli_query($conn,$insert)) { // se la query di inserimento fallisce...
                                            $count--; // riduco il conteggio di uno
                                            echo "Errore".mysqli_error($conn)."<br>"; // e stampo il relativo errore mysql
                                        }
                                }
                                echo "<div><h3>".$count." presenze registrate.</h3></div>";
                                // quando tutto l'array è stato processato stampo il messaggio informativo
                            }
                        ?>
                    </tbody>
                </table>
                <input type='submit' name='submit' value='INVIA'><br>
            </form>
        </div>

    </body>
</html>
 
  • Like
Reactions: giuseppe_123

giuseppe_123

Utente Attivo
8 Set 2016
53
0
6
24
Potresti aiutarmi anche nel creare un bottone per ogni riga per eliminare alcuni dati del database?
 
Discussioni simili
Autore Titolo Forum Risposte Data
K [PHP + MYSQL ] Inserimento dati in database da form dinamico PHP 13
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
giancadeejay [PHP] Aggiornare un valore del database tramite form PHP 26
C [PHP][MY SQL] - Estrazione dati database tramite form PHP 8
G form php connesso a database ma non inserisce dati PHP 5
F problemi form utenti php e database PHP 9
S passare un valore da un form a un file .php con metodo post PHP 4
K [php]form invio dati PHP 0
G Invio form con PHP PHP 3
M Collegamento tra form html e script php PHP 4
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
L Problemi form Pagina php HTML e CSS 3
V PHP form intersecate PHP 0
C Form email php su pagina index.html? PHP 21
L form multipla php sql,errore in inserimento MySQL 0
L Insert php sql da una form multipla PHP 6
L Campi obbligatori form php PHP 0
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
G Form in php WordPress 0
F [PHP] Form html PHP 2
G FORM HTML E PHP PHP 0
S [PHP] Recupero nome immagine da Form con input file PHP 3
U PHP bottone per invio mail o ritorno al form PHP 15
O [PHP] inviare dati da form e script ajax PHP 0
B [PHP] Creare PDF dopo inserimento dati form PHP 4
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1
C [PHP] Form inserimento più menù a discesa PHP 9
D [PHP] Consigli su come creare form PHP 1
T [PHP] Creare Honeypot per form contatti PHP 10
A [PHP] Invio automatico dati da form PHP 6
ANDREA20 [PHP] [HTML] crea form di contatto PHP 4
ANDREA20 [PHP] form modulo contattp PHP 5
M HELP FORM CREATO IN PHP PHP 14
L [PHP] Form da select compilare campi automaticamente PHP 1
I [PHP] inviare form con allegato tramite una mail PHP 1
A [PHP] Controllo nome utente form di registrazione PHP 4
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
P PHP - Leggere una pagina passata con Form e Captcha PHP 0
Angelo Russo [PHP] [HTML] form contatti PHP 0
F [php] sicurezza password form login PHP 2
M [PHP] Problema search form PHP 3
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
Cosina Andare a capo nel testo della mail ricevuta dal form php PHP 1
N [PHP] filtrare input form di tipo array PHP 0
M [PHP] Framework per form complessi (configuratore prodotto) PHP 6
F [PHP] [HTML] File legato ad action in un form PHP 1
S [PHP] Verifica dati tramite form e annullamento codice inserito PHP 7
spider81man Scrivere su file .txt da form php PHP 2
M [PHP] valore tabella in campo form PHP 1

Discussioni simili