[PHP] Salvare campo radio in db e leggerlo

  • Creatore Discussione Creatore Discussione VAik
  • Data di inizio Data di inizio

VAik

Utente Attivo
16 Apr 2016
117
3
18
Ciao a tutti ragazzi
sto cercando di memorizzare sul mio db i vari campi textarea, checkbox,radio e select, per poi leggerli.

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

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

Penso che riesce anche a memorizzare sul database in maniera opportuna, però non riesco a far visualizzare con il programma di lettura , la scelta fatta dall'utente.

mi esce appunto
Notice: Undefined index: tipo in C:\Program Files\EasyPHP-......\leggere-radio.php on line 17+

e sotto mi escono i due campi radio non selezionati



Cosa posso fare?


il form
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>vediamo come memorizzare textarea</title>
</head>
<body>
<h3>voglio memorizzare textarea</h3>
<form method="post" action =" ">



<br><br>Che utente sei?<br>
<input type = "radio" name = "tipo" value = "azienda">azienda<br>
<input type = "radio" name = "tipo" value = "privato">privato<br>

<input type="submit" value ="invia dati">
</form>
</body>
</html>


Il programma di memorizzazione
PHP:
<?php

require_once('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));

//vado a recuperare il value
$tipoutente=$_POST['tipo'];
//conterrà azienda o privato



$strsql = "INSERT INTO campi(checkbox,textarea,radio,sel) VALUES ('-','-','$tipoutente','-') ";
$rs = mysqli_query($link, $strsql) or die("Errore query database: " . mysqli_error($link));
if($rs){
    echo"Inserimento avvenuto con successo";
    echo"$tipoutente";
}

?>
Il programma di lettura
PHP:
<?php

//in corrispondenza del campo correttoo, assegnare l'attributo "checked"
//a livello di codice html
/*<?php echo $c1_checked?>*/


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 radio FROM campi";

$rs = mysqli_query($link, $strsql) or die("Errore query database: " . mysqli_error($link));
while ($riga = mysqli_fetch_array($rs)) {
 
    $tipo=$riga['radio'];
  
}

$c1_checked=Null;
$c2_checked=Null;

if(isset($tipo)){

    if($tipo=='azienda'){$c1_checked='checked';}
        elseif($tipo=='privato'){$c2_checked='checked';}
}
 


?>
<form>
<input type = "radio" name = "tipo" value = "azienda<?php echo $c1_checked?>">azienda<br>
<input type = "radio" name = "tipo" value = "privato<?php echo $c2_checked?>">privato<br>
</form>
 
Ultima modifica di un moderatore:
Ciao.

In leggere-radio.php, modifica questa riga
PHP:
$tipo=$riga['tipo'];

con questa
PHP:
$tipo=$riga['radio'];

e vedi se ti dà ancora errore.
 
Grazie AdeKnite
per il tuo intervento , mi hai fatto notare anche un'altra stupidata proveniente da un copia ed incolla precedente, che ho subito modificato.
Ora visualizzo i campi radio ma non compare quello selezionato dall'utente
 
Forse dovevo modificare il campo di input in questo modo.....
Codice:
<input type = "radio" name = "tipo" value = "azienda" checked="<?php echo$c1_checked?>">azienda<br>
<input type = "radio" name = "tipo" value = "privato" checked="<?php echo$c2_checked?>">privato<br>

aspetto conferma dagli esperti, perchè non funziona bene: compare sempre lo stesso risultato per tutte le righe del db
 
Ultima modifica:
Ciao AdeKnite, mi spiego meglio:
c'è il primo file dove l'utente deve selezionare la scelta ed inviare i dati ad un secondo file.
Questo secondo file li memorizza nel db. Il terzo file deve mostrare la scelta effettuata dall'utente, cioè il tondino selezionato
 
Prova così.
PHP:
<form>
<input type = "radio" name = "tipo" value = "azienda" <?php echo $c1_checked?>>azienda<br>
<input type = "radio" name = "tipo" value = "privato" <?php echo $c2_checked?>>privato<br>
</form>


E le variabili che ti determinano il check inizializzale in questo modo.
PHP:
$c1_checked=''; // stringa vuota
$c2_checked=''; // stringa vuota
 
  • Like
Reactions: VAik
ciao,
ho apportato le modifiche che mi hai suggerito, e mi sembra che funzioni bene, ma non riesco a capire quale è la novità? aver usato ' ' al posto di null?
 
Nel primo caso, ossia il seguente
PHP:
<input type = "radio" name = "tipo" value = "azienda" <?php echo $c1_checked?>>azienda<br>
probabilmente funziona lo stesso anche inizializzando le variabili a Null. Quando hai provato tu non ha funzionato poiché il codice PHP che avevi scritto produceva un HTML distorto. Infatti questo codice
PHP:
<form>
<input type = "radio" name = "tipo" value = "azienda<?php echo $c1_checked?>">azienda<br>
<input type = "radio" name = "tipo" value = "privato<?php echo $c2_checked?>">privato<br>
</form>

produce questo html che, come vedi, non è quello che intendevi ottenere tu.
HTML:
<form>
<input type = "radio" name = "tipo" value = "aziendachecked">azienda<br>
<input type = "radio" name = "tipo" value = "privato">privato<br>
</form>


Nel secondo caso che hai provato (quello in cui specifichi l'attributo 'checked'), invece, avresti come html di output il seguente
HTML:
<input type="radio" name="sdf" checked="checked">Azienda<br>
<input type="radio" name="sdf" checked="">Privato <!--problemi-->
e questo crea conflitto.

Un'altra soluzione, comunque, era inizializzare entrambe le variabili con 'unchecked' e poi cambiare il valore del radio selezionato a 'checked'.
 
  • Like
Reactions: VAik
Grazie, forse ho intravisto la leggera differenza del codice.....grazie

Vorrei capire un po' meglio la tua ultima soluzione,

come si fa ad inizializzare inizialmente le variabili con 'unchecked' nel tag input?
 
Non nel tag input. Intendo la stessa identica cosa che hai fatto tu dall'inizio, solo che al posto di settare $c1_checked = Null o $c1_checked = '', setti $c1_checked = 'unchecked'.
 
  • Like
Reactions: VAik
ok, grazie molte dei consigli.

Oggi lo rimetto a posto e commento un po' di cose
 
se volessi memorizzare altre info tramite la scelta dei radio (ora abbiamo fatto gli interessi, per esempio vorrei creare la scelta per il colore preferito tanto per dirne una) devo prevedere sulla tabella del mio db un ulteriore colonna in cui memorizzare l'altra scelta, giusto?
e poi aumentare gli assegnamenti che sono stati fatti nel file di lettura per adeguarli alle scelte che si fanno (cioè altre variabili di assegnamento di riga vuota ed altre variabili a cui assegnare checked)

l'ho anche provata e funziona.

Ora ti vorrei chiedere, ma una cosa del genere come la si può sfruttare nella realtà?
dico per esempio in un sito....come può essere utile?
 
se volessi memorizzare altre info tramite la scelta dei radio (ora abbiamo fatto gli interessi, per esempio vorrei creare la scelta per il colore preferito tanto per dirne una) devo prevedere sulla tabella del mio db un ulteriore colonna in cui memorizzare l'altra scelta, giusto?
Sì, di solito si tende a disporre di un'ulteriore colonna.


Ora ti vorrei chiedere, ma una cosa del genere come la si può sfruttare nella realtà?
dico per esempio in un sito....come può essere utile?
Tornano utili ogni qualvolta ci sia bisogno di conservare delle informazioni che dovranno poi essere recuperate in seguito. Tali informazioni possono riguardare direttamente l'utente (Maschio/Femmina) fino ad arrivare a informazioni più tecniche come le impostazioni di personalizzazione sul sito (lo schema di colori da visualizzare, ad esempio). I casi sono davvero molti.
 
quindi bene o male la memorizzazione di questi dati è quella vista.
Cosa cambia invece è la lettura, che poi a seconda dei casi si arriva a stravolgere quello che abbiamo visto con l'ultimo programma?
 
La lettura avviene comunque attraverso una SELECT, ciò che cambia è l'utilizzo che viene fatto del dato. Può essere stampato a video o utilizzato internamente al programma (fattori decisionali, confronto, e quant'altro).
 
  • Like
Reactions: VAik

Discussioni simili