Problemi con Insert e visualizzazioni

Ciao Gianni,

nella costruzione del mio sito, ho riscontrato questo problema:

Di seguito è riportato la definizione della tabella studenti interessata dalla query:

CREATE TABLE STUDENTI

(

 Cod_L CHAR(4) NOT NULL,

 Matricola VARCHAR(10) NOT NULL,

 Cod_Piano INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

 Nome VARCHAR(20) NOT NULL,

 Cognome VARCHAR(20) NOT NULL,

 Data_N DATE NOT NULL,

 Indirizzo VARCHAR(50) NOT NULL,

 Citta VARCHAR(50) NOT NULL,

 Telefono VARCHAR(15) NOT NULL,

 Sesso ENUM ('M','F') NOT NULL DEFAULT 'M',

 UNIQUE (Matricola),

 PRIMARY KEY (Cod_Piano,Cod_L),

 FOREIGN KEY (Cod_L) REFERENCES CORSI(Cod_Laurea)

  ON DELETE CASCADE

  ON UPDATE CASCADE

) ENGINE=INNODB;

lo scritta nella versione con cui non mi viene restituito nessun problema (così invece PRIMARY KEY (Cod_Piano,Cod_L) vedi il post: "Can't create table").

Tramite un form faccio inserire all'utente le informazioni sul nuovo studente:

    <FIELDSET>

     <LEGEND ALIGN="LEFT"> Informazioni sul nuovo studente <BR></LEGEND>

    <FORM METHOD="GET" ACTION="http://localhost/Ins_Studenti2.php">     

      Codice del corso di laurea: <INPUT TYPE="TEXT" Name="Cod_L" SIZE=4 MAXLENGTH=4> (ad es. CL12)

      <BR>

      Matricola: <INPUT TYPE="TEXT" Name="Matricola" SIZE=10 MAXLENGTH=10> (ad es. 566/000955)     

      <BR>

      Nome: <INPUT TYPE="TEXT" Name="Nome" SIZE=20 MAXLENGTH=20>

      <BR>

      Cognome: <INPUT TYPE="TEXT" Name="Cognome" SIZE=20 MAXLENGTH=20>

      <BR>

      Data di nascita: <INPUT TYPE="TEXT" Name="Data_N" SIZE=10 MAXLENGTH=10> (ad es. 1983-07-22)

      <BR>

      Indirizzo di residenza: <INPUT TYPE="TEXT" Name="Indirizzo" SIZE=50 MAXLENGTH=50>

      <BR>

      Città di residenza: <INPUT TYPE="TEXT" Name="Citta" SIZE=50 MAXLENGTH=50>     

      <BR>

      Telefono: <INPUT TYPE="TEXT" Name="Telefono" SIZE=15 MAXLENGTH=15> (ad es. 081/7263741)

      <BR>

      Sesso: <INPUT TYPE="TEXT" Name="Sesso" SIZE=1 MAXLENGTH=1>

      <BR>

      <BR>

    </FIELDSET>

      <BR>

      <BR>

      <INPUT TYPE="SUBMIT" VALUE="Invia">

      <INPUT TYPE="RESET" VALUE="Cancella">

    </FORM>

poi questi dati vengono trasferiti a "Ins_Studenti2.php" (di seguito viene riportato il frammento di codice più importante):

<?

      require "Login.php";

      $Cod_L = $_GET['Cod_L'];

      $Matricola = $_GET['Matricola'];

      $Nome = $_GET['Nome'];

      $Cognome = $_GET['Cognome'];

      $Data_N = $_GET['Data_N'];

      $Indirizzo = $_GET['Indirizzo'];

      $Citta = $_GET['Citta'];

      $Telefono = $_GET['Telefono'];

      $Sesso = $_GET['Sesso'];

      if ($Sesso == "")

       {

      $query="INSERT INTO STUDENTI VALUES ('$Cod_L','$Matricola','NULL','$Nome','$Cognome','$Data_N','$Indirizzo','$Citta','$Telefono','NULL')";

      $ris= mysql_query($query,$Connessione) or die("Errore nella query: " . mysql_error());

       }

      echo "Studente inserito con successo!!!";

      echo "Sesso: ",$Sesso;

    ?>

I problemi sono:

1) Cod_Piano dovrebbe incrementarsi ogni qual volta inserisco uno studente in qualche corso di laurea già inserito, ad esempio:

Cod_L | Matricola | Cod_Piano | ......   | Sesso

 CL01  |  566/955 |         1        |          |   M

 CL02  |  566/945 |         1        |          |   F

 CL01  |  566/789 |         2        |          |   M

2 Inoltre, con quella query non mi compare neanche il valore di default (M) quando non inserisco nulla nel campo Sesso.

Come faccio a dire che se non viene inserito alcun valore per Sesso, devo memorizzare il valore di default:

Dovrei fare così:

    if ($Sesso == "")

       {

      $query="INSERT INTO STUDENTI ('Cod_L','Matricola','Cod_Piano','Nome','Cognome','Data_N','Indirizzo','Citta','Telefono') VALUES ('$Cod_L','$Matricola','NULL','$Nome','$Cognome','$Data_N','$Indirizzo','$Citta','$Telefono')";

      }

   else

     $query="INSERT INTO STUDENTI VALUES ('$Cod_L','$Matricola','NULL','$Nome','$Cognome','$Data_N','$Indirizzo','$Citta','$Telefono','$Sesso)";

   $ris= mysql_query($query,$Connessione) or die("Errore nella query: " . mysql_error());

   echo "Studente inserito con successo!!!";

GRAZIE MILLE

inviato 11 anni fa
noems
X 0 X

Per il problema sulla colonna AUTO_INCREMENT ti ho risposto qui:

http://www.phpnews.it/forum/index.php?topic=190.msg1073#msg1073

purtroppo con le InnoDB non puoi ottenere quel risultato. Se è veramente necessario puoi provare a realizzare la stessa numerazione "manualmente", ovvero leggi con una query il valore più alto assuto da "Cod_Piano" se già esiste un valore di "Cod_L" e poi nella insert lo incrementi.

Per il problema del valore di default credo che il codice che ahi postato funzioni. Comunque, visto che la cosa diventa complicata, ti conviene implementare il comportamento di default direttamente da PHP:

$Sesso = empty($_GET['Sesso']) ? 'M' : empty($_GET['Sesso']);
$query="INSERT INTO STUDENTI VALUES ('$Cod_L', '$Matricola', NULL, '$Nome', '$Cognome', '$Data_N', '$Indirizzo', '$Citta', '$Telefono', '$Sesso')";

La prima riga significa: se $_GET['Sesso'] è vuoto allora $Sesso = 'M' altrimenti $Sesso = $_GET['Sesso']

Un consiglio cambia il metodo del form da GET a POST:

 <FORM METHOD="GET"

rendilo

 <FORM METHOD="POST"

e poi sostituisci tutti i $_GET con $_POST

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Da quello che mi hai suggerito sono riuscito a risolvere il problema del valore di default che non compariva (GRAZIE); ma per essere precisi (credo che sia un'errore di distrazione, CONFERMI?) nella tue 2 righe c'è un'errore:

$Sesso = empty($_GET['Sesso']) ? 'M' : empty($_GET['Sesso']);

$query="INSERT INTO STUDENTI VALUES ('$Cod_L', '$Matricola', NULL, '$Nome', '$Cognome', '$Data_N', '$Indirizzo', '$Citta', '$Telefono', '$Sesso')";

e cioè dopo i 2 punti della prima riga, non ci deve essere empty,altrimenti ad esempio se metto il valore per l'attributo Sesso, uguale a 'F',questo non viene visualizzato all'interno della tabella STUDENTI (Ho impiegato 10 minuti per capire che era quello l'errore).

Ciao e GRAZIE

risposto 11 anni fa
noems
X 0 X

 :wallbash:  sorry, colpa del copia - incolla  ;)

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda