Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Semplice cifrario di cesare

    Salve a tutti, sono nuovo in questo forum. Sono nuovo in campo Php e lo studio a livello scolastico.
    Ultimamente mi dilettavo a creare un piccolo cifrario di cesare (che migliorerò con il tempo), però ho riscontrato un piccolo problema. Di per sé il programma funziona, ma ci sono due problemi (posto il codice qui di seguito):

    Codice PHP:
    <html>
     <head>
       <title>Cifrario di Cesare</title>
     </head>

     <body>
       <form method = "GET">
         Frase da criptare: <input name = "Text" type = "text">
     </form>

       Frase criptata:

       <?php
       $alfabeto 
    = array('a''b''c''d''e''f''g''h''i''j',
                         
    'k''l''m''n''o''p''q''r''s''t',
                         
    'u''v''w''x''y''z');  // array alfabeto

       
    $cript $_GET['Text'];
       
    $lenght strlen($cript);               // trovo la lunghezza del testo
       
    $key 5;                               // chiave di spostamento
       
    $newText = array();                    // variabile dove si salva il testo criptato


        
    for($i 0$i $lenght$i++){
          for(
    $j 0$j 27$j++){
            if(
    $cript[$i] == $alfabeto[$j]){                         // qui comparo l'elemento con indice $i della stringa da criptare con                                                      // l' array alfabeto, il quale indice si incrementa per prima per trovare la
                                                                    // corrispondenza. Una volta trovato che l'elemento della stringa $cripto è
                                                                    // uguale all' elemento dell' array alfabeto, lo associo a quest'ultimo. Dopodiché
                                                                    // per codificare, sommo il valore dell' indice con la chiave per trovare l'elemento corrispondente
              
    $newText[] = $alfabeto[($j $key) % 26];            // e faccio il modulo così che se la somma sfiori il limite massimo, parta dall' inzio.
              
    echo $newText[$i];
            } } }

      
    ?>

     </body>

    </html>
    1 - mi stampa la frase criptata con le lettere una sotto l'altra;

    2 - sotto ogni lettera esce un messaggio di errore che dice :
    "Notice: Undefined offset: 26 in C:\Users\Francesco\Desktop\Php\cesare.php on line 26"

    potreste suggerirmi come risolvere, perfavore? Ci sto sbattendo la testa da un paio di giorni ma non sono giunto a una conclusione concreta. Grazie a chiunque mi aiuterà.
    Ultima modifica di plaztinum; 04-02-2018 a 12:34

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Benvenuto.

    1) usa il metodo POST invece di GET, così i dati non vengono inviati nel link, nel tuo caso cambia poco, ma è meglio abituarsi per futuri progetti in cui risulterà fondamentale

    2) il codice PHP eseguilo solo se dei dati sono stati inviati, così com'è il tuo codice, lo esegui anche appena arrivi sulla pagina e prova a criptare la stringa vuota
    Per farlo, prima di "Frase criptata" metti
    Codice PHP:
    <?php
    if ( isset($_POST) && ! empty($_POST) )
    {
    ?>
    poi prima del tuo ?> aggiungi una } per chiudere l'if.

    3) qui
    for($j = 0; $j < 27; $j++){

    devi mettere
    for($j = 0; $j < 26; $j++){

    perché hai 26 lettere, non 27

    4) le lettere una sotto l'altra sono causate dai messaggi d'errore, sistemati gli errori, troverai la stringa tutta su una riga.

  3. #3
    Mi è stato di grande aiuto! La ringrazio

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 © 2024 vBulletin Solutions, Inc. All rights reserved.