Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
DeFigueiredo

Não consigo corrigir erro....

Recommended Posts

DeFigueiredo

Boas malta

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="estilo.css"/>
        <title>Formulário Validar Número</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <div class="centro">
            <form method="POST" action="ficha_4_valida.php">
                Introduza um número entre 0 e 99999: <input type="text" id="num" name="num" type="text" size="19" maxlength="7"/>
                <br><br>Escolha o Idioma:</br></br>
                <br>PT - Portugal <input type="radio" name="lingua" value="PT" checked="cheked"/></br>
                <br>EN - Inglês <input type="radio" name="lingua" value="EN"/></br>
                <p><input type="submit" id="Ver Leitura" name="Ver Leitura" onclick="numero();"/></p>
            </form>
        </div>
    </body>
</html>

...

<!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <link rel="stylesheet" type="text/css" href="estilo.css"/>
        <title>Leitura Recursiva de um Numero</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    </head>
    <body>
        <div class="centro">

            <?php
			function numero_PT_EN($num, $lingua){
                    $tam = strlen($num);

				//Faz a verificação da linguagem e compara as posições com o tamanho do número inserido
                    if ($lingua == "PT"){                 
					for($pos_num = 0; $pos_num <= $tam - 1; $pos_num++){

                            if (($tam - $pos_num - 1 == 0) || ($tam - $pos_num - 1 == 3))
                                unidade_PT($num, $pos_num, $tam - $pos_num - 1);
						elseif (($tam - $pos_num-1 == 1) || ($tam - $pos_num - 1 == 4))
                                $pos_num = dezena_PT($num, $pos_num, $tam - $pos_num - 1);
						else
                                centena_PT($num, $pos_num, $tam - $pos_num - 1);
						if ($tam - $pos_num - 1 == 3)
                                if ($num{$i+1} == 0 )
                                    print(" Mil ");
                                else
                                    print(" Mil e ");	
                        }
                    }else{
                        for($pos_num = 0; $pos_num <= $tam - 1; $pos_num++){
                            if (($tam - $pos_num - 1 == 0) || ($tam - $pos_num - 1 == 3))
                                unit_EN($num, $pos_num, $tam - $pos_num - 1);
                            elseif (($tam - $pos_num-1 == 1) || ($tam - $pos_num - 1 == 4))
                                $pos_num = dozen_EN($num, $pos_num, $tam - $pos_num - 1);
                            else
                                hundred_EN($num, $pos_num, $tam - $pos_num - 1);
                            if ($tam - $pos_num - 1 == 3)
                                print(" Thousand ");
						else
                                print(" Thousand and ");                                          
                        }
                    } 
			}

			//Função para números de 1 a 10
                function unidade_PT($unidade, $pos_num, $pos_actual){
                    
                    switch ($unidade{$pos_num}){
                    case '0': 
                        if (strlen($unidade) == 1)
                            print("Zero ");break;
                    case '1': if ($pos_actual != 3 || $pos_num >= 1)
                                print("Um");break;
                    case '2': print("Dois ");break;
                    case '3': print("Tres ");break;
                    case '4': print("Quatro ");break;
                    case '5': print("Cinco ");break;
                    case '6': print("Seis ");break;
                    case '7': print("Sete ");break;
                    case '8': print("Oito ");break;
                    case '9': print("Nove ");
                    }
                }

			//Função para números de 10 a 19 e dezenas
                function dezena_PT($dezena, $pos_num, $pos_actual){
                    
                    switch ($dezena{$pos_num}){
                    case '0': print("");break;
                    case '1': switch($dezena{$pos_num+1}){
                                case '0': print("Dez ");break;
                                case '1': print("Onze ");break;
                                case '2': print("Doze ");break;
                                case '3': print("Treze ");break;
                                case '4': print("Catorze ");break;
                                case '5': print("Quinze ");break;
                                case '6': print("Dezasseis ");break;
                                case '7': print("Dezassete ");break;
                                case '8': print("Dezoito ");break;
                                case '9': print("Dezanove ");break;
                                }
                                return ++$pos_num;
                    case '2': print("Vinte ");break;
                    case '3': print("Trinta ");break;
                    case '4': print("Quarenta ");break;
                    case '5': print("Cinquenta ");break;
                    case '6': print("Sessenta ");break;
                    case '7': print("Setenta ");break;
                    case '8': print("Oitenta ");break;
                    case '9': print("Noventa ");
                    }

                    
                    if ($dezena{$pos_num + 1} != 0 && ($pos_actual < 3 && $dezena{$pos_num + 1} != 0))
                        print ("e ");
                    return $pos_num;
                }

			//Função para centenas
                function centena_PT($centena,$pos_num,$pos_actual){
                    
                    switch ($centena{$pos_num}){
                    case '0': print("");break;
                    case '1': if (($centena{$pos_num + 1}  == '0') && ($centena{$pos_num + 2}  == '0'))
                                print("Cem ");
                              else
                                print("Cento ");break;
                    case '2': print("Duzentos ");break;
                    case '3': print("Trezentos ");break;
                    case '4': print("Quatrocentos ");break;
                    case '5': print("Quinhentos ");break;
                    case '6': print("Seiscentos ");break;
                    case '7': print("Setecentos ");break;
                    case '8': print("Oitocentos ");break;
                    case '9': print("Novecentos ");
                    }
                    if (($centena{$pos_num + 1} != 0) || ($centena{$pos_num + 1} != 0))
                        print ("e ");                        
                }

			//Função para números de 1 a 10 em INGLÊS
                function unit_EN($unit, $pos_num, $pos_actual){

                    switch ($unit{$pos_num}){
                    case '0':
                        if (strlen($unit) == 1)
						print("zero ");break;
                    case '1': print("One ");break;
                    case '2': print("Two ");break;
                    case '3': print("Three ");break;
                    case '4': print("Four ");break;
                    case '5': print("Five ");break;
                    case '6': print("Six ");break;
                    case '7': print("Seven ");break;
                    case '8': print("Eight ");break;
                    case '9': print("Nine ");
                    }
                }

			//Função para números de 10 a 19 e dezenas em INGLÊS
                function dozen_EN($dozen, $pos_num, $pos_actual){

                    switch ($dozen{$pos_num}){
                    case '0': print("");break;
                    case '1': switch($dozen{$pos_num + 1}){
                                case '0': print("Ten ");break;
                                case '1': print("Eleven ");break;
                                case '2': print("Twelve ");break;
                                case '3': print("Thirteen ");break;
                                case '4': print("Fourteen ");break;
                                case '5': print("Fifteen ");break;
                                case '6': print("Sixteen ");break;
                                case '7': print("Seventeen ");break;
                                case '8': print("Eighteen ");break;
                                case '9': print("Nineteen ");break;
                                }
                                return ++$pos_num;
                    case '2': print("Twenty ");break;
                    case '3': print("Thirty ");break;
                    case '4': print("Fourty ");break;
                    case '5': print("Fifty ");break;
                    case '6': print("Sixty ");break;
                    case '7': print("Seventy ");break;
                    case '8': print("Eighty ");break;
                    case '9': print("Ninety ");
                    }
                    return $pos_num;
                }

			//Função para centenas em INGLÊS
                function hundred_EN($hundred, $pos_num, $pos_actual){

                    switch ($hundred{$pos_num}){
                    case '0': print("");break;
                    case '1': print("One hundred ");break;
                    case '2': print("Two hundred ");break;
                    case '3': print("Tree hundred ");break;
                    case '4': print("Four hundred ");break;
                    case '5': print("Five hundred ");break;
                    case '6': print("Six hundred ");break;
                    case '7': print("Seven hundred ");break;
                    case '8': print("Eight hundred ");break;
                    case '9': print("Nine hundred ");
                    }
                    if (($hundred{$pos_num + 1} != 0) || ($hundred{$pos_num + 1} != 0))
                        print ("and ");
                }

			//Pedir o numero
			function numero(){

                    if (isset($_POST["num"])){
                        $num = $_POST["num"];
                        if (is_numeric($num) == false ){
                            print("Dado nao numerico");
                            return false;
                        }

					if ($num == null){
						print("Valor nao enviado");
						return false;
					}

					if ($num < 0){
						print("Numero inferior a 0(zero)");
						return false;
					}
  
					if ($num > 99999){
						print("Numero maior que 99999");
						return false;
					}
                        return true;
                    }
                    }
                    if (numero() == true){
                        print "O número pedido foi: ";
                        numero_PT_EN($_POST["num"], $_POST["lingua"]);
                    }
            ?>
        </div>
    </body>
</html>

O que acontece é o seguinte o objectivo é receber os dados atraves de um formulario e depois apresentar o resultado da leitura do numero...

Mas está a dar erro e nao consigo identificar onde... ja vi e revi e nao encontro, provavelmente é do cansaço que já não vejo grande coisa....


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
DeFigueiredo

os erros são estes:

Notice: Undefined index: num in C:\ServidorWeb\htdocs\ficha_4_valida.php  on line 200

Warning: Missing argument 2 for numero_PT_EN(), called in C:\ServidorWeb\htdocs\ficha_4_valida.php on line 200 and defined in C:\ServidorWeb\htdocs\ficha_4_valida.php on line 15

Notice: Undefined variable: lingua in C:\ServidorWeb\htdocs\ficha_4_valida.php on line 24


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites
pedrotuga

Deves estar a tentar aceder a um elemento do array $_POST que não existe. Ora imprime lá o conteudo do post:

echo "<pre>".print_r($_POST)."</pre>";

http://wiki.portugal-a-programar.pt/dev_web:php:problemas_comuns_em_php#como_ver_o_conteudo_de_um_array

PS:tenta afixar pedaços de código mais pequenos e assinalar a linha onde dá erro. Mas olha que isso é apenas um warning, não é um erro.

Share this post


Link to post
Share on other sites
DeFigueiredo

Os problemas estão resolvidos... desde já muito obrigado.

Apenas foi necessário descansar um bocadinho e voltar a olhar com outros olhos para o projecto, e reparei logo nos erros.

yoda tens toda a razao eu esqueci.me de colocar a as linhas e a função gotoline.... Sorry

Pedro tens razão nao são erros mas um warning a dizer que so estavaa passar um de dois argumentos

Obrigado a todos


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.