COLAÇÃO NA BASE MYSQL COM ASP CLÁSSICO

MAFACILITY2 04/11/2025 20:34:11
#505139
Estou com problemas com acentos e cedilha, mas já precebi que o problema está em meu código de iserção de dados no painel de controle, pois já alimentei diretamente a base de dados que está hospedada no servidor Kinghost, e o BD aceita os acentos e cedilhas, e minha consulta também vem com o acento e cedilha. Abaixo o código de formulário de inserção(forminsert.asp) e o código de inserção(inset.asp). Estou usando o callation utf8mb4_general_ci.

forminsert.asp

<%
Response.CodePage = 65001
Response.Charset = "utf-8"
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
Response.LCID = 1046 ' Português-Brasil
%>




Cadastro de Imóveis


.style2 { background-color: #999999; }
.style3 { font-weight: bold; background-color: #0833beff; }
.auto-style1 { font-weight: bold; background-color: #0833beff; }
.auto-style2 { background-color: #fcfcfcff; }

input[type="text"], select, textarea {
color: #0000CC;
font-family: Verdana;
font-size: 8pt;
}
input[type="file"] {
width: 352px;
}



function valida_campo() {
var titulo = document.form.titulo.value.trim();
if (titulo == "") {
alert("Entre com o título!");
document.form.titulo.focus();
return false;
}
var dormitorio = document.form.dormitorio.value.trim();
if (dormitorio == "") {
alert("Entre com nº de dormitórios!");
document.form.dormitorio.focus();
return false;
}
var suite = document.form.suite.value.trim();
if (suite == "") {
alert("Entre com nº de suítes!");
document.form.suite.focus();
return false;
}
return true;
}










:: Cadastro de Imóveis ::




Imóvel:




Nº Dormitórios:




Nº Banheiros:




Área do Lote:




Área Construída:




Tipo:


Apartamento
Casa
Chácara
Comercial
Lote
Sítio





Localidade:


Itaipuaçu
Maricá
Niterói
Rio de Janeiro
Outras





Bairro:






Foto :
" size="40">




Preço:




Visibilidade:


Não
Sim





Destaque:


Não
Sim





Descrição:






Proprietário:




Telefone:
















MAFACILITY2 04/11/2025 20:35:30
#505140
Alterado em 11/11/2025 17:50:15 insert.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Option Explicit
Response.Expires = 0
Response.Charset = "utf-8"
Response.CodePage = 65001
Response.LCID = 1046 ' Português-Brasil

' =====================================
' CONFIGURAÇÃO DO UPLOAD E BANCO MYSQL
' UTF-8 / utf8mb4_general_ci
' =====================================

Dim Upload, File, objConn, strConn, strQuery
Dim titulo, dormitorio, suite, visibilidade, tipo, local, bairro
Dim preco, status, descricao, area, contrucao, proprietario, telefone
Dim fotos(20), i, filePath, fileName, fotoURL

' === CRIA OBJETO DE UPLOAD ===
On Error Resume Next
Set Upload = Server.CreateObject("Persits.Upload")

If Err.Number <> 0 Then
Response.Write "<p style='color:red'><b>? Erro:</b> O componente Persits.Upload não está disponível neste servidor.</p>"
Response.Write "<p>Peça à KingHost para ativar o componente <b>Persits.Upload</b> no seu ambiente ASP.</p>"
Response.End
End If

' === SALVA OS ARQUIVOS NA PASTA /fotos ===
Upload.OverwriteFiles = False
Upload.Save Server.MapPath("/fotos")

' === CAMPOS DO FORMULÁRIO (UTF-8) ===
titulo = Upload.Form("titulo")
dormitorio = Upload.Form("dormitorio")
suite = Upload.Form("suite")
visibilidade = Upload.Form("visibilidade")
tipo = Upload.Form("tipo")
local = Upload.Form("local")
bairro = Upload.Form("bairro")
preco = Upload.Form("preco")
status = Upload.Form("status")
descricao = Upload.Form("descricao")
area = Upload.Form("area")
contrucao = Upload.Form("contrucao")
proprietario = Upload.Form("proprietario")
telefone = Upload.Form("telefone")

' === LÊ AS FOTOS ENVIADAS ===
For i = 1 To 20
On Error Resume Next
Set File = Upload.Files("foto" & i)
If Not File Is Nothing Then
fileName = File.FileName
If fileName <> "" Then
fotoURL = "https://www.jmimoveis.cim.br/fotos/" & File.FileName
fotos(i) = fotoURL
Else
fotos(i) = ""
End If
Else
fotos(i) = ""
End If
Next

' =====================================
' CONEXÃO COM MYSQL (UTF-8)
' =====================================
Set objConn = Server.CreateObject("ADODB.Connection")

' OBS: use o driver UNICODE e charset=utf8mb4
strConn = "Driver={MySQL ODBC 8.0 Unicode Driver};" & _
"Server=mysql.jmimoveis.cim.br;" & _
"Database=jmimoveis;" & _
"Uid=jmimoveis;" & _
"Pwd=******;" & _
"Option=3;CHARSET=utf8mb4;NO_SSPS=1;"

On Error Resume Next
objConn.Open strConn

If Err.Number <> 0 Then
Response.Write "<p style='color:red'><b>? Erro ao conectar ao MySQL:</b> " & Err.Description & "</p>"
Response.End
End If

' Garante UTF-8 ativo na sessão MySQL
objConn.Execute "SET NAMES utf8mb4 COLLATE utf8mb4_general_ci"
objConn.Execute "SET CHARACTER SET utf8mb4"
objConn.Execute "SET collation_connection = 'utf8mb4_general_ci'"

' =====================================
' MONTA E EXECUTA O INSERT
' =====================================
strQuery = "INSERT INTO IMOVEL " & _
"(titulo, dormitorio, suite, visibilidade, tipo, local, bairro, " & _
"foto1, foto2, foto3, foto4, foto5, foto6, foto7, foto8, foto9, foto10, " & _
"foto11, foto12, foto13, foto14, foto15, foto16, foto17, foto18, foto19, foto20, " & _
"preco, status, descricao, area, contrucao, proprietario, telefone) VALUES (" & _
"'" & Replace(titulo,"'","''") & "'," & _
"'" & Replace(dormitorio,"'","''") & "'," & _
"'" & Replace(suite,"'","''") & "'," & _
"'" & Replace(visibilidade,"'","''") & "'," & _
"'" & Replace(tipo,"'","''") & "'," & _
"'" & Replace(local,"'","''") & "'," & _
"'" & Replace(bairro,"'","''") & "'," & _
"'" & Replace(fotos(1),"'","''") & "'," & _
"'" & Replace(fotos(2),"'","''") & "'," & _
"'" & Replace(fotos(3),"'","''") & "'," & _
"'" & Replace(fotos(4),"'","''") & "'," & _
"'" & Replace(fotos(5),"'","''") & "'," & _
"'" & Replace(fotos(6),"'","''") & "'," & _
"'" & Replace(fotos(7),"'","''") & "'," & _
"'" & Replace(fotos(8),"'","''") & "'," & _
"'" & Replace(fotos(9),"'","''") & "'," & _
"'" & Replace(fotos(10),"'","''") & "'," & _
"'" & Replace(fotos(11),"'","''") & "'," & _
"'" & Replace(fotos(12),"'","''") & "'," & _
"'" & Replace(fotos(13),"'","''") & "'," & _
"'" & Replace(fotos(14),"'","''") & "'," & _
"'" & Replace(fotos(15),"'","''") & "'," & _
"'" & Replace(fotos(16),"'","''") & "'," & _
"'" & Replace(fotos(17),"'","''") & "'," & _
"'" & Replace(fotos(18),"'","''") & "'," & _
"'" & Replace(fotos(19),"'","''") & "'," & _
"'" & Replace(fotos(20),"'","''") & "'," & _
"'" & Replace(preco,"'","''") & "'," & _
"'" & Replace(status,"'","''") & "'," & _
"'" & Replace(descricao,"'","''") & "'," & _
"'" & Replace(area,"'","''") & "'," & _
"'" & Replace(contrucao,"'","''") & "'," & _
"'" & Replace(proprietario,"'","''") & "'," & _
"'" & Replace(telefone,"'","''") & "')"

On Error Resume Next
objConn.Execute strQuery

If Err.Number = 0 Then
Response.Write "<p style='color:green'><b>? Imóvel cadastrado com sucesso!</b></p>"
Response.Write "<meta http-equiv='refresh' content='2;URL=selimo_.asp'>"
Else
Response.Write "<p style='color:red'><b>? Erro ao inserir no banco:</b> " & Err.Description & "</p>"
End If

objConn.Close
Set objConn = Nothing
Set Upload = Nothing
%>
LUIZCOMINO 05/11/2025 14:25:54
#505141
Amigo já tive esse problema , abra seu arquivo no bloco de notas e salve como => Tipo de Arquivo ="Todos" e codificação UTF-8
MAFACILITY2 06/11/2025 08:53:06
#505143
Alterado em 06/11/2025 11:26:18 Fiz o procedimento não funcionou. Vou refazer a base de dados do zero, pois essa base é fruto de uma conversão de um bd access.
WEBMASTER 11/11/2025 17:49:54
#506159
Dicas:

- Abra o arquivo asp em notepad++ e veja se ele está em utf8
- Experimente salvar via linha de comando (ou algum Gerenciador como o dbeaver) e veja se está sendo somente via site o problema

Depois posta ai se deu certo
WEBMASTER 11/11/2025 17:55:41
#506160
Aproveitando, fica a dica, use um Dictionary que te permita ter chave/valor assim voce podia acabar com esse insert horroroso
Vou deixar aqui uma conversão de scripts meus de PHP para asp classico que usam esse 'inteligencia'

Insert

Function dbInsert(tableName, data)
On Error Resume Next
Dim campo, valor, campos, valores, sql, key
Dim v

If IsEmpty(data) Or IsNull(data) Then
dbInsert = False
Exit Function
End If

campos = ""
valores = ""

For Each key In data
campo = key
v = data(key)

' Substituições automáticas (sem aspas nas funções SQL)
v = Replace(v, "uid()", getUID())
v = Replace(v, "cid()", getCID())
v = Replace(v, "pid()", getPID())
v = Replace(v, "uip()", "'" & getIP() & "'")
v = Replace(v, "ip()", "'" & getIP() & "'")
v = Replace(v, "now()", "now()")
v = Replace(v, "null", "null")

' Escapar aspas simples
If Not InStr(1, v, "now()", vbTextCompare) > 0 And Not InStr(1, v, "null", vbTextCompare) > 0 Then
v = Replace(v, "'", "''")
v = "'" & v & "'"
End If

campos = campos & campo & ","
valores = valores & v & ","
Next

' Remove vírgula final
If Right(campos, 1) = "," Then campos = Left(campos, Len(campos) - 1)
If Right(valores, 1) = "," Then valores = Left(valores, Len(valores) - 1)

sql = "INSERT INTO " & tableName & " (" & campos & ") VALUES (" & valores & ")"

dbInsert = (dbExecute(sql) > 0)
End Function


Update

Function dbUpdate(tableName, data, whereClause)
On Error Resume Next
Dim key, v, sql, setPart, i, total

If IsEmpty(data) Or IsNull(data) Then
dbUpdate = False
Exit Function
End If

If Trim(whereClause) = "" Then
' Evita update sem where
Call KLog("Update sem where na tabela " & tableName)
dbUpdate = False
Exit Function
End If

setPart = ""
total = 0
For Each key In data
total = total + 1
Next

i = 0
For Each key In data
v = data(key)
i = i + 1

' Substituições especiais
v = Replace(v, "uid()", getUID())
v = Replace(v, "cid()", getCID())
v = Replace(v, "pid()", getPID())
v = Replace(v, "uip()", "'" & getIP() & "'")
v = Replace(v, "ip()", "'" & getIP() & "'")
v = Replace(v, "now()", "now()")
v = Replace(v, "curdate()", "curdate()")
v = Replace(v, "today()", "curdate()")
v = Replace(v, "null", "null")

If Not (InStr(1, v, "now()", vbTextCompare) > 0 Or InStr(1, v, "curdate()", vbTextCompare) > 0 Or InStr(1, v, "null", vbTextCompare) > 0) Then
v = Replace(v, "'", "''")
v = "'" & v & "'"
End If

setPart = setPart & key & " = " & v
If i < total Then setPart = setPart & ", "
Next

sql = "UPDATE " & tableName & " SET " & setPart & " WHERE " & whereClause

dbUpdate = (dbExecute(sql) > 0)
If dbUpdate = False And dbError() = "" Then dbUpdate = True
End Function


Auxiliares

Function dbExecute(sql)
On Error Resume Next
Dim conn, result
Set conn = Application("conexao") ' sua conexão global ADODB
conn.Execute sql, result
If Err.Number <> 0 Then
Call KLog("Erro SQL: " & sql & " - " & Err.Description)
dbExecute = 0
Else
dbExecute = result
End If
End Function

Function dbError()
If Err.Number <> 0 Then
dbError = Err.Description
Else
dbError = ""
End If
End Function

Sub KLog(msg)
' Implementação simples de log
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(Server.MapPath("/logs/db.log"), 8, True)
f.WriteLine Now() & " - " & msg
f.Close
End Sub


Veja que eu tinha uns 'atalhos' de nome (uid para usuario, now(), ip, etc...)


E para usar

Dim dados
Set dados = Server.CreateObject("Scripting.Dictionary")
dados.Add "nome", "VBMania"
dados.Add "idade", 35
dbInsert "usuarios", dados
MAFACILITY2 11/11/2025 21:11:22
#506161

Citação:

Dicas:- Abra o arquivo asp em notepad++ e veja se ele está em utf8- Experimente salvar via linha de comando (ou algum Gerenciador como o dbeaver) e veja se está sendo somente via site o problemaDepois posta ai se deu certo



Vou fazer o teste e posto a solução.
WEBMASTER 12/11/2025 17:09:32
#506163
Sem querer ofender , mas o mais urgente é sair desse teu insert fardado ao fracasso.
Pense como arrays (chave/valor) e assim seja insert/update você não vai correr riscos.
Vai contando aqui se deu certo
Faça seu login para responder