Jump to content
FeoS

Problema caracteres PHP e SQL

Recommended Posts

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..

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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%.

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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%.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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'");

Share this post


Link to post
Share on other sites
FeoS

mas é que a minha base de dados qnd foi criada era utf-8 nao percebo...

aquilo está a criar por defeito em utf-8..

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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%.

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

×
×
  • Create New...

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.