Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di E.C.Web
    Registrato dal
    Dec 2011
    Messaggi
    139

    [PHP] Problema Switch e default

    Ciao a tutti ragazzi. Sto rispolverando il php dopo mesi di stop e sono già incappato in un piccolissimo ed alquanto stupido problema.. o almeno credo.
    In breve: sto testando l'operatore switch, ma ho un problema con il valore di default, in pratica mi viene ignorato del tutto, e non mi stampa nulla!

    Questa è la pagina con il form, per l'inserimento dei dati.
    Codice PHP:
    <form id="form1" name="form1" method="post" action="switch_check.php">
    <
    fieldset>
    <
    legend>Inserimento dati</legend>


    <
    label for="nome">Nome</label> <input type="text" name="nome" id="nome" /></p


    <
    label for="ore">Ore</label> <input name="ore" type="text" id="ore" size="2" maxlength="2" /></p


    <
    input type="submit" name="invia" id="invia" value="Invia" /></p>
    </
    fieldset>
    </
    form
    Qui invece vi è lo script di cattura dei dati con il relativo controllo di questi ultimi.

    Codice PHP:
    <?php

    // Catturo i dati via POST
        
        
    $nome $_POST['nome'];
        
    $ore $_POST['ore'];
        
    // Avvio il controllo switch

        
    switch ($ore) {
            case 
    $ore >=&& $ore <= 12:
                echo 
    "Buongiorno $nome, sono le $ore";
            break;
            case 
    $ore >=12 && $ore <= 21:
                echo 
    "Buonasera $nome, sono le $ore";
            break;
            case 
    $ore >=21 && $ore <= 23:
                echo 
    "Buonanotte $nome, sono le $ore";
            break;
            default:
            echo 
    "Non lo so!";
            break;
        }

    ?>
    Funziona tutto, tranne quando provo a far partire il default, ovvero lasciando il campo "ore" vuoto, non succede nulla, nessun messaggio.

    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, potrebbe essre che il campo ora vuoto non venisse riconosciuto perchè non valorizzato.
    Prova a controllare che esista prima con un isset($_POST['ore]).
    Se settato ed ha un valore assegni $ore altrimenti $ore avrà un valore da usare come default.

  3. #3
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    che io ricordi non puoi utilizzare operatori logici nei case ... devi prima assegnare ad una variabile un valore in base all'orario e poi, su quella variabile, farci lo switch

    Codice PHP:
    $ore =$_POST['ore'];
    if(
    $ore=="")
        
    $periodoGiorno null;
    else{
        
    $ore = (int)$ore;
        if(
    $ore>=&& $ore<12)
            
    $periodoGiorno 'giorno';
        elseif(
    $ore>=12 && $ore<21)
            
    $periodoGiorno 'sera';
        elseif(
    $ore>=21 && $ore<=23)
            
    $periodoGiorno 'notte';
    }

    switch(
    $periodoGiorno){
        case 
    'giorno':
            echo 
    "Buongiorno $nome, sono le $ore";
            break;
        case 
    'sera':
            echo 
    "Buonasera $nome, sono le $ore";
            break;
        case 
    'notte':
            echo 
    "Buonanotte $nome, sono le $ore";
            break;
        default:
            echo 
    "Non lo so!";
               break;


  4. #4
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    che io ricordi non puoi utilizzare operatori logici nei case
    per quanto possa essere strano, è una sintassi valida
    Codice PHP:
    switch (true) {
            case 
    $ore >=&& $ore <= 12:
                echo 
    "Buongiorno $nome, sono le $ore";
            break;
            case 
    $ore >=12 && $ore <= 21:
                echo 
    "Buonasera $nome, sono le $ore";
            break;
            case 
    $ore >=21 && $ore <= 23:
                echo 
    "Buonanotte $nome, sono le $ore";
            break;
            default:
            echo 
    "Non lo so!";
            break;
        } 

  5. #5
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    Originariamente inviato da .Kurt
    per quanto possa essere strano, è una sintassi valida
    Codice PHP:
    switch (true) {
            case 
    $ore >=&& $ore <= 12:
                echo 
    "Buongiorno $nome, sono le $ore";
            break;
            case 
    $ore >=12 && $ore <= 21:
                echo 
    "Buonasera $nome, sono le $ore";
            break;
            case 
    $ore >=21 && $ore <= 23:
                echo 
    "Buonanotte $nome, sono le $ore";
            break;
            default:
            echo 
    "Non lo so!";
            break;
        } 
    provata ... ma non funziona ...
    prova a non valorizzare ore oppure a valorizzarlo come ""

  6. #6
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    prova a non valorizzare ore oppure a valorizzarlo come ""
    ho dato per scontato che ci fosse un $ore VALIDO su cui lavorare, più che altro la mia intenzione era di far notare la validità del codice fornito da E.C.Web, non di fornirne uno funzionante
    è ovvio poi che se si butta un pezzo di codice in una qualsiasi parte della pagina potrebbe avere dei risultati imprevedibili

  7. #7
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    su questo sono daccordo, il codice poteva funzionare ma se chiede aiuto sul problema specifico del campo ore vuoto ... non è una soluzione funzionale e non risolve il problema su cui sta chiedendo aiuto, non trovi?

  8. #8
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    non è una soluzione funzionale e non risolve il problema su cui sta chiedendo aiuto, non trovi?
    gliene hai già dato uno tu, pensi che gliene serva un duplicato?
    ancora una volta, la mia intenzione era far notare quella curiosità sullo switch case (che potrebbe essere una sorpresa per uno che viene dal C) non di rispondere al quesito del richiedente con una seconda inutile soluzione.

    se c'è poi la volontà di capire e fare, sono fiducioso che E.C.Web lo possa adattare alle sue esigenze, senza dover copiare e incollare.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.