Jump to content
MatheusAssuncao

Carregamento Ajax - Cidades por estado no Wordpress

Recommended Posts

Boa tarde pessoal!

 

Eu criei um formulário HTML no wordpress para salvar no banco os dados do contato. Tenho um SELECT estado:

<select id='estado' name='estado'>
   <option value='UF'>Nome do estado</option>
</select>

E um select cidade. Ao selecionar um estado eu preciso que carregue o select de cidades via ajax. As cidades estão em uma tabela do banco de dados do wordpress.

Meu script PHP que recebe a requisição ajax e consulta no banco é esse:

<?php
include "conexao.php";

$estado = mysql_real_escape_string( $_GET['estado'] );
$cidades = [];

$resultado = mysql_query("SELECT Codigo, Nome FROM Municipio WHERE Uf='$estado' ORDER BY Nome", $conexao);

while ( $row = mysql_fetch_array( $resultado ) ) 
	array_push($cidades, ['Codigo' => $row['Codigo'], 'Nome' => utf8_encode($row['Nome'])]);

echo(json_encode( $cidades ));

O script JS que faz a requisição é esse:

$('#estado').change(function () {
                if ($('#estado').val()) {
                    $.getJSON('cidades.ajax.php?search=', {
                        estado: $('#estado').val(),
                        ajax: 'true'
                    }, function (j) {
                        var options;
                        for (var i = 0; i < j.length; i++) {
                            options += '<option value="' + j[i].Codigo + '">' + j[i].Nome + '</option>';
                        }
                        $('#cidade').html(options).show();
                    });
                }
            });

Isso funciona no meu servidor próprio, mas não consigo fazer funcionar no wordpress. Implementei o script JS através de um plug-in pra inserir JS nas páginas, mas o Wordpress não permite executar um arquivo PHP não registrado por ele (ou algo assim).

 

Poderiam me ajudar? Como faço pra fazer com que meu script AJAX requisite a consulta no banco do wordpress onde estão as cidades?

 

Espero ter sido claro.

Share this post


Link to post
Share on other sites

Eu consegui fazer adicionando as funções do arquivo functions.php dentro da pasta do meu tema. Pra quem precisa executar o ajax dentro do wordpress, pesquise sobre como fazer através do arquivo functions.php

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

  • Similar Content

    • By smashplus
      Olá amigos, sendo breve, apenas gostaria de saber se alguem sabe por onde começo para fazer por exemplo o seguinte:
       
      Existe o usuário 1 e o usuário 2,  quando o usuário 1 insere uma linha no bd, ele manda uma mensagem para o usuário 2, avisando tipo, foi inserido uma linha no bd para o usuário, tipo aqueles popup sabe.
       
      Se alguem puder dar uma luz, tenho noções basicas de php e ajax...
       
      Agradeço se alguem puder dar a direção.
    • By wandoh
      Boa Tarde! estou com um dificuldades de puxar os dados do usuário logado no site. Atualmente estou conseguindo puxar somente o NOME, quando tento puxar o restante da erro! Abaixo segue o Código.
       
      session_start(); //inicializa variaveis $id = "accountid"; $name = ""; $email = ""; $errors = array(); //conexão db $db = mysqli_connect('localhost', 'root', 'senha', 'db') or die("could not connect to database"); //Registrar usuário if (isset($_POST['reg_user'])) { // receives all input values from the form $name = mysqli_real_escape_string($db, $_POST['name']); $email = mysqli_real_escape_string($db, $_POST['email']); $password = mysqli_real_escape_string($db, $_POST['password']); $password2 = mysqli_real_escape_string($db, $_POST['password2']); //form validação: ensure that the form is correctly filled ... // by adding (array_push)) corresponding error unto $errors array if(empty($name)) { array_push($errors, " "); } if(empty($email)) { array_push($errors, " "); } if(empty($pwd)) { array_push($errors, " "); } if($pwd != $pw2) { array_push($errors, " "); } // To protect MySQL injection (more detail about MySQL injection) $name = stripslashes($name); $password = stripslashes($password); // first check the databese to make sure // verifica na db se a usuário existente com o mesmo nome de usuário e email $user_check_query = "SELECT * FROM t_account WHERE name='$name' or email='$email' LIMIT 1"; $result = mysqli_query($db, $user_check_query); $user = mysqli_fetch_assoc($result); if($user) { // if user existente if ($user['name'] === $name) { array_push($errors, " "); } if ($user['email'] === $email) { array_push($errors, " "); } } // Registra o usuário se não haver erros if (count($errors) == 0 ) { $pwd = md5($pwd); print $pwd; $query = "INSERT INTO t_account (name, email, pwd, pw2) VALUES ('$name', '$email', '$password', '$password2')"; mysqli_query($db, $query); $_SESSION['accountid'] = $id;// $_SESSION['name'] = $name; $_SESSION['success'] = 'Você está logado em'; echo " "; //header('location: index.php'); } } //LOGIN USER if (isset($_POST['login_user'])) { $name = mysqli_real_escape_string($db, $_POST['name']); $password = mysqli_real_escape_string($db, $_POST['password']); if (empty($name)) { array_push($errors, " "); } if (empty($password)) { array_push($errors, " "); } if (count($errors) == 0 ) { $pwd = md5($pwd); $query = "SELECT 'email' FROM t_account WHERE name='$name' AND password='$password'"; $results = mysqli_query($db, $query); if (mysqli_num_rows($results)) { $_SESSION['accountid'] = $id;// $_SESSION['name'] = $name; $_SESSION['success'] = 'Você está logado em'; echo " "; //header('location: index.php'); }else{ array_push($errors, " "); } } } Com a variável abaixo, é exibido o nome de quem esta logado.
      $_SESSION["name"] Já com os demais, não e exibido o resultado é apresentado uma msg de erro.
      $_SESSION["email"] Notice: Undefined index: email in Passei em todos os post que tem sobre o assunto, mas infelizmente em meu código não deu certo.
       Sou novo em PHP!
      Preciso puxar todos os dados cadastrado do usuário.
    • By CrashRM
      Olá, preciso de ajuda e acredito que esse fórum possa ser uma luz.
      Estou com um projeto de um site que irá exibir informações de empresas, pois bem, ele foi feito em wordpress e utilizo o plugin wp all import para poder subir esses dados para o site via arquivo csv.
      Estava tudo funcionando bem, mas, conforme a base de dados foi subindo o site foi ficando lento e agora por várias vezes ele apresenta erro 500 (Internal Server Error Sorry, something went wrong) ao realizar buscas no site.

      Ao subir o arquivo csv, para cada linha do arquivo o plugin cria uma postagem nova no wordpress com as informações das colunas, ao total eu teria que subir 20 milhões de linhas e cada linha contem 27 colunas que são adicionadas como informações no post.

      O problema do erro 500 começou acontecer quando cheguei a um pouco mais de 1 milhão de empresas cadastradas.
       
      Não sou profissional no assunto, tudo que fiz foi através de pesquisas e estudos em sites e fóruns, então pode ser que tenha configurado algo errado ou o servidor é que não é o ideal... eis que minhas dúvidas são:
      - Preciso de um servidor melhor ou esse comporta?
      - A configuração do meu mysql (my.cnf) ou php.ini estão incorretas?
      - Devo colocar o banco de dados em um servidor específico? (tentei fazer na amazon, mas me perdi no meio do processo)
      - O que devo fazer?

      Segue as informações:
      Servidor: https://www.ovh.pt/vps/vps-cloud-ram.xml
      VPS Cloud RAM 2
      2 vCore(s); 2 GHz; 12 GB RAM; 50 GB SSD
      - Linux Ubuntu 16, php 7.3
      - Vestacp

      My.cnf
      [client] port=3306 socket=/var/run/mysqld/mysqld.sock [mysqld_safe] socket=/var/run/mysqld/mysqld.sock [mysqld] user=mysql pid-file=/var/run/mysqld/mysqld.pid socket=/var/run/mysqld/mysqld.sock port=3306 basedir=/usr datadir=/var/lib/mysql tmpdir=/tmp lc-messages-dir=/usr/share/mysql log_error=/var/log/mysql/error.log symbolic-links=0 skip-external-locking key_buffer_size = 4000M max_allowed_packet = 64M table_open_cache = 4096 sort_buffer_size = 64M read_buffer_size = 64M read_rnd_buffer_size = 128M myisam_sort_buffer_size = 128M thread_cache_size = 64 query_cache_size= 624M #innodb_use_native_aio = 0 innodb_file_per_table innodb_buffer_pool_size = 8000M max_connections=120 max_user_connections=30 wait_timeout=28800 interactive_timeout=58800 long_query_time=5 !includedir /etc/mysql/conf.d/ php.ini
      [PHP] engine = On short_open_tag = On precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off unserialize_callback_func = serialize_precision = 17 disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, disable_classes = zend.enable_gc = On expose_php = Off max_execution_time = 300 max_input_time = -1 memory_limit = 2000M error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off display_startup_errors = Off log_errors = On log_errors_max_len = 1024 ignore_repeated_errors = Off ignore_repeated_source = Off report_memleaks = On track_errors = Off html_errors = On variables_order = "GPCS" request_order = "GP" register_argc_argv = Off auto_globals_jit = On post_max_size = 1000M auto_prepend_file = auto_append_file = file_uploads = On upload_max_filesize = 50M max_file_uploads = 20 allow_url_fopen = On allow_url_include = Off default_socket_timeout = 60 pdo_mysql.cache_size = 2000 pdo_mysql.default_socket= sql.safe_mode = Off odbc.allow_persistent = On odbc.check_persistent = On odbc.max_persistent = -1 odbc.max_links = -1 odbc.defaultlrl = 4096 odbc.defaultbinmode = 1 ibase.allow_persistent = 1 ibase.max_persistent = -1 ibase.max_links = -1 ibase.timestampformat = "%Y-%m-%d %H:%M:%S" ibase.dateformat = "%Y-%m-%d" ibase.timeformat = "%H:%M:%S" [MySQLi] mysqli.max_persistent = -1 mysqli.allow_persistent = On mysqli.max_links = -1 mysqli.cache_size = 2000 mysqli.default_port = 3306 mysqli.reconnect = Off mysqlnd.collect_statistics = On mysqlnd.collect_memory_statistics = Off  
      Espero que alguém possa me dar uma luz para resolver esse problema.
      Desde já obrigado 
    • By Agatacat
      Estou usando o Contact Form 7 e o plugin CF7 SKINS,  preciso deixar alguns campo lado a lado:
      <label> Cidade
      [text* text-317] </label>
      <label> Estado
      [text* text-317] </label>
      <label> Código Postal
      [text* text-317] </label>
      <label> Telefone para Contato
      [tel* tel-459] </label>
      <label> Seu e-mail
      [email* your-email] </label>
      Assim que está atualmente, e os campos ficam um embaixo do outro, gostaria de deixar os campos Cidade e Estado um do lado do outro, alguém saberia como fazer isso?
      E também gostaria de saber como posso limitar as caixas de texto, como podem ver na imagem ela vai até a lateral máxima da página.
      Agradeço desde já pela ajuda.

    • By lucasvbl
      <form id="frmDados" name="frmDados" class="form-horizontal" method="post" action="" enctype="multipart/form-data"> <input name="acao" id="acao" type="hidden" value="paginas"> <? if($_idCodigo){ ?> <input name="r" id="r" type="hidden" value="<?=$_idCodigo;?>"> <? } ?> <div class="row"> <div class="col-md-6"> <div class="form-group row"> <label class="col-md-2 col-form-label"> Titulo</label> <div class="col-md-10"> <input class="form-control" autocomplete="off" type="text" name="txtDescricao" id="txtDescricao" value="<?=$_rowDados->C02_DESCRICAO;?>"> </div> </div> </div> <? if($_idCodigo){ ?> <div class="col-md-6"> <div class="form-group row"> <label class="col-md-2 col-form-label"> Link</label> <div class="col-md-10"> <input readonly="readonly" class="form-control" type="text" name="txtLink" id="txtLink" value="pagina.php?p=<?=$_rowDados->C01_ID;?>"> </div> </div> </div> <? } ?> </div> <div class="row"> <div class="col-md-12"> <div class="form-group row"> <label class="col-md-12 col-form-label">Conteúdo</label> <div class="col-md-12"> <textarea class="form-control" name="txtConteudo" id="txtConteudo"> <?=$_rowDados->C04_CONTEUDO;?> </textarea> </div> </div> </div> </div> <div class="col-md-12" style="text-align: center;"> <button class="btn btn-oval btn-success" type="button" id="btGravar">Gravar</button> </div> </form> <script type="text/javascript"> $(function () { $("#btGravar").click(function(){ erros = 0; if(!$("#txtDescricao").val()){ mensagem('mensagemDIV', 'danger', 'Preencha o campo <strong>Título para a página</strong>.', 0, 'txtEntidade'); erros = 1; } if(erros > 0){ return; } off("btGravar"); var formData = $("#frmDados").serialize(); $.ajax({ url: "app.php", type: "POST", data: formData, dataType: "json", success: function (retorno) { if(retorno.status == '1'){ tratarRetorno(retorno); } if(retorno.status == '400'){ tratarRetorno(retorno); } on("btGravar"); return; } }).fail(function (jqXHR, textStatus, error) { console.log(jqXHR.responseJSON); }); return; }); }); $(document).ready(function(){ $("#txtTitulo").focus(); }); </script> Estou com um problema num crud utilizando ajax, ele meio que "corrompe a string"... 
      ENVIO ASSIM
       
      ELE SALVA ASSIM
       
      Não estou utilizando nenhum editor nada, num textarea
      ESSE CODIGO
       
       
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.