Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Web 1

Gravar com enctype="multipart/form-data"

Recommended Posts

Olá pessoal, estou usando um upload sem componente, e estou tentando gravar no MYSQL em utf-8, porem os caracteres gravam com caracteres invalidos, ja fiz testes e isso ocorre porque no formulario esta o enctype="multipart/form-data", quando tira ele funciona.

 

Como posso resolver isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

poste seu code

Compartilhar este post


Link para o post
Compartilhar em outros sites

form.asp

 

<!--#include file="config.asp" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/sistema.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title><%=TituloSite%></title>
<!-- InstanceEndEditable -->

<LINK href="css/estilo.css" rel=STYLESHEET type=text/css>
<!-- InstanceBeginEditable name="head" -->
<!-- InstanceEndEditable -->
</head>

<body>

<table width="980" height="80" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><a href="painel.asp"><img src="imagens/topo1.png" width="280" height="50" border="0"></a></td>
</tr>
</table>

<table width="980" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><!-- InstanceBeginEditable name="conteudo" -->

<img src="imagens/cadastro.png" width="25" height="25" hspace="5" vspace="5" align="absmiddle" />
<span class="Titulo_a">Administrador - Cadastro</span><br /><br />

<script language="JavaScript" type="text/javascript">
function valida_campo()
{
  <!--
    var nome = document.form.nome.value
  if (nome=="")
  {
    alert("Preencha o nome.");
    document.form.nome.focus()
    return false
  }
  
  
  
  var email = document.form.email.value
  if (email=="")
  {
    alert("Preencha o email.");
    document.form.email.focus()
    return false
  }
  var email = document.form.email.value
  if (email==""|| email.indexOf("@", 0) == -1 ||  email.indexOf(".", 0) == -1)
  {
    alert("Email incorreto!");
    document.form.email.focus()
    return false
  }
   
   
  var login = document.form.login.value
  if (login=="")
  {
    alert("Preencha o login.");
    document.form.login.focus()
    return false
  }
   
  
  var senha=document.form.senha.value;
  if (senha=="")
  {
    alert("Preencha a senha.")
    document.form.senha.focus()
    return false
  }
  
   var mins=1;
if (document.form.senha.value.length < mins) {
alert("Sua senha deve ter no mínimo 4 caracteres");
document.form.senha.select();
return false;
  
  }
    var senha2=document.form.senha2.value;
  if (senha2=="")
  {
    alert("Repetir a senha!")
    document.form.senha2.focus()
    return false
  }
  
  if ((document.form.senha.value) != (document.form.senha2.value)) {
alert("As senhas digitadas não conferem!");
document.form.senha.focus();
document.form.senha2.select();
return false;
}


}
//-->
</script>

<form action="cadastra.asp?cadastra=S" method="post" enctype="multipart/form-data" name="form" id="form" onsubmit="return valida_campo()">
<table width="100%" border="0" cellpadding="2" cellspacing="0">
    
          <tr> 
            <td width="150" class="textoform">Nome:</td>
            <td><input name="nome" type="text" class="CampoForm_a" id="nome" size="50" maxlength="255" /></td>
          </tr>
          <tr>
            <td class="textoform">E-mail:</td>
            <td><input name="email" type="text" id="email" size="30" maxlength="255" class="CampoForm_a" /></td>
          </tr>
          <tr>
            <td class="textoform">Login:</td>
            <td><input name="login" type="text" id="login" size="20" maxlength="255" class="CampoForm_a" /></td>
          </tr>
          <tr>
            <td class="textoform">Senha:</td>
            <td><input name="senha" type="password" id="senha" size="10" maxlength="10" class="CampoForm_a" /></td>
          </tr>
          <tr>
            <td class="textoform">Confirmar Senha:</td>
            <td><input name="senha2" type="password" id="senha2" size="10" maxlength="10" class="CampoForm_a" /></td>
          </tr>
          <tr>
            <td class="textoform">Nível:</td>
            <td><%
Call abre_conexao1(ConnString,Conn)
Set RScateg1 = Server.CreateObject("ADODB.Recordset") 
msql = "SELECT * FROM nivel"
RScateg1.Open msql, Conn,3,3
%>
              <select name="nivel" id="nivel" class="CampoForm_a">
                <%
while not RScateg1.eof
categoria1=RScateg1("NivId")
categoria1v=RScateg1("NivNome")
%>
                <option value="<%=categoria1%>"><%=categoria1v%></option>
                <%
RScateg1.movenext
wend
RScateg1.Close 
Set RScateg1 = Nothing 
Call fecha_conexao1()
%>
            </select></td>
          </tr>
          <tr>
            <td class="textoform">Imagem:</td>
            <td><input name="imagem1" type="file" id="imagem1" size="40" class="CampoForm_a" />
           0 Pixels</td>
          </tr>
          <tr> 
            <td class="textoform">Aprovado:</td>
            <td> 
              <input name="aprovado" type="radio" value="S" class="CampoForm_a" checked="checked" />
              Sim 
              <input name="aprovado" type="radio" value="N" class="CampoForm_a" />
              Não</td>
          </tr>
          <tr> 
            <td height="32"></td>
            <td class="textos"> 
              <input name="submit" type="submit" id="submit" class="BotaoForm_a" value="Cadastrar" /> 
          
              <input name="button" type="button" onclick="history.go(-1)" value="Não Cadastrar" class="BotaoForm_a" />
          </td>
          </tr>
     
      </table>

</form>



<!-- InstanceEndEditable --></td>
</tr>
</table>

<table width="980" height="40" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td></td>
</tr>
</table>

</body>
<!-- InstanceEnd --></html>

 

cadastra.asp

 

 

<!--#include file="config.asp" -->
<!-- #include file = "funcoesupload.asp" -->
<%
If Request.Querystring("cadastra")="S" Then

' Chamando Funções, que fazem o Upload funcionar
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin

' Recuperando os Dados Digitados ----------------------
nome = replace(UploadRequest.Item("nome").Item("Value"), "'", "")
email = replace(UploadRequest.Item("email").Item("Value"), "'", "")
login = replace(UploadRequest.Item("login").Item("Value"), "'", "")
senha = replace(UploadRequest.Item("senha").Item("Value"), "'", "")
nivel = UploadRequest.Item("nivel").Item("Value")
aprovado = UploadRequest.Item("aprovado").Item("Value")

Function DataMySQL_data(d_Data)
dim d_Dia, d_Mes
d_Dia = Day(d_Data)    
d_Mes = Month(d_Data)    
If d_Dia <= 9 Then d_Dia = d_Dia 
If d_Mes <= 9 Then d_Mes = d_Mes 
DataMySQL_data = Year(d_Data) & "-" & d_Mes & "-" & d_Dia
End Function

Function DataMySQL_hora(h_Data)
dim h_Horas, h_Minutos, h_Segundos    
h_Horas  = Hour( h_Data )   
h_Minutos    = Minute( h_Data )
h_Segundos    = Second( h_Data )
If h_Horas <= 9 Then h_Horas = h_Horas   
If h_Minutos <= 9 Then h_Minutos = h_Minutos 
If h_Segundos <= 9 Then h_Segundos = h_Segundos  
DataMySQL_hora = h_Horas & ":" & h_Minutos & ":" & h_Segundos 
End Function


' Tipo de arquivo que esta sendo enviado
tipo_arquivo1 = UploadRequest.Item("imagem1").Item("ContentType") 'arquivo1
'tipo_arquivo1 = ""

' Caminho completo dos arquivos enviados
caminho_arquivo1 = UploadRequest.Item("imagem1").Item("FileName") ' arquivo1
'caminho_arquivo1 = ""

' Nome dos arquivos enviados
nome_arquivo1 = Right(caminho_arquivo1,Len(caminho_arquivo1)-InstrRev(caminho_arquivo1,"\"))
nome_arquivo1 = Right(nome_arquivo1, len(nome_arquivo1)-Instr(nome_arquivo1,".")+1)
Novo_nome = "Admin1_"&Replace(date, "/","")&Hour(time)&Minute(time)&second(time)  'novo nome do arquivo (arquivo1)
nome_arquivo1 = novo_nome&nome_arquivo1

' Conteudo binario dos arquivos enviados
arquivo1 = UploadRequest.Item("imagem1").Item("Value")
'arquivo1 = ""

' pasta onde as imagens serao guardadas
pasta1 = Server.MapPath("../uploads/"&nome_arquivo1&"")

' Fazendo o Upload do arquivo selecionado
if arquivo1 <> "" then
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
Set MyFile = ScriptObject.CreateTextFile(pasta1)
For i = 1 to LenB(arquivo1)
MyFile.Write chr(AscB(MidB(arquivo1,i,1)))
Next
MyFile.Close
end if


Call abre_conexao1(ConnString,Conn)
mysql = "SELECT * FROM administrador where AdminLogin='"&login&"'"
set RS = Conn.Execute(mysql)

If not RS.eof then
response.redirect "administrador_erro.asp?erro=existe"
response.end()
RS.Close 
Set RS = Nothing
End If
Call fecha_conexao1()

'arquivo 1
'----------------------------------------------------------------------------------
If arquivo1 = "" Then
 arquivo1grava = ""
 Else
 arquivo1grava = nome_arquivo1
End IF

'----------------------------------------------------------------------------------

Call abre_conexao1(ConnString,Conn)
sql = "Insert Into administrador (AdminNome, AdminEmail, AdminLogin, AdminSenha, AdminNivelId, AdminImagem1, AdminAprovado, AdminData, AdminHora) VALUES ('" & nome & "', '" & email & "', '" & login & "', '" & senha & "', '" & nivel & "', '" & arquivo1grava & "', '" & aprovado & "', '" & DataMySQL_data(Now) & "', '" & DataMySQL_hora(Now) & "')"
Conn.Execute(sql)
Call fecha_conexao1() 

Response.Redirect "administrador.asp"

'----------------------------------------------------------------------------------
Else
Response.Redirect "painel.asp"
End If

%>

 

config.asp

 

<%Session.LCID = 1046%>

funcoesupload.asp

 

<%
' Upload Sem componentes ---------------------------------------
Sub BuildUploadRequest(RequestBin)
on error resume next

PosBeg = 1
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(13)))
boundary = MidB(RequestBin, PosBeg, PosEnd - PosBeg)
BoundaryPos = InStrB(1, RequestBin, boundary)

Do Until (BoundaryPos = InStrB(RequestBin, boundary & getByteString("--")))

Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")

Pos = InStrB(BoundaryPos, RequestBin, getByteString("Content-Disposition"))
Pos = InStrB(Pos, RequestBin, getByteString("name="))
PosBeg = Pos + 6
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(34)))
Name = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
PosFile = InStrB(BoundaryPos, RequestBin, getByteString("filename="))
PosBound = InStrB(PosEnd, RequestBin, boundary)

If PosFile <> 0 And (PosFile < PosBound) Then
PosBeg = PosFile + 10
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(34)))
FileName = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
UploadControl.Add "FileName", FileName
Pos = InStrB(PosEnd, RequestBin, getByteString("Content-Type:"))
PosBeg = Pos + 14
PosEnd = InStrB(PosBeg, RequestBin, getByteString(Chr(13)))
ContentType = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
UploadControl.Add "ContentType", ContentType
PosBeg = PosEnd + 4
PosEnd = InStrB(PosBeg, RequestBin, boundary) - 2
Value = MidB(RequestBin, PosBeg, PosEnd - PosBeg)
Else
Pos = InStrB(Pos, RequestBin, getByteString(Chr(13)))
PosBeg = Pos + 4
PosEnd = InStrB(PosBeg, RequestBin, boundary) - 2
Value = getString(MidB(RequestBin, PosBeg, PosEnd - PosBeg))
End If

UploadControl.Add "Value", Value
UploadRequest.Add Name, UploadControl
BoundaryPos = InStrB(BoundaryPos + LenB(boundary), RequestBin, boundary)
Loop
End Sub

Function getByteString(StringStr)
For i = 1 To Len(StringStr)
Char = Mid(StringStr, i, 1)
getByteString = getByteString & ChrB(AscB(Char))
Next
End Function

Function getString(StringBin)
getString = ""
For intCount = 1 To LenB(StringBin)
getString = getString & Chr(AscB(MidB(StringBin, intCount, 1)))
Next
End Function

' Fim upload sem Componentes -----------------------------------------
%>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mude o head da página que solicita os dados para que ele fique assim

 

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

 



Na página que responde os dados colocar isso antes do retorno co conteúdo (logo no topo):

 

<%
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
Response.AddHeader "Pragma", "no-cache"
response.Charset="utf-8"
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei na form.asp

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

 

 

inseri.asp

 

<%
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
Response.AddHeader "Pragma", "no-cache"
Response.Charset="utf-8"
%>
le corretamente, porem grava com caracteres invalidos ainda

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de gravar no bd, faça a substituição com Replace e depois insira no bd

Compartilhar este post


Link para o post
Compartilhar em outros sites

no campo inseri.asp ja esta as linhas abaixo antes de todos as outras linhas

 

<%
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
Response.AddHeader "Pragma", "no-cache"
Response.Charset="utf-8"
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente gravar assim e depois recupere os dados e exiba-os para ver como estarao aparecendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique se o MySQL elçe esta como

ISO-8859-1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O PHP trabalha por padrão com ISO-8859-1, que são os caracteres latinos que estamos acostumados. Entretanto, o UTF-8 tem uma abrangência maior de caracteres e o ideal seria que nos acostumássemos a usar este charset nas páginas.
Este pequeno tutorial tem como objetivo deixar bem claro quais os passos a se tomar para construir uma aplicação totalmente baseada no charset UTF-8, desde as páginas HTML, passando pelo PHP e por fim no MySQL.


Antes de tudo, aconselho que aprenda a criar os seus arquivos utilizando o UTF-8 sem BOM, que evitará dores de cabeça futuras quando estiver trabalhando com cookies, sessões e headers.


O segundo passo é definir, no PHP que o charset dos arquivos que serão gerados terão a codificação UTF-8, com o seguinte código:

 

<?php
ini_set('default_charset','UTF-8');
?>

 


Só setar o charset no PHP não adianta muito, pois alguns navegadores usam a codificação padrão da região do usuário, a não ser que o seguinte código esteja entre as tags <head> e </head>:

 

<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />

 


Com isso, você já pode trabalhar tranquilamente com UTF-8 e PHP sem ter problemas com os caracteres.
Alguns cuidados são necessários quando for trabalhar com o MySQL, entretanto. Vou ensinar como se faz pelo PHPMyAdmin, que acredito que todos que começaram a trabalhar com MySQL estão acostumados.


Em primeiro lugar, ao criar o seu banco de dados, já crie usando o collation utf8_general_ci. Se o banco de dados já tiver um collation definido, não é necessário definir o collation das tabelas, pois elas herdarão o do banco. Mas mesmo assim é bom especificar o charset e collation de cada tabela. Como? Assim:

 

 

CREATE TABLE Clientes (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
nome VARCHAR(60) NOT NULL,
PRIMARY KEY(id)
)
TYPE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;

 

 


Ok. Nossa tabela está trabalhando com UTF-8 agora. Podemos começar a programar e relaxar porque nossos problemas com charset estão resolvidos, certo?


A resposta é não.
Se você continuar a programar com o sistema assim, os dados do banco serão inseridos e consultados de maneira correta, mas você vai perceber problemas quando tentar fazer buscas com palavras acentuadas insensível a maiúsculas, por exemplo: Água, água e agua serão palavras totalmente diferentes, sem contar que a ordenação de resultados com palavras que começam com letras acentuadas sairá bem bagunçada, coma letra Ó vindo antes de B, por exemplo.


Esse é o problema que eu tive e que demorei eras pra descobrir. O banco estava OK, o PHP também, o mesmo com as páginas HTML… e quando eu inseria algum dado pelo PHPMyAdmin, este era inserido corretamente, o que significava que o problema não era no banco e sim na aplicação.


Depois de meses na verdade foram apenas algumas horas de pesquisa, desconfiei que havia algo na conexão com o MySQL que estava dando esse problema. Fui fuçar no Manual do PHP e encontrei a seguinte solução:

 

 

<?php
ini_set('default_charset','UTF-8'); // Para o charset das páginas e
mysql_set_charset('utf8'); // para a conexão com o MySQL
?>

 

 


Com isso todos os meus problemas foram resolvidos. Na verdade não, pois tive que alterar todos os campos acentuados da tabela…
Dá para usar a função mysql_client_encoding para identificar o charset da conexão com o MySQL, mas não acho necessário pra quem quer trabalhar diretamente com UTF-8 e não com vários charsets.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.