Visualizzazione risultati 1 fino 6 di 6

Discussione: Creazione Form in php con un campo testo attivabile in base alle scelte dell'utente

  1. #1
    easyservice non è connesso Utente AlterBlog
    Data registrazione
    25-08-2018
    Messaggi
    3

    Predefinito Creazione Form in php con un campo testo attivabile in base alle scelte dell'utente

    Buonasera,
    ho creato (con dreamweaver cs 5.5) un semplice form per la gestione di un sondaggio (php e mysql)con un radio button "SI", "NO", "Altro (specificare)".
    Vorrei inserire la possibilità che, in base alle scelta dell'utente su "Altro (specificare)" si possa visualizzare un campo in cui inserire liberamente del testo da registrare nel database in alternativa alle scelte "SI" "NO". Potete suggerirmi lo script da utilizzare?
    Come eliminare l'inconveniente di un'accidentale variazione della scelta effettuata posto che cliccando su qualsiasi parte del form la selezione passa automaticamente su "Sì"?
    Il testo relativo al campo testo opzionale necessita di un nuovo record in Mysql autonomo o può confluire in quello previsto alternativamente per le altre due opzioni (Sì - No)?

    Grazie per l'attenzione dedicatami

    Ecco il codice attuale:


    <?php require_once('../Connections/Localhost.php'); ?>
    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
    {
    if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
    }

    $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

    switch ($theType) {
    case "text":
    $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
    break;
    case "long":
    case "int":
    $theValue = ($theValue != "") ? intval($theValue) : "NULL";
    break;
    case "double":
    $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
    break;
    case "date":
    $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
    break;
    case "defined":
    $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
    break;
    }
    return $theValue;
    }
    }

    $editFormAction = $_SERVER['PHP_SELF'];
    if (isset($_SERVER['QUERY_STRING'])) {
    $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
    }

    if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "FormSondaggio")) {
    $insertSQL = sprintf("INSERT INTO SondaggioPediatria (`1`) VALUES (%s)",
    GetSQLValueString($_POST['RadioGroup1'], "text"));

    mysql_select_db($database_Localhost, $Localhost);
    $Result1 = mysql_query($insertSQL, $Localhost) or die(mysql_error());
    }

    mysql_select_db($database_Localhost, $Localhost);
    $query_Recordset1 = "SELECT * FROM SondaggioPediatria";
    $Recordset1 = mysql_query($query_Recordset1, $Localhost) or die(mysql_error());
    $row_Recordset1 = mysql_fetch_assoc($Recordset1);
    $totalRows_Recordset1 = mysql_num_rows($Recordset1);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Sondaggio</title>
    </head>

    <body>
    <label><form action="<?php echo $editFormAction; ?>" id="FormSondaggio" name="FormSondaggio" method="POST">
    <fieldset>
    <legend>Questionario </legend>
    <ul class="list-0 form-line clear-fix">
    <li class="block form-line-33x33x33">
    <div>
    <label for="1">1 *</label>
    <strong>Ti piace la pizza margherita?</strong></div>
    <div class="form-field"> </div>
    <div class="form-field"></div>
    <div class="form-field">
    <table width="200">
    <tr>
    <td><label>
    <input type="radio" name="RadioGroup1" value="Si" id="RadioGroup1_0" />
    Sì</label></td>
    </tr>
    <tr>
    <td><label>
    <input type="radio" name="RadioGroup1" value="No" id="RadioGroup1_1" />
    No</label></td>
    </tr>
    <tr>
    <td><label>
    <input type="radio" name="RadioGroup1" value="Testo libero 1" id="RadioGroup1_2" />
    Altro (specificare)</label></td>
    </tr>
    </table>
    </div>
    </li>
    </ul>
    <p>
    <input type="reset" name="button" id="button" value="Ripristina" />
    <input type="submit" name="button2" id="button2" value="Invia" />
    </p>
    <p>&nbsp;</p>
    </fieldset>
    <input type="hidden" name="MM_insert" value="FormSondaggio" />
    </form></label>
    </body>
    </html>
    <?php
    mysql_free_result($Recordset1);
    ?>

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,150

    Predefinito

    Vorrei inserire la possibilità che, in base alle scelta dell'utente su "Altro (specificare)" si possa visualizzare un campo in cui inserire liberamente del testo da registrare nel database in alternativa alle scelte "SI" "NO". Potete suggerirmi lo script da utilizzare?
    Puoi realizzarlo tramite JavaScript. Come prima cosa, aggiungi il codice HTML per l'input testuale "altro". Questo campo sarà inizialmente disabilitato. Quando l'utente clicca sul radio button "altro", tramite un event listener JavaScript, puoi abilitare l'input rimuovendo l'attributo disabled, cosicché l'utente possa scriverci. Puoi anche fare in modo che selezionando "sì" o "no" l'input venga nuovamente disabilitato.
    Un'altra possibilità è nascondere o mostrare l'input tramite CSS, anziché disabilitarlo. La procedura è la stessa, devi solo aggiungere la regola display: none; anziché l'attributo disabled, sempre tramite JavaScript.

    Come eliminare l'inconveniente di un'accidentale variazione della scelta effettuata posto che cliccando su qualsiasi parte del form la selezione passa automaticamente su "Sì"?
    Sempre tramite JavaScript puoi associare un event listener al form: quando riceve un click, viene automaticamente selezionato il "sì". L'unica accortezza è di bloccare la propagazione dell'evento "click" quando, ad essere cliccati, sono i radio button o altri elementi analoghi.
    Tuttavia non mi sembra una buona idea, credo sia molto meglio se l'unica azione in grado di modificare lo stato del form sia il click "esplicito" su un campo input (o una sua label). Assumere che un click "a vuoto" sia implicitamente un "sì" mi sembra un po' troppo forte.

    Il testo relativo al campo testo opzionale necessita di un nuovo record in Mysql autonomo o può confluire in quello previsto alternativamente per le altre due opzioni (Sì - No)?
    Questo lo puoi sapere solo tu
    Dipende da come hai definito lo schema, quali colonne hai previsto e qual'è il loro significato. Per un sistema di sondaggi in cui le opzioni sono "sì, no, altro" mi immaginerei una tabella di questo tipo:
    Codice:
    CREATE TABLE voto(
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        id_sondaggio INT UNSIGNED NOT NULL,
        risposta INT UNSIGNED NOT NULL,
        altro VARCHAR(255) NULL,
        PRIMARY KEY(id),
        CONSTRAINT fk_voto_sondaggio FOREIGN KEY (id_sondaggio) REFERENCES sondaggio(id)
        ON UPDATE CASCADE ON DELETE CASCADE
    );
    eventualmente con altre informazioni (es. sull'utente che ha votato, il timestamp...).
    Con una struttura di questo tipo puoi utilizzare 0, 1, 2 come valori della colonna risposta per rappresentare sì, no, altro, e la colonna altro per il contenuto dell'omonimo input (che sarà significativo solo quando risposta = 3).

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  3. #3
    easyservice non è connesso Utente AlterBlog
    Data registrazione
    25-08-2018
    Messaggi
    3

    Predefinito

    Prima di tutto grazie per la tua cortesia e disponibilità. In Dreamwaver ho capito come inserire uno script js ma non so come impostare un evento listner. Potresti, per favore, suggerirmi lo script per attivare/disattivare un campo testo che chiamerò "Suggerimenti"

    Vorrei, inoltre, per impedire variazioni accidentali, eliminare la selezione automatica su "SÌ" quando si clicca su qualsiasi parte del form.

    È possibile mpostare il valore del button "altro" con una variabile che legga il contenuto del campo di testo "suggerimenti?

    Grazie in anticipo

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,150

    Predefinito

    Prima di tutto grazie per la tua cortesia e disponibilità. In Dreamwaver ho capito come inserire uno script js ma non so come impostare un evento listner. Potresti, per favore, suggerirmi lo script per attivare/disattivare un campo testo che chiamerò "Suggerimenti"
    Certo! Questo codice fa riferimento a quello che hai mostrato tu, al quale ho solo aggiunto il campo Suggerimenti in questo modo:
    Codice HTML:
    <input type="text" name="Suggerimenti" id="input_suggerimenti" disabled="disabled" />
    (può essere inserito in una posizione qualunque nell'HTML). Il JavaScript è questo:
    Codice:
    <script>
    var input_altro = document.getElementById('RadioGroup1_2');
    var input_suggerimenti = document.getElementById('input_suggerimenti');
    var input_radios = document.forms['FormSondaggio'].elements['RadioGroup1'];
    
    for (var i = 0; i < input_radios.length; ++i) {
        input_radios[i].addEventListener('click', function () {
            if (input_altro.checked) {
                input_suggerimenti.disabled = false;
            }
            else {
                input_suggerimenti.disabled = true;
            }
        });
    }
    </script>
    Ad input_altro "associ" il radio button "Altro", ad input_suggerimenti il nuovo campo testuale "Suggerimenti", e ad input_radios il vettore che "contiene" i tre radio button.
    A ciascuno di essi, tramite il ciclo for associ un event listener: ogni volta che uno dei tre pulsanti viene cliccato, si controlla si il radio_button altro è selezionato. Se lo è, si abilita il campo testuale (disabled = false), altrimenti lo si disabilita (disabled = true).

    Vorrei, inoltre, per impedire variazioni accidentali, eliminare la selezione automatica su "SÌ" quando si clicca su qualsiasi parte del form.
    Avevo capito il contrario
    Quello che vuoi ottenere è il comportamento standard di un form. Se attualmente cliccando un punto casuale del form viene selezionato il "Sì", vuol dire che da qualche parte c'è uno script JavaScript che sta implementando questa funzionalità. Dovresti cercarlo e rimuoverlo.

    È possibile mpostare il valore del button "altro" con una variabile che legga il contenuto del campo di testo "suggerimenti?
    Probabilmente sì, ma non ho capito bene cosa intendi.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  5. #5
    easyservice non è connesso Utente AlterBlog
    Data registrazione
    25-08-2018
    Messaggi
    3

    Predefinito

    Ciao mzanella, grazie per lo script.

    Relativamente all'ultimo quesito:

    È possibile impostare il valore del button "altro" con una variabile che legga il contenuto del campo di testo "suggerimenti?
    Probabilmente sì, ma non ho capito bene cosa intendi.


    vorrei far sì che, selezionando la scelta "altro", il valore da inserire nell'unica colonna del database corrispondesse al testo digitato nel campo "suggerimenti".
    Hai una soluzione (sperando di essere stato un po' più chiaro )

    Grazie

  6. #6
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,150

    Predefinito

    Ok se ho capito bene vuoi che, se è stato selezionato "altro", all'interno della base di dati venga inserito il testo digitato dall'utente.

    Quando l'utente invia il form, nella pagina di destinazione PHP hai a disposizione la variabile $_POST che contiene tutti i dati inviati, tra cui anche $_POST['Suggerimenti'] che puoi usare per l'inserimento nel database. La struttura della query dipende da com'è strutturata la tabella che stai utilizzando.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •