[PHP] Memorizzare scelte select in db e leggerle

VAik

Utente Attivo
16 Apr 2016
117
3
18
Ciao a tutti ragazzi
ho un ulteriore esercizio sempre sui campi form da riempire dall'utente, ma non so se sono riuscito nell'impresa

Ho realizzato nel db fornitomi da EasyPHP, una tabella "campi", con i campi colonna "id" (INT), "textarea", "checkbox", "radio", "sel" (tutti e quattro VARCHAR).

Ho creato una pagina con il form da completare, che richiama l'applicazione di inserimento nel db (memorizzo-select.php), e poi ho sviluppato un programma di lettura (leggere-select.php).

Riesco a memorizzare tutto alla perfezione, però non so se la lettura avviene in maniera corretta. cioè non escono errori , però è strana:

Molte righe della tabella "campi" , hanno memorizzato nel campo colonna "sel" un "-", proprio perchè per la memorizzazione degli altri form altri avevo impostato di inserire questo trattino.
Quando vado a leggere con questo codice

PHP:
<?php

require_once('configurazione_credenziali_esterno.php');
$link = mysqli_connect(DB_HOST, DB_USERN, DB_PSW) or die("Errore connessione: ". mysqli_connect_error());
$dbw = mysqli_select_db($link, DB_PROVA) or die("Errore apertura database: " . mysqli_error($link));

$strsql = "SELECT sel FROM campi";

$rs = mysqli_query($link, $strsql) or die("Errore query database: " . mysqli_error($link));
while ($riga = mysqli_fetch_array($rs)) {
    //echo $riga['sel'];   //sel nome del campo colonna
    $pv=$riga['sel'];
    echo $pv;

$province=array('BO'=>'Bologna','MI'=>'Milano');
//definisco array associativo

$option_pv='';


if(isset($pv)){
    foreach ($province as $chiave=>$valore){
      
        //$chiave conterrà MI, BO
        //$valore conterrà il campo Bologna,Milano
         
        if($pv==$chiave){
        $option_pv= $option_pv."<option value='$chiave'selected>$valore</option>"; 
        //equivalente a
        //$option_pv.= "<option value='$chiave'selected>$valore</option>";
     
            }
            if(($pv<>'-')or($pv<>'vuoto')){
         
                echo "non c'è nessuna selezione<br>";
 
                $option_pv.= "<option value='vuoto'></option>";
 
            }
         
                
 
        
        }//chiusura if
}//chiusura foreach
 


 


    ?>
            <form>
            Città: <select name = "pv" >
            <?php echo "vedi non vedo nulla $option_pv;"?>
            </select>
            </form>
         
         
            <?php
         




}//chiusura while

?>

noto che per i campi dove c'è il trattino memorizzato esce due volte questa frase "non c'è nessuna selezione" e un solo campo sel vuoto .
Invece per i campi dove è salvata la provincia Milano o Bologna compare cmq il messaggio "non c'è nessuna selezione" e sotto il form select con la città Milano e Bologna.

Perchè per i tutti i campi (sia che sia memorizzata la città sia che ci sia il trattino) esce 2 volte la scritta "non c'è nessuna selezione".

E poi il form messo al di fuori del codice php non si vede proprio
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
28
Ciao.

Vuoi memorizzare e leggere le scelte della select in maniera analoga a quanto discusso nel tuo precedente post, in cui facevi la stessa cosa con i radio?
 
  • Like
Reactions: VAik

VAik

Utente Attivo
16 Apr 2016
117
3
18
Ciao Ade
no, la memorizzazione l'ho fatta e viene proprio bene eheheh......il problema è la lettura. che mi determina qualcosa di strano come ho scritto su.
Per capire: per quanto riguarda mostrare il menù a tendina con la scelta selezionata viene bene, però il problema è quando il db non ce l'ha la città selezionata.

se elimino
PHP:
echo "non c'è nessuna selezione";
non sembra che ci sia il problema, però c'è, in quando mi esce due volte questa scritta, per una sola riga
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
28
Ricapitolando, tu vuoi ottenere una select in cui, se in tabella vi è la sigla di una provincia, allora avrai la select con il nome della città associata. Invece, se in tabella è presente il trattino, allora vuoi che ti compaia la select con l'opzione 'Non c'è nessuna selezione'. Ho capito bene?

PHP:
<?php

$conn = mysqli_connect("127.0.0.1", "root", "", "test");

//definisco array associativo
$province=array('BO'=>'Bologna','MI'=>'Milano');

$option_pv='';
$strsql = "SELECT sel FROM campi";
$rs = mysqli_query($conn, $strsql) or die("Errore query database: " . mysqli_error($conn));

while ($riga = mysqli_fetch_array($rs)) {
    $pv=trim(strtoupper($riga['sel']));

    if(isset($pv)){
       if(array_key_exists($pv, $province)) {
            $option_pv .= "<option value='".$pv."'>".$province[$pv]."</option>\n";
       } elseif ($pv == '-') {
            $option_pv .= "<option value='vuoto'>Nessuna selezione</option>\n";
       }
    }
}

?>

  
<form>
    Città:
        <select name = "pv" >
            <?php echo $option_pv;?>
        </select>
</form>

Vedi se questo codice corrisponde alle tue esigenze.
 
Ultima modifica:
  • Like
Reactions: VAik

VAik

Utente Attivo
16 Apr 2016
117
3
18
si hai centrato l'obiettivo, però non riesco a capire perchè esce quel che esce


mi spiego: ho creato un altro file con il tuo while.
Va bene, vedo nel menù a tendina la sola scelta che è stata memorizzata nell'array.

Non capisco però per il mio codice cosa c'è che non va, visto mi sembra molto simile al tuo.


Se vado a modificare il mio codice, eliminando echo "nessuna selezione" , e mettendo nel menù a tendina "nessuna selezione" cioè così come nel tuo codice

PHP:
$option_pv.= "<option value='vuoto'>nessuna selezione</option>";

per ogni riga della colonna, mi mette nel menù a tendina (che io vado ad aprire) 2 "nessuna selezione", mentre invece dovrebbe essercene solo una (come nel tuo codice).
PEr la riga in cui invece c'è la scelta, per esempio MI, nel menù a tendina esce la scritta Milano, quindi è visualizzata bene, ma se vai ad estendere la tendina ci sono sempre le due "nessuna selezione"
 
Ultima modifica:

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
28
if($pv==$chiave)
[...]
if((
$pv<>'-')or($pv<>'vuoto'))

Guarda, ad esempio, le tue due condizioni.
Tutti i record che escono dalla query, diversi dal trattino, le rispettano entrambe e questo crea un qualche tipo di conflitto.

Prendiamo "MI".

Codice:
"MI" == $chiave => true
"MI" <> "-" or "MI" <> 'vuoto' =  true OR true => true

Se prendiamo il trattino ("-")

Codice:
"-" == $chiave => false
"-" <> "-" or "-" <> 'vuoto' -> false OR true => true

E ogni volta che il confronto risulta TRUE, allora il programma entra nella condizione ed esegue le istruzioni.
A questo va ad aggiungersi il fatto che tu hai utilizzato
PHP:
if () {
}
if () {
}
Ciò significa che il programma andrà a controllare entrambe le condizioni e non si ferma alla prima condizione vera, ignorando l'altra. Questo lo avresti ottenuto scrivendo questo
PHP:
if () {
} elseif () {
}

In questo modo se la prima condizione risulta vera, la seconda viene skippata.

Nel tuo caso la seconda viene eseguita lo stesso e, dato che la seconda condizione risulta vera sia per la sigla della provincia sia per il trattino, l'istruzione ivi contenuta sarà eseguita sempre.
 
  • Like
Reactions: VAik

VAik

Utente Attivo
16 Apr 2016
117
3
18
Sai cosa è successo???

me lo so spiegare, ora che me l'hai fatto notare: quando ci ragioni troppo su uno stesso codice e fai aggiunte, modifiche etc etc, corri il rischio di far rimanere qualcosa che non vorresti.

Ho il risolto il problema così:
modificando la condizione in questo modo
PHP:
if(($pv=='-')or($pv=='vuoto')){



EDIT
EDIT


Ho trovato in internet il tag select con tutte le diverse province di Italia, l'ho inserite nel mio programma di inserimento, ora però ho un problema nella memorizzazione sul db:
se si scegli per esempio la provincia di Cagliari (ma anche le altre province), si memorizza nella tabella
”CA” e non semplicemente CA.
Cosa posso fare per farla memorizzare bene?

apparentemente il form è pari pari a quello che io avevo scirtto
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
S php memorizzare l indirizzo ip quando uno si registra PHP 4
P Problema: come far leggere unintero dvd da php e memorizzare il suo contenuto ???? PHP 38
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
I Eecuzione di javascript in ciclo foreach php. PHP 7

Discussioni simili