la select non compare come dovrebbe apparire inserendo da tastiera

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Credo di aver già scritto in passato di un problema del genere ma non ricorcor bene. Cheido scusa in anticipo se mi ripeto. Ho la necessita di far compilare dagli utentii tre campi: nazionalita, citta, prov. Sto effettuando la prima prova sulla nazionalità, ma senza ottenere i risultati voluti. Devo sfruttare un'unica tabella chiamata utenti. Questo è il listato completo:

iscrizione.php

PHP:
<DOCTYPE html>

<html>
  <head>
  <meta charset="UTF-8">
  <title></title>
  <style type="text/css">
  body {
 background-color:#333;
 color:#FFF;
 font-family:Comic Sans MS;
 font-size:20px;
}   
#intestazione{
 width:100%;
 height:100px;
 position:absolute;
 font-family: Comic Sans MS;
 top:0px;
 left:0px;
 text-align: center;
}
#posdata {
 position: fixed;
 top: -10px;
font-family:Comic Sans MS;
  }  
#divhr {
   
position:absolute;
top: 100px;   
font-family:Comic Sans MS;
}

#messaggio {
 position: absolute;
 top: 480px;
font-family:Comic Sans MS;
  }  
 
 #posselectgiorno{
position: absolute;
top: 226px;
left: 410px;
font-family:Comic Sans MS;
  }  

#posselectmese{

position: fixed;
top: 216px;
left: 525px;
font-family:Comic Sans MS;
  }  
 
#posselectanno{

position: fixed;
top: 216px;
left: 625px;
font-family:Comic Sans MS;
  }  

  #posnazionalita{

position: absolute;
top: 145px;
left: 0px;
font-family:Comic Sans MS;
  }   
#posselectnazionalita {

position: absolute;
top: 145px;
left: 100px;
font-family:Comic Sans MS;
  }   
#posusername{

position: absolute;
top: 185px;
left: 0px;
font-family:Comic Sans MS;
  }   
 
#posemail{

position: absolute;
top: 235px;
left: 0px;
font-family:Comic Sans MS;
  }
 
 #posripemail{
position: relative;
top: 140px;
left: 0px;
font-family:Comic Sans MS;
  }
 
  #pospassword{

position: absolute;
top: 335px;
left: 0px;
font-family:Comic Sans MS;
  }

  #posripassword{

position: absolute;
top: 385px;
left: 0px;
font-family:Comic Sans MS;
  }
 
#postasto {

position: relative;
left: 600px;
top:285px;


  }
</style>   
  </head>
  <body>

<div id ="intestazione">
  <H2>BENVENUTI NEL MODULO D'ISCRIZIONE</H2>
  <hr>
</div>
 
  <div id ="divhr">
  <form method="POST" autocomplete ="off" action="<?php $_SERVER['PHP_SELF'] ?>">
  <p> <p> <p>
<label for =campo-cognome"> Cognome: </label> <input type ="text"  name = "cognome" required />

</p> </p> </p>
<p> <p><label for =campo-nome"> Nome: </label> <input type ="text" name = "nome" required/> </p></p>

  Seleziona la data di nascita (gg/mm/aaaa):

  <?php
  //Posizionamento delle tre select giorno, mese anno
   
  //  formazione dei tre select:
//  giorno

echo '<select name="giorno">';
echo '<option value="">Scegli giorno: </option>';
for($i=1;$i<32;$i++){
echo "<option value=\"" . $i . "\">" . $i . "</option>\n";
}

echo"</select> ";

#echo "</div>";

//  mese
#echo '<div id = "posselectmese">';

echo '<select name="mese">';
echo '<option value="">Scegli mese: </option>';
for($i=1;$i<13;$i++){
echo "<option value=\"" . $i . "\">" . $i . "</option>\n";
}
echo"</select> ";
#echo "</div>";

//  anno

#echo '<div id = "posselectanno">';

//  anno
echo '<select name="anno">';
echo '<option value="">Scegli anno: </option>';

for($i=1920;$i<2012;$i++){
echo "<option value=\"" . $i . "\">" . $i . "</option>\n";
}
echo "</select>";
#echo "</div>";

//controlla l'inserimento della data che sia corretta
if (!checkdate($input['mese'], $input['giorno'], $input['anno'])) {
  $errore = "Data non valida";
}  

  ?>
   
   
<div id = "posnazionalita">
<!--<p> <p> Seleziona la nazionalità: </p></p>-->

<p> <p> <label for =campo-nazionalita"> Nazionalità: </label> <input type ="text" name = "nazionalita" required/> </p></p>
   
</div>  <!--chiude il div posnazionalita-->


<div id = "posusername">
<p> <p> <label for =campo-username"> Username: </label> <input type ="text" name = "username" required/> </p></p>
</div>  <!--chiude il div posusername-->

<div id = "posemail">
<p> <p> <label for =campo-email"> Email: </label> <input type ="text" name = "email" required/> </p></p>
</div>  <!--chiude il div posemail-->
   
<div id = "posripemail">
<p> <p> <label for =campo-ripemail">Ripeti-Email: </label> <input type ="text" name = "ripemail" required/> </p></p>
</div>  <!--chiude il div posripemail-->
   

<div id = "pospassword">
<p> <p> <label for =campo-password"> Password: </label> <input type ="password" name = "password" required/> </p></p>
</div>  <!--chiude il div posemail-->


<div id = "posripassword">
<p> <p> <label for =campo-ripemail">Ripeti-Password: </label> <input type ="password" name = "rippassword" required/> </p></p>
</div>  <!--chiude il div posrippassword-->

<!--Posizionamento del tasto "Invio dati al centro"-->

  <!--  <input type="submit" name="reg" value="Invio Iscrizione" />-->
   
<div id ="postasto">
  <input type="submit" name="reg" value="Invio dati" id="submit" />

  </div>
  </div>
   
  </form
  <?php

require_once("connettimysqli.php");
echo '<div id = "posdata">';
require_once("data.php");
echo"</hr>";

#Controllo tasto "Invio dati"

if(!empty($_POST)){

# Inizializzazioni variabili

$id = mysqli_real_escape_string($con, $_POST['id']);  
$cognome = mysqli_real_escape_string($con, $_POST['cognome']);  
$nome = mysqli_real_escape_string($con, $_POST['nome']);  
$giorno = mysqli_real_escape_string($con, $_POST['giorno']);
$mese = mysqli_real_escape_string($con, $_POST['mese']);
$anno = mysqli_real_escape_string($con, $_POST['anno']);
$nascita = sprintf("%04d%02d%02d", $anno, $mese, $giorno);
$nazionalita = mysqli_real_escape_string($con, $_POST['nazionalita']);  
$citta = mysqli_real_escape_string($con, $_POST['citta']);  
$prov = mysqli_real_escape_string($con, $_POST['prov']);  
$username = mysqli_real_escape_string($con, $_POST['username']);  
$email = mysqli_real_escape_string($con, $_POST['email']);  
$ripemail = mysqli_real_escape_string($con, $_POST['ripemail']);  
$password = mysqli_real_escape_string($con, $_POST['password']);  
$rippassword = mysqli_real_escape_string($con, $_POST['rippassword']);  

//Inserimento campo nazionalità e la select
$checknazionalita="SELECT DISTINCT nazionalita FROM utenti ORDER BY nazionalita";
$result = mysqli_query($con, $checknazionalita);
if ($result === false) {
  echo "ERROR: " . mysqli_error($con);
}

$nazionalite = array();
while ($row = mysqli_fetch_assoc($result)) {
  $nazionalite[] = $row['nazionalita'];
}

?>
<?php if (!empty($nazionalita)): ?>
<div id =posselectnazionalita'>
  <select name="nazionalita">
  <option value="">-seleziona-</option>

  <?php foreach ($nazionalita as $entry): ?>
  <option value="<?= $entry ?>"><?= $entry ?></option>
  <?php endforeach; ?>
  </select>
</div>
?>
<?php endif; ?>
<?php
# Inserimento dati nella tabella utenti

$query=("INSERT INTO utenti (cognome, nome, nascita, nazionalita, username, email, password) "
  . "VALUES('$cognome','$nome','$nascita','$nazionalita','$username','$email','$password')");
$result=mysqli_query($con,$query);

if($result){
  echo("<p> Inserimento avvenuto correttamente <p>");
} else{
 echo("Inserimento non eseguito. Errore: ".mysqli_error($con));
}
}


?>
  </body>
</html>

In pratica quando il primo iscritto quindi si parla di un db comletamente vuoto inizia a compilare tutti i campi la select non deve comparire, mentre nella seconda iscrizione la select deve comparire con la nazionalità del primo iscritto. Ammettiamo il caso mi iscrivo io e metto nazionalità = italiana quando si iscrive tizio la select deve già apparire a video dando la possibilità all'utente di selezionare se c'è nell'elenco la sua nazionalità. Se non c'è lo inserire a mano nazionalita = francese. Spero di essermi spiegato per il meglio e di ottenere un vosrto aiuto. Grazie.

P.S.: I vecchi tag dove sono finiti ???
 

Ibernato

Utente Attivo
2 Giu 2016
70
6
8
31
Ciao, innanzitutto per inserire una data esiste l'attributo type="date" da applicare al tag input (così non c'è bisogno di scrivere quei tre div per giorno, mese ed anno). Poi per la select della nazionalità potresti fare in questo modo: metti la select nascosta ed un tag input nascosto e se non ci sono utenti iscritti allora fai apparire il tag input per inserire la nazionalità, altrimenti fai comparire la select e nascondi l'input.
 

Ibernato

Utente Attivo
2 Giu 2016
70
6
8
31
Ciao,
se sai usare javascript allora è facile altrimenti mi sa che devi studiartelo.
Comunque ti do dei suggerimenti:
1) per inserire direttamente la data <input type="date" name="data"/>
2) per poter fare il "giochetto" di nascondere e visualizzare un elemento devi utilizzare l'attributo hidden = "true". Quindi ti crei la selelect <select hidden="true" name="naz1"> <option> ecc ecc </option> </select>, e l'input per inserire la nazionalità nel caso in cui nessun utente si è già iscritto <input type="text" name="nazionalita" hidden = "true" name="naz2"/>.
Ora per fare il il trucchetto nascondi/visualizza hai bisogno di javascript. nel tag body inserisci questo <body onLoad(funzione(<?php $indice ?>))> Praticamente tu all'inizio della pagina fai la query per vedere se ci sono utenti già iscritti ed in caso affermativo metti $indice = 1 altrimenti $indice = 0.
Nel tag head inserisci
Codice:
<script>
   function funzione(indice){
       if(indice == 1){
         document.getElementById("naz1").hidden = false;
         document.getElementById("naz2").hidden = true;
     }
    else {
      document.getElementById("naz2").hidden =  false;
     document.getElementById("naz1").hidden = true;
   }
</script>

Questa è l'idea.
 

Ibernato

Utente Attivo
2 Giu 2016
70
6
8
31
Come ho scritto il codice non c'è jquery ms è solo javascript. Se vuoi utilizzare jquery devi inserire questo nel tag head
Codice:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js">
e la funzione va cabiata così:
Codice:
<script>
   function funzione(indice){
       if(indice == 1){
         $("#naz1").show();
         $("#naz2").hide();
     }
    else {
      $("naz2").show();
     $("naz1").hide();
   }
</script>
 

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Ok devo capire come gestire il tasto "invio dati". Poi ti volevo chiedere. Saresti in grado di farmi un esempio pratico e facile da capire nella validazione dati ???? Ossia mettere a fianco di ogni campo una "V" che indica lo Username é libero e una "X" per indicare che è presente nel Db. Io c'ho provato mille volte ma non ci sono riuscito.
 

Ibernato

Utente Attivo
2 Giu 2016
70
6
8
31
Si usa Ajax per fare questo. Ossia tu invii una richiesta al server, il quale ti restituisce una risposta e tu non devi ricaricare la pagina ogni volta.
 

Ibernato

Utente Attivo
2 Giu 2016
70
6
8
31
Codice:
function load_users(){
                // Let's use AJAX also to get chatroom's users
                $.ajax({
                    url: "actions.php",
                    cache: false,
                    success: function(response) {
                        if(response == 0) //user già esistente
                                               else //user non presente e quindi fai visualizzare la V
                    }
                });
            }

Questo è in jquery
 

Ibernato

Utente Attivo
2 Giu 2016
70
6
8
31
Si. AJAX lo usi per validare l'input mentre il primo esempio ti serve per il fatto di visualizzare la select o l'input.
 

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Ciao Ibernato,

Ho provato gli esempio oggi ma non fanno il loro dovere enonc apisco dove sbalio: Ti posto il codice completo.

iscrizione.php

PHP:
<!DOCTYPE html>

<html>
  <head>
  <meta charset="UTF-8">
  <title>Modulo d'isscrizione</title>
  <link href="style.css" rel="stylesheet" type="text/css">
  </head>
  <body>
   
  </body>
<DOCTYP<?php
////////////////////////////////////////////////////////////////////////
// Connessione alla base di dati
// NOTA: La connessione è disponibile nella variabile globale $con
require_once("connettimysqli.php");

require_once("data.php");


////////////////////////////////////////////////////////////////////////
// Controllo su dati inviati dal form
// Se sono stai inviati dei dati, la richiesta di inserimento di un utente
// viene elaborata
if (!empty($_POST)) {
  // Lettura e validazione dei parametri
  $id  = mysqli_real_escape_string($con, $_POST['id']);
  $cognome  = mysqli_real_escape_string($con, $_POST['cognome']);
  $nome  = mysqli_real_escape_string($con, $_POST['nome']);
  $giorno  = mysqli_real_escape_string($con, $_POST['giorno']);
  $mese  = mysqli_real_escape_string($con, $_POST['mese']);
  $anno  = mysqli_real_escape_string($con, $_POST['anno']);
  $nazionalita = mysqli_real_escape_string($con, $_POST['nazionalita']);
  $citta  = mysqli_real_escape_string($con, $_POST['citta']);
  $prov  = mysqli_real_escape_string($con, $_POST['prov']);
  $username  = mysqli_real_escape_string($con, $_POST['username']);
  $email  = mysqli_real_escape_string($con, $_POST['email']);
  $ripemail  = mysqli_real_escape_string($con, $_POST['ripemail']);
  $password  = mysqli_real_escape_string($con, $_POST['password']);
  $rippassword = mysqli_real_escape_string($con, $_POST['rippassword']);
   
   
  // Controlla che la data inserita sia valida e la codifica nel formato aaaammgg
  if (!checkdate($mese, $giorno, $anno)) {
  echo "<p><strong>Errore</strong>: Data non valida</p>";
  }
  $nascita = sprintf("%04d%02d%02d", $anno, $mese, $giorno);

  // Inserimento nella tabella utenti
  $query = "INSERT INTO utenti (cognome, nome, nascita, nazionalita, username, email, password) "
  . "VALUES('$cognome','$nome','$nascita','$nazionalita','$username','$email','$password')";
  $result = mysqli_query($con, $query);
  if ($result !== false) {
  echo "<p>Inserimento avvenuto correttamente<p>";
  } else {
  echo "<p>Inserimento non eseguito.<br />";
  echo '<strong>Errore</strong>: '.mysqli_error($con).'</p>';
  }
}

?>

<DOCTYPE html>
<html>
  <head>
  <meta charset="UTF-8">
  <title></title>
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js">
<SCRIPT type="text/javascript">
   
 function funzione(indice){
  if(indice == 1){
  $("#nazione").show();
  $("#nazionalita").hide();
  }
  else {
  $("nazionalita").show();
  $("nazione").hide();
  }
</script>
  </head>
   
   
  <body>
  <div id="intestazione">
  <h2>BENVENUTI NEL MODULO D'ISCRIZIONE</h2>
  <hr>
  </div>

  <div id="divhr">
  <form method="POST" autocomplete="off" action="<?php $_SERVER['PHP_SELF'] ?>">
  <!-- Cognome -->
  <p>
  <label for="campo-cognome">Cognome: </label>
  <input type="text" name="cognome" required />
  </p>
   
  <!-- Nome -->
  <p>
  <label for="campo-nome">Nome: </label>
  <input type="text" name="nome" required />
  </p>

  <!-- Data di nascita -->
  Seleziona la data di nascita (gg/mm/aaaa):
   
  <!-- Giorno -->
  <select name="giorno">
  <option value="">Scegli giorno: </option>
   
  <?php for ($i = 0; $i < 32; $i++): ?>
  <option value="<?= $i ?>"><?= $i ?></option>;
  <?php endfor; ?>
  </select>
   
  <!-- Mese -->
  <select name="mese">
  <option value="">Scegli mese: </option>
   
  <?php for ($i = 1; $i < 13; $i++): ?>
  <option value="<?= $i ?>"><?= $i ?></option>
  <?php endfor; ?>
  </select>

  <!-- Anno -->
  <select name="anno">
  <option value="">Scegli anno: </option>

  <?php for ($i = 2012; $i >= 1920; $i--): ?>
  <option value="<?= $i ?>"><?= $i ?></option>
  <?php endfor; ?>
  </select>


  <!-- Nuova nazionalità (non presente nella lista) -->
  <div id = "posnazionalita">
  <p>
  <label for="campo-nazionalita">Nazionalità: </label>
  <input type="text" name="nazionalita" required/>
  </p>
  </div>

   
  <!-- Nazionalità (lista di nazionalità già inserite, non compare se vuota) -->
  <?php
   
  // Lettura nazionalità presenti nella base di dati

$checknazionalita = "SELECT DISTINCT nazionalita FROM utenti ORDER BY nazionalita";
$result = mysqli_query($con, $checknazionalita);
if ($result === false) {
  echo "<strong>Errore</strong>: " . mysqli_error($con);
  }
  $nazionalite = array();
  while ($row = mysqli_fetch_assoc($result)) {
  $nazionalite[] = $row['nazionalita'];
  }
  ?>

  <?php if (!empty($nazionalite)): ?>
<select hidden="true" name="nazione"
<option value="">-seleziona-</option>

  <?php foreach ($nazionalite as $entry): ?>
  <option value="<?= $entry ?>"><?= $entry ?></option>
  <?php endforeach; ?>
</select>
<?php endif; ?>
   
  <!-- Nome utente -->
  <div id="posusername">
  <p>
  <label for="campo-username">Username: </label>
  <input type="text" name="username" required/>
  </p>
  </div>

   
  <!-- Email -->
  <div id="posemail">
  <p>
  <label for="campo-email">Email: </label>
  <input type="text" name="email" required/>
  </p>
  </div>

   
  <!-- Ripeti email -->
  <div id="posripemail">
  <p>
  <label for="campo-ripemail">Ripeti-Email: </label>
  <input type="text" name="ripemail" required/>
  </p>
  </div>


  <!-- Password -->
  <div id="pospassword">
  <p>
  <label for="campo-password">Password: </label>
  <input type="password" name="password" required/>
  </p>
  </div>


  <!-- Ripeti password -->
  <div id="posripassword">
  <p>
  <label for="campo-ripemail">Ripeti-Password: </label>
  <input type="password" name="rippassword" required/>
  </p>
  </div>

  <div align ="center">
  <input type="submit" name="reg" value="Invio dati" id="submit" />
  </div>
  </form>
  </div>
   
  <?php
   
  echo "</hr>";
  ?>
  </body>
</html>

Ho provato gli entrambi esempi ma nessuno dei due va mi compare sempre solo il campo input "nazionalita". Se gentilmente mi puoi dire dove sbaglio. Grazie.
 
Discussioni simili
Autore Titolo Forum Risposte Data
A select dinamiche, errore assurdo, non compare la terza select Javascript 0
R Select concatenata che non funziona la seconda volta Ajax 3
X [Select] Valori chiave non presenti in un'altra tabella MySQL 2
alessandroz Select ... where... AND... aggiornamento PHP non funziona PHP 9
S Il metodo $.getJSON() e <select> che non si popola di dati per query troppo grandey Ajax 0
D [ASP.Net] Non elencare nella select i duplicati dallo split Classic ASP 9
otto9due Piccolo Script su select non funziona jQuery 2
asevenx [PHP] form con select che non invia dati se con apostrofo PHP 4
P le select vanno per i fatti loro e non a fianco alle label PHP 2
P due select che non vanno d'accordo fra di loro PHP 4
Monital [risolto] insert into if select non presente MySQL 7
M [risolto] Select non funziona dopo 8 record MySQL 8
H Problema con MySQL e PHP, dopo aver fatto una SELECT non ottengo alcun risultato PHP 7
neo996sps Non recupero il value in un select popolato da DB PHP 4
P Non riesco a mettere al centro i tasti e ingrandire la select PHP 10
M Select dinamica asp non funziona su chrome e ff -> si su ie...help Classic ASP 6
D SELECT DISTINCT non mi funziona Database 2
R switch che non funziona con select $_session PHP 3
L Select dinamiche - stampa ID e non il valore PHP 3
M select non deve restituire value Javascript 1
Silen select che non rimane selected PHP 3
D Select Case non vede le variabili Classic ASP 2
metalgemini select top 10 non funziona! Database 12
L Ripetere Campi disabilitando input in riferimento ad un valore della select jQuery 0
otto9due Ordinare option di una select Javascript 5
W MySQL ciclo in SELECT MySQL 0
W MySQL SELECT list dinamica MySQL 0
M Select Option dentro una Table jQuery 2
G Colorare menu select attraverso ricerca php PHP 0
L problema con query select PHP 2
F menù select dinamico da db in php PHP 3
D popolare campi tra th alla select PHP 36
M Estrarre valore con SELECT COUNT PHP 0
M Creare un campo input select quantità di un numero intero prelevato dal db PHP 3
L Select Dinamiche...da txt? PHP 3
E Php select option e ajax PHP 23
L select join e sottrazione punti PHP 13
L input dati con inser into select ? PHP 4
V hierarchy-select jQuery 0
Emix Select concatenate php sql ajax PHP 2
F query e form con select multipla PHP 17
T recupero valori select multipla da android Javascript 3
J php, scegliere autista da select e mostrare se ha fatto un incidente PHP 8
Tommy03 Select in ordine per numero di record MySQL 7
T problema con select dinamica con jquery Javascript 0
J Far comparire e scomparire un div con un select Javascript 1
M Opzioni select da 1 a 200 PHP 0
I Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE PHP 1
C input in sostituzione della select PHP 2
G Insert into select - Aiuto MySQL 0

Discussioni simili