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 ???
 
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.
 
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.
 
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>
 
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.
 
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.
 
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
 
Si. AJAX lo usi per validare l'input mentre il primo esempio ti serve per il fatto di visualizzare la select o l'input.
 
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