[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
30
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
30
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
30
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
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

Discussioni simili