Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

FeoS

Problema caracteres PHP e SQL

Mensagens Recomendadas

FeoS

Boas malta, eu estou a meter num select o que vem da base de dados que eu pretendo.. se nao tiver código, se tiver só o select dá perfeitamente e Bragança aparece bem, se eu meter o código aparece mais ou menos "Bragan?a" e depois se meter como estava no inicio sem a parte do codigo que nao tinha no inicio fica igual, nao volta a ficar bem, assim nao consigo descobrir o erro e nunca consigo resolver.. Só consigo voltar a ter bem se apagar a página e fizer o mesmo numa nova, mas sempre que executo com o outro código passa a ficar igual...

Também tenho outro problema, que é quando passo dados do site para a base de dados vai com esses caracteres esquisitos, e depois mesmo a passar da base de dados para o site volta a ficar bem... eu queria que na base de dados tivesse bem, mas tem funcionado porque pelo caminho fazem a transformação não sei como.

O objectivo da página que vos meto aqui é um form...

Ajudem pff, algumas dúvidas eu esclareço...

<?php
include "header.html";
include "db.inc";
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
	if ($id==1)
	{
		$passwordsha1 = sha1($password_utilizador);
		$query="insert into utilizadores values (NULL,'$utilizador','$passwordsha1','$nome_utilizador','$apelido_utilizador','$genero_utilizador','$data_nasc_utilizador','$distrito_utilizador','$concelho_utilizador','$localidade_utilizador','$contacto_utilizador','$email_utilizador')";
		if(!($result = @ mysql_query ($query, $connection)))
			showerror();
		echo '<script language="javascript">alert("Obrigado por se ter registado. Faça Login.")</script>';
		echo "<meta http-equiv='Refresh' content='0; URL=index.php'/>";
	}
	else
	{
		$passwordsha1 = sha1($password_empresa);
		$query="insert into empresas values (NULL,'$empresa','$passwordsha1','$nome_empresa','$distrito_utilizador','$concelho_utilizador','$localidade_utilizador','$contacto_empresa','$fax','$email_empresa')";
		if(!($result = @ mysql_query ($query, $connection)))
			showerror();
		echo '<script language="javascript">alert("Obrigado por se ter registado. Faça Login.")</script>';
		echo "<meta http-equiv='Refresh' content='0; URL=index.php'/>";
	}
}
else
{
	if ($id==1)
        {
?>
<html>
<head>
<title>Registar</title>
    <? include "css.html"; ?>
<script language="javascript" type="text/javascript">
	function validaruser() 
	{
		if (document.registo_utilizador.utilizador.value == "")
		{
			alert("Tem de introduzir um nome de utilizador.");
			document.registo_utilizador.utilizador.focus();
			return false;
		}
		else
		{

		}
	}
	function validarempresa()
	{
		alert("emp");
	}
</script>
</head>
<body>
<table width="50%" align="center" cellspacing="0" cellpadding="0" class="tableout">
        <tr>
            <td width="50%" bgcolor="#CC0000" class="table">
            <br><div align="center" class="titles"><img src="imagens/user.png" width="50" height="50" >Utilizadores</div><br>
            <form name="registo_utilizador" action="registar.php?id=1" method="post" onSubmit="return validaruser()">
                <font size="5">Utilizador: <input class="form" name="utilizador" type="text" maxlength="30" size="32" /><br>
                Password: <input class="form" name="password_utilizador" type="Password" maxlength="12" size="14" /><br>
                Nome: <input class="form" name="nome_utilizador" type="text" maxlength="30" size="32" /><br>
                Apelido: <input class="form" name="apelido_utilizador" type="text" maxlength="30" size="32" /><br>
                Género: M<input  name="genero_utilizador" type="radio" value="Masculino" />
                        F<input  name="genero_utilizador" type="radio" value="Feminino" /><br>
                Data de Nascimento: <input class="form" name="data_nasc_utilizador" type="text" value="AAAA-MM-DD" maxlength="10" size="12" /><br>
                Distrito:
                         <?php
                            echo '<select class="form" name="distrito_utilizador">';
                                echo '<option></option>';
                                $query="select distinct distrito ";
                                $query.="from terras ";
                                $query.="order by distrito ";
                                if (!($result = @ mysql_query ($query,$connection)))
                                    showerror();
                                while ($row=mysql_fetch_array($result))
                                    echo '<option>'.$row["distrito"];
                                echo '</select><br>';
                        ?>
                    Concelho:<br>
                    Localidade:<br>
                    Telefone ou Telemóvel: <input class="form" name="contacto_utilizador" type="text" maxlength="9" size="11" /><br>
                    Email: </font><input class="form" name="email_utilizador" type="text" maxlength="30" size="32" /><br><br>
                    <div align="center"><input class="btverde" name="Submit" value="Registar" type="submit" /></div>
            </form>
            </td>
        </tr>
    </table>
    <?php
    	}
	else
	{
	?>
		<table width="50%" align="center" cellspacing="0" cellpadding="0" class="tableout">
			<tr>
				<td name="registo" width="50%" bgcolor="#339900" class="table">
					<br><div align="center" class="titles"><img src="imagens/house.png" width="50" height="50">Empresas</div><br>
					<form name="registo_empresa" action="registar.php?id=2" method="post" onSubmit="return validarempresa()">
						<font size="5">Empresa: <input class="form" name="empresa" type="text" maxlength="30" size="32" /><br>
						Password: <input class="form" name="password_empresa" type="Password" "12" size="14" /><br>
						Nome da Empresa: <input class="form" name="nome_empresa" type="text" maxlength="30" size="32" /><br>
						Distrito:<br>
						Concelho:<br>
						Localidade:<br>
						Telefone ou Telemóvel: <input class="form" name="contacto_empresa" type="text" maxlength="9" size="11" /><br>
						FAX: <input class="form" name="fax" type="text" maxlength="9" size="11" /><br>
						Email: </font><input class="form" name="email_empresa" type="text" maxlength="30" size="32" /><br><br>
						<div align="center"><input class="btvermelho" name="submit" value="Registar" type="submit" /></div>
					</form>
				</td>
			</tr>
		</table>
	<?php
        }
}
include "footer.html";
?>
</body>
</html>

a parte do javascript não está acabada... Apareceu-me este problema e eu queria resolve-lo antes de fazer as verificações..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ruimcosta

biba,

testa:

echo '<option>'.utf8_encode($row["distrito"]);

Se não funcionar testa com o utf8_decode.


Abraços e beijinhos,Rui Costa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
FeoS

obrigadissimo, essa parte está resolvida do select.

Agora podes-me ajudar na segunda parte do topico?? Eu qnd envio os dados do formulário com acentos.. ele também me insere na base com caracteres esquisitos... Uso o decode antes de meter a variavel na query do sql?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Sim. Ou então usa opções para tudo na DB ser em utf-8.

(se queres código é só pedir)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
FeoS

Sim. Ou então usa opções para tudo na DB ser em utf-8.

(se queres código é só pedir)

eu tenho a db toda como utf8, não sei porque é que isto está a acontecer...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ruimcosta

qual é a codificação da página em que guardas os campos?

Acrescenta isto na 1º linha do php a ver se funciona:

header("Content-type: text/html; charset=iso-8859-1");


Abraços e beijinhos,Rui Costa

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
FeoS

qual é a codificação da página em que guardas os campos?

Acrescenta isto na 1º linha do php a ver se funciona:

header("Content-type: text/html; charset=iso-8859-1");

com essa charset fica o que está escrito na página mal e fica o que tá no select bem.. E com utf8 fica a página bem e o select mal.

EDIT: e o que vai para a bd tb vai bem...

Conclusao: Acho que assim tenho a bd ao contrário, a bd tá em iso-8859-1 , mas eu criei com utf8 e no localhost tá utf8.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Acho ser uma opção.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
oxyzero

No teu ficheiro "header.html", a seguir ao <head> mete isto:

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-15" />

E deve ficar tudo direitinho ;)

Depois diz alguma coisa.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
FeoS

foi o que eu ja disse anterior

com essa charset fica o que está escrito na página mal e fica o que tá no select bem.. E com utf8 fica a página bem e o select mal.

EDIT: e o que vai para a bd tb vai bem...

Conclusao: Acho que assim tenho a bd ao contrário, a bd tá em iso-8859-1 , mas eu criei com utf8 e no localhost tá utf8.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
FeoS

com a charset ISO o que vai para a base de dados vai bem, mas o que está escrito na página está mal...

com a charset utf-8 o que tá na página está bem, mas o que vai para a base de dados vai mal...

a base de dados está em utf-8, pelo menos é o que diz no localhost.

nao sei onde tá o erro, por isso se está a funcionar com o decode e com o encode, deve ser a melhor solução meter a funcionar com isso.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Se tinhas a base de dados num encode diferente de utf-8, tens de apagar o que lá está e voltar a inserir (utf8_general_ci).

O encode da página deve ser também uft-8, e assim escusa-se o uso de funções como utf8_encode.

Deves garantir também que a ligação da bd é feita com esse encode, para impedir certo tipo de situações.

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_general_ci'");

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
FeoS

Se tinhas a base de dados num encode diferente de utf-8, tens de apagar o que lá está e voltar a inserir (utf8_general_ci).

O encode da página deve ser também uft-8, e assim escusa-se o uso de funções como utf8_encode.

Deves garantir também que a ligação da bd é feita com esse encode, para impedir certo tipo de situações.

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_general_ci'");

tenho quase a certeza que tem a ver com esse codigo que eu nunca vi antes, isso tem de ser sempre embutido quando qualquer página abre?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Qual é o encode da BD que lá diz? E qual é o encode do html? E há alguma função no teu código que possa estar a implicar com isso (funçoes de encode, iconv, etc)?

tenho quase a certeza que tem a ver com esse codigo que eu nunca vi antes, isso tem de ser sempre embutido quando qualquer página abre?

Sim, na prática é preferível, mas não é estritamente necessário.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
FeoS

Mapa de Caracteres do mySQL: UTF-8 Unicode (utf8)

e da página tb utf-8

Nao estou a utilizar nenhuma função dessas...

Se eu utilizar um utf8_encode ao que vem da base de dados é que fica bem...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Se eu utilizar um utf8_encode ao que vem da base de dados é que fica bem...

Isso quer dizer que o que está gravado na base de dados não está em UTF-8


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.