Ir para conteúdo
Fórum Script Brasil

Todas Atividades

Atualizada automaticamente

  1. Hoje
  2. Olá a todos! O meu disco rígido externo deixou de funcionar. O disco já não é legível. Quando ligo a unidade ao meu computador, o sistema pede-me para a formatar. É uma unidade HHD que estava no formato FAT, mas agora aparece como RAW no gestor de disco. Tenho ficheiros importantes na unidade. Alguém me pode ajudar?
  3. Eu estava estudando um meio de emitir o cupom fiscal em São Paulo e a orientação que recebi da contabilidade é que eu corresse atrás de um programador homologado na Secretaria da Fazenda bem como do aparelho do SAT. O aparelho mais em conta que eu achei foi o da Tanca (R$ 850,00) e o preço da instalação é de R$ 100,00. Eu decidi instalar por conta própria, é bem difícil, o técnico cobra o preço justo, mas eu consegui configurar o aparelho bem como ativar na Sefaz. Consultei dois programadores, e eles me pediram para assinar o plano (um pediu R$ 75,00 por mês, outro pediu R$ 250,00 por mês) que iria instalar e ensinar a como emitir um cupom fiscal. Na internet, eu encontrei a Bling, mas o programa da Bling não emite Cupom Fiscal (CF-e SAT). Para a minha surpresa a Bling me apresentou a NFC-e e eles me informaram que a Nota Fiscal ao Consumidor não precisa da SAT. O portal da NFC-e de São Paulo http://www.nfce.fazenda.sp.gov.br/NFCePortal/Paginas/DuvidasFrequentes.aspx diz que o SAT é obrigatório, já a Bling afirma o contrário. Para resolver esse dilema, eu tirei o SAT do notebook, pedi o credenciamento da NFC-e na Sefaz, peguei o código de segurança do contribuinte, configurei o programa da Bling, mudei o modo teste para o modo produção, e assim consegui conferir que a Bling estava com razão. Estou usando o plano amostra grátis da Bling, ainda tenho 20 dias para testar. O plano mais em conta é o Cromo de R$ 30,00 por mês. Eu gostei da Bling, o único problema é que tudo acontece na internet, onde ninguém pode lhe convencer que os seus dados estão seguros. Para atualizar o banco de dados da Bling estou usando os meus códigos em PHP, o MySQL e o Excel, mas acho que só o Excel é suficiente para o programador ajudar o contribuinte a montar o banco de dados na Bling. Aconselho a usar o Excel CSV, os outros formatos só me deram dor de cabeça. Para corroborar a Bling eu encontrei o artigo 6o. da Portaria CAT 12 de 04/02/2015 que obriga a NFC-e a trabalhar com o SAT bem como a Portaria SRE 34/23 de 05/05/23 que revogou o artigo 6o.
  4. Saber como instalar referências do SharePoint no Excel é o que eu preciso.
  5. A data era idProcessoJudicialMovimentacao = 6 no último andamento, 5 no penúltimo andamento e 4 no antepenúltimo andamento.
  6. Yesterday
  7. Estou quebrando a cabeça para pegar os valores da variável cpfValue em uma variável global. Assim, conseguirei armazená-la no banco de dados e fazer as verificações necessárias. Desde já, agradeço a compreensão! const { ModalSubmitInteraction, Client, Interaction, ActionRowBuilder, ModalBuilder, TextInputBuilder, TextInputStyle } = require('discord.js'); /** * * @param {Client} client * @param {ModalSubmitInteraction} interaction * @returns */ module.exports = async (client, interaction) => { if(!interaction.isButton()) return; //criando o modal const modal = new ModalBuilder() .setCustomId('verifyModal') .setTitle('Verificação de CPF'); //criando o componente de input do CPF const cpfInput = new TextInputBuilder() .setCustomId('cpfInput') .setLabel('Digite o seu CPF abaixo:') .setStyle(TextInputStyle.Short) .setMaxLength(11) .setPlaceholder('Digite apenas números.') .setRequired(true); //precisa de um ActionRow pra cada input de texto const actionRow = new ActionRowBuilder().addComponents(cpfInput); //adicionando o input ao modal modal.addComponents(actionRow); //mostrando o modal ao usuário await interaction.showModal(modal); //esperando o modal ser submetido const filter = (interaction) => interaction.customId === 'verifyModal'; interaction .awaitModalSubmit({ filter, time: 30_000}) .then((modalInteraction) => { const cpfValue = modalInteraction.fields.getTextInputValue('cpfInput'); modalInteraction.reply(`Seu cpf é '${cpfValue}' hohohohoho`) }); }
  8. A melhor maneira de estudar o PHP é usando o método GET para quem é iniciante, ele coloca na barra de endereço do navegador todos os valores que você pretende passar de um código para outro. Depois de três anos, você começa a perceber que o método GET começa a atrapalhar. Eu, por exemplo, tenho um comando que pede para atualizar a tela, mas ele acaba duplicando o registro e eu sou forçado a apagá-lo. Hoje, eu encontrei uma solução, eu não sei se ele é válido, por isso eu dei o nome de POG (Programação Orientada à Gambiarra). Eu usei o comando header, é o único meio que eu encontrei para "limpar" a barra de endereço do navegador: <?php class ControleEstoque extends Controle { // ... public function atualizar() { $itens=$this->Conexao->select("* from tbentraprod"); foreach($itens as $item) { $codprod=$item->codprod; $prod=$this->Conexao->select("* from tbprod where codprod=$codprod")[0]; $id=$item->id; $this->Conexao->update("tbentraprod set prod='$prod->prod',margem=$prod->marg where id=$id"); } // return $this->entraProduto(); return header("location:?ControleEstoque.entraproduto"); } O mais sensato seria usar o método POST. Isso eu já faço, quando eu monto um <form method=post>. Eu tentei usar o método POST no link tipo <a href=qualquerlugar.php method=post>, mas isso não deu certo.
  9. Bom dia, Não sei é o caso, mas acredito que de para identificar qual linha representa com o script, Linha=Cells(2,1).End(Xldown).Row ( Variação da coluna seria um Columns se não me engano ) Seria isso ?
  10. Última semana
  11. Eu tenho um sistema em CakePHP que realiza o login com uma conta do Google e em seguida retorna para a página inicial. A página www.mysite.com/login/google identifica que o parâmetro code não tem um valor e redireciona para a página de login do Google, o que está correto. No entanto, quando ele confirma o login e redireciona para www.mysite.com/login/google?code=1234, o sistema não reconhece que o parâmetro code possui valor e redireciona novamente para a página de login do Google. Abaixo está o código do controller: namespace App\Controller; use App\Controller\AppController; use Cake\Http\Client; use Cake\Http\ServerRequest; use App\Model\Table\TusuarioTable; use Cake\ORM\TableRegistry; class GoogleLoginController extends AppController { public function login($code_id = null) { $this->request->allowMethod(['get','post', 'put']); // Configurações do Google OAuth $google_oauth_client_id = '968-hufqt7bpp16tsmbd8qoal5posu38o9g9.apps.googleusercontent.com'; $google_oauth_client_secret = 'GOCSU_zuK'; $google_oauth_redirect_uri = 'https://sistemasweb.com/login/google'; $google_oauth_version = 'v3'; $code_id = $this->request->getQuery('code'); //var_dump($_GET); exit; // Se o código de autorização estiver presente na URL if (isset($code_id)) { // Executar solicitação para obter o token de acesso echo "CODE: ".$code_id; exit; } else { // Redirecionar para a página de autorização do Google $params = [ 'response_type' => 'code', 'client_id' => $google_oauth_client_id, 'redirect_uri' => $google_oauth_redirect_uri, 'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', 'access_type' => 'offline', 'prompt' => 'consent' ]; return $this->redirect('https://accounts.google.com/o/oauth2/auth?' . http_build_query($params)); } } public function logout() { $this->request->getSession()->delete('google_loggedin'); $this->request->getSession()->delete('google_email'); $this->request->getSession()->delete('google_name'); $this->request->getSession()->delete('google_picture'); // Redirecionar para a página de login ou outra página relevante return $this->redirect(['controller' => 'Pages', 'action' => 'home']); } }
  12. Resolvi o problema...graças a Deus !! O código correto é: $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); $num_rows = $result->num_rows; for ($i = 1; $i <= $num_rows; $i++) { $registro = $result -> fetch_assoc(); $sql2 = "UPDATE usuarios_dados SET ID='$i' WHERE ID='$registro[ID]'"; $result2 = $conn->query($sql2); }
  13. Usei o MySQL Workbench, e consegui achar o resultado assim: select * from produtos where descricao like 'cadeado%20%' ou seja, a solução para o problema é dividir a variável $busca em $parte1 e $parte2, e depois concatenar os dois usando o coringa % no meio dos dois.
  14. Ontem eu vi a lista de produtos da Bling, eu digitei 417, e ele me retornou o produto correspondente. O código que eu fiz busca o produto por descrição. Para procurar em outros campos, eu inventei um código baseado no primeiro caractere, tipo @417, só que ele retorna o produto do código 417 bem como o 1417 e outros produtos que contenham o 417 na descrição ou no código de barra. Fiquei imaginando se é possível priorizar a busca pelo código do produto, e a Gemini me passou a instrução INSTR, assim: <?php // $produtos=$this->Conexao->select("* from tbprod where // concat_ws(',',codprod,un,prod,codbar,loc,emb,cf,codforn) like '%$busca%' // order by prod"); $produtos=$this->Conexao->select("* FROM tbprod WHERE INSTR(concat_ws(',', codprod, prod, codbar), '$busca') > 0 ORDER BY INSTR(concat_ws(',', codprod, prod, codbar), '$busca'), prod"); O código da Gemini é engenhoso, ele realmente prioriza o código que foi digitado, mas o resultado da Bling é fascinante. Ele só retorna o produto do código correspondente e não mostra mais nada. Desconfio que o código da Bling seja assim: 1. pegar o que foi digitado no <input> e guarda em $busca. 2. se $busca é numérico e o seu valor for menor igual ao maior código dos produtos, então execute o comando "select * from produtos where codigoProduto = $busca". 3. se $busca é numérico e o seu valor for maior que o maior código dos produtos, então execute o comando "select * from produtos where codigoBarra = $busca". 4. se $busca não é numérico, então execute o comando "select * from produtos where descricaoProduto like '%busca%'". O que mais me impressionou no motor de busca da Bling é o uso parcial na busca pela descrição do produto. Vamos supor que temos algo do tipo "cadeado trancatudo 20mm", eu posso buscar o produto na Bling usando como critério escrevendo assim "cadeado 20mm". Nesse caso o verbo like ou o INSTR não retornam coisa alguma. Alguém tem alguma ideia de como é possível consultar um produto usando partes da descrição sem a necessidade dessas partes estarem na mesma posição?
  15. Olá Frank muito obrigado pelo retorno. Eu consegui, agora está fazendo o bloqueio corretamente, o codigo do cliente está atualizando corretamente também, código_cliente , porta e ip atualiza sempre que recebe novas informações esses 3 que são importantes por que a conta do revendedor vai identenficar pelo código do cliente se o streaming pertecence a ela. E a porta caso usuário tenha mais de uma conta atualiza e sempre mantendo o mesmo ip de verificação sempre no IP para atualizar o restante das colunas,caso pegar um codigo_cliente sem revenda o ip bloqueado vem pra mim, estava com difculdade para atualizar tudo em uma unica tabela por que estava gerando vários mais consegui resolver também. Só a tabela nevagador que está dando trabalho para atualizar quando recebe uma nova informação exemplo usuário trocou de navegador ela não atualiza de forma alguma, estou vendo se dou jeito nela. Em fim esse bloqueio é só para evitar muitas tentivas forçadas em contas como a porta fica exposta e o login é por ela resolvi ajustar essa questão do bloqueio, sei que vai lotar de ips mais para quebrar isso ajustei para limpar a cada 48horas.
  16. Se eu entendi a sua pergunta, você quer que o PHP pegue as informações contidas no arquivo xml; o PHP tem o comando simplexml_load_file( ), mas se ele conseguir abrir o arquivo, o resultado é o mesmo que você vê na tela do navegador, mas você pode separar as informações por chave mais ou menos assim: <?php $xml = simplexml_load_file("meu_arquivo.xml"); if ($xml) { // Acessa os dados do XML echo $xml->nome; echo $xml->idade; } else { echo "Erro ao abrir o arquivo XML."; } Mas se você tiver dúvida de como usar o portal da SSW, eu só consegui achar o email contato@ssw.inf.br, mas eu aconselho a conversar com quem já usou o serviço deles, principalmente os amigos de longa data.
  17. O máximo que eu consegui foi bloquear o usuário. Para conseguir isso, eu tive que tirar o campo data da tabela bloqueios_login. As tabelas ficaram assim: CREATE TABLE `bloqueios_login` ( `ip` varchar(20) DEFAULT NULL, `tentativas` int DEFAULT NULL, `codigo_cliente` int DEFAULT NULL, `navegador` varchar(100) DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, `codigo_stm` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci CREATE TABLE `streamings` ( `id` int NOT NULL AUTO_INCREMENT, `porta` varchar(45) DEFAULT NULL, `senha` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci Na tabela streamings, utilizei um usuário válido assim (id,porta,senha) (2,2,2). No seu código, o cálculo de número de tentativas não estava dando certo, acrescentei a chave do array [0], e utilizei dois arquivos para testar o seu código: arquivo index.php <form method=post action=verificar.php> porta<input name=porta value="1"><br> senha<input name=senha value="1"><br> <input type=submit> </form> arquivo.verificar.php <?php $conexao=new PDO("mysql:host=localhost;dbname=irlanda","root",""); // Verificar se o formulário de login foi submetido if ($_SERVER["REQUEST_METHOD"] == "POST") { $porta = $_POST['porta']; $senha = $_POST['senha']; // Verificar se o IP já foi bloqueado $ip = $_SERVER['REMOTE_ADDR']; $verificarBloqueio = $conexao->prepare("SELECT * FROM bloqueios_login WHERE ip = ?"); $verificarBloqueio->bindParam(1, $ip,PDO::PARAM_STR); $verificarBloqueio->execute(); $stm=$verificarBloqueio; $resultadoBloqueio = $verificarBloqueio->fetchAll(PDO::FETCH_ASSOC); if(!isset($tentativas)) { $tentativas=0; } if ($stm->rowCount() > 0) { // Se o IP já estiver na tabela, atualize o número de tentativas $tentativas = $resultadoBloqueio[0]['tentativas'] + 1; // Verificar se excedeu o limite de tentativas if ($tentativas >= 6) { die("Seu IP foi bloqueado devido a múltiplas tentativas de login malsucedidas. Tente novamente mais tarde."); } // Atualizar o número de tentativas na tabela a cada erro $atualizarTentativas = $conexao->prepare("UPDATE bloqueios_login SET tentativas = ? WHERE ip = ?"); $atualizarTentativas->bindParam(1,$tentativas,PDO::PARAM_INT); $atualizarTentativas->bindParam(2,$ip,PDO::PARAM_STR); $atualizarTentativas->execute(); } else { // Se o IP não estiver na tabela, insira-o como 1 tentativa $inserirBloqueio = $conexao->prepare("INSERT INTO bloqueios_login (codigo_cliente, data, ip, navegador, tentativas) VALUES (?, NOW(), ?, ?, 1)"); $codigoCliente = 1; // Aqui está enviando a informação para o banco como 1 , preciso enviar o que está na tabela codigo_cliente $navegador = $_SERVER['HTTP_USER_AGENT']; $inserirBloqueio->bindParam(1,$codigoCliente,PDO::PARAM_INT); $inserirBloqueio->bindParam(2,$ip,PDO::PARAM_STR); $inserirBloqueio->bindParam(3,$navegador,PDO::PARAM_STR); $inserirBloqueio->execute(); } // Obter a porta digitada no formulário $porta = $_POST['porta']; // Adicionar a porta na coluna codigo_stm coletada do que foi digitado no formulario não há necessidade de busca na tabela $adicionarPorta = $conexao->prepare("UPDATE bloqueios_login SET codigo_stm = ? WHERE ip = ?"); $adicionarPorta->bindParam(1,$porta,PDO::PARAM_STR); $adicionarPorta->bindParam(2,$ip,PDO::PARAM_STR); $adicionarPorta->execute(); // Verificar as credenciais do usuário se está correta $verificarUsuario = $conexao->prepare("SELECT * FROM streamings WHERE porta = ? AND senha = ?"); $verificarUsuario->bindParam(1,$porta,PDO::PARAM_STR); $verificarUsuario->bindParam(2,$senha,PDO::PARAM_STR); $verificarUsuario->execute(); $stm=$verificarUsuario; $resultadoUsuario = $verificarUsuario->fetchAll(PDO::FETCH_OBJ); // Se as credenciais estiverem corretas if ($stm->rowCount() > 0) { // Limpar o IP da tabela de bloqueios se o login for bem-sucedido $limparBloqueio = $conexao->prepare("DELETE FROM bloqueios_login WHERE ip = ?"); $limparBloqueio->bindParam(1, $ip,PDO::PARAM_STR); $limparBloqueio->execute(); // Adicionar o valor da "porta" na coluna 'codigo_stm' $row = $resultadoUsuario->fetch_assoc(); $codigo_stm = $row['codigo_stm']; echo "Login bem-sucedido! Código STM: $codigo_stm"; } else { echo "Credenciais inválidas. Por favor, tente novamente. Tentativa n. $tentativas"; include 'index.php'; } } Como você pode ver usei os métodos nativos do PDO, o que você usa é personalizado.
  18. Bom dia Alysson, o problema é que tenho as 5 variáveis V1 até V5 como textBox de uma entrada de dados. E ai preciso pegar os valores desses 5 textbox renomeados de V1 até V5 . (na verdade são 10) e não queria excrever 5x - V1, V2, .... até V5.
  19. Olá estou com uma dificuldade em algo, seria para um painel de streaming. Preciso fazer algo no login que seria fazer uma consulta em uma tabela exemplo streamings coluna codigo_cliente pega a informação dessa coluna e adicionar em outra. Seria mais ou menos assim streamings -> codigo_cliente pegou código exemplo (1) enviar para bloqueios_login -> codigo_cliente Essa informação coletada é enviada para o banco se houver uma solicitação de login mal sucedida e cada erro ele vai registrar 5 tentativas após essas 5 tentativa será bloqueado acesso. Tenho código pré pronto que está funcionando até ponto exceto a coleta da informação codigo_cliente na tabela streaming. Essa função serve para enviar os dados para o painel do revendedor, onde aparece os clientes bloqueados por erros de acesso. Porem painel do cliente verifica o codigo_cliente para saber se esse cliente pertence ao mesmo evitar que apareçã uma pancada de ips de bloqueados de outros clientes que não são desse revendedor. Não estou dando conta de fazer se alguém puder ajudar Aqui está o código // Verificar se o formulário de login foi submetido if ($_SERVER["REQUEST_METHOD"] == "POST") { $porta = $_POST['porta']; $senha = $_POST['senha']; // Verificar se o IP já foi bloqueado $ip = $_SERVER['REMOTE_ADDR']; $verificarBloqueio = $conexao->prepare("SELECT * FROM bloqueios_login WHERE ip = ? AND data >= DATE_SUB(NOW(), INTERVAL 1 HOUR)"); $verificarBloqueio->bind_param("s", $ip); $verificarBloqueio->execute(); $resultadoBloqueio = $verificarBloqueio->get_result(); $tentativas = 0; if ($resultadoBloqueio->num_rows > 0) { // Se o IP já estiver na tabela, atualize o número de tentativas $row = $resultadoBloqueio->fetch_assoc(); $tentativas = $row['tentativas'] + 1; // Verificar se excedeu o limite de tentativas if ($tentativas >= 6) { die("Seu IP foi bloqueado devido a múltiplas tentativas de login malsucedidas. Tente novamente mais tarde."); } // Atualizar o número de tentativas na tabela a cada erro $atualizarTentativas = $conexao->prepare("UPDATE bloqueios_login SET tentativas = ? WHERE ip = ?"); $atualizarTentativas->bind_param("is", $tentativas, $ip); $atualizarTentativas->execute(); } else { // Se o IP não estiver na tabela, insira-o como 1 tentativa $inserirBloqueio = $conexao->prepare("INSERT INTO bloqueios_login (codigo_cliente, data, ip, navegador, tentativas) VALUES (?, NOW(), ?, ?, 1)"); $codigoCliente = 1; // Aqui está enviando a informação para o banco como 1 , preciso enviar o que está na tabela codigo_cliente $navegador = $_SERVER['HTTP_USER_AGENT']; $inserirBloqueio->bind_param("iss", $codigoCliente, $ip, $navegador); $inserirBloqueio->execute(); } // Obter a porta digitada no formulário $porta = $_POST['porta']; // Adicionar a porta na coluna codigo_stm coletada do que foi digitado no formulario não há necessidade de busca na tabela $adicionarPorta = $conexao->prepare("UPDATE bloqueios_login SET codigo_stm = ? WHERE ip = ?"); $adicionarPorta->bind_param("ss", $porta, $ip); $adicionarPorta->execute(); // Verificar as credenciais do usuário se está correta $verificarUsuario = $conexao->prepare("SELECT * FROM streamings WHERE porta = ? AND senha = ?"); $verificarUsuario->bind_param("ss", $porta, $senha); $verificarUsuario->execute(); $resultadoUsuario = $verificarUsuario->get_result(); // Se as credenciais estiverem corretas if ($resultadoUsuario->num_rows > 0) { // Limpar o IP da tabela de bloqueios se o login for bem-sucedido $limparBloqueio = $conexao->prepare("DELETE FROM bloqueios_login WHERE ip = ?"); $limparBloqueio->bind_param("s", $ip); $limparBloqueio->execute(); // Adicionar o valor da "porta" na coluna 'codigo_stm' $row = $resultadoUsuario->fetch_assoc(); $codigo_stm = $row['codigo_stm']; echo "Login bem-sucedido! Código STM: $codigo_stm"; } else { echo "Credenciais inválidas. Por favor, tente novamente."; } }
  20. Boa noite @otavio Braga Imagino que utilizando o array (lista) de dados seja o mais adequado para o que esta precisando, olha o exemplo abaixo que coloquei: Sub teste() ' Usando um array Dim valores(1 To 5) As Integer ' Atribuindo valores valores(1) = 10 valores(2) = 20 valores(3) = 30 valores(4) = 40 valores(5) = 50 ' Iterando sobre o array Dim i As Integer For i = 1 To 5 MsgBox valores(i) Next i End Sub
  21. Ola pessoal. Estou tentando remover os hover dos links de um template, mas não estou conseguindo localizar no arquivo css qual é a opção correta. Podem me ajudar. Link do template que estou editando. https://azmind.com/demo/gioia/v1-0/ Link para o css. https://azmind.com/demo/gioia/v1-0/assets/css/style.css Grato por quem puder me ajudar. Paulo Kuba
  22. Boa tarde Não estou familiarizado com WSDL Trata-se de uma empresa de logistica com cotação online Gostaria de uma ajuda, se possível, para acessar as informações usando PHP https://ssw.inf.br/ws/sswColeta/index.php?wsdl Muito obrigado <definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:sswinfbr.sswColeta" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:sswinfbr.sswColeta"> <types> <xsd:schema targetNamespace="urn:sswinfbr.sswColeta"> <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/> </xsd:schema> </types> <message name="coletarRequest"> <part name="dominio" type="xsd:string"/> <part name="login" type="xsd:string"/> <part name="senha" type="xsd:string"/> <part name="cnpjRemetente" type="xsd:string"/> <part name="cnpjDestinatario" type="xsd:string"/> <part name="numeroNF" type="xsd:string"/> <part name="tipoPagamento" type="xsd:string"/> <part name="enderecoEntrega" type="xsd:string"/> <part name="cepEntrega" type="xsd:integer"/> <part name="solicitante" type="xsd:string"/> <part name="limiteColeta" type="xsd:dateTime"/> <part name="quantidade" type="xsd:integer"/> <part name="peso" type="xsd:decimal"/> <part name="observacao" type="xsd:string"/> <part name="instrucao" type="xsd:string"/> <part name="cubagem" type="xsd:decimal"/> <part name="valorMerc" type="xsd:decimal"/> <part name="especie" type="xsd:string"/> <part name="chaveNF" type="xsd:string"/> <part name="cnpjSolicitante" type="xsd:string"/> <part name="nroPedido" type="xsd:string"/> </message> <message name="coletarResponse"> <part name="return" type="xsd:string"/> </message> <portType name="sswinfbr.sswColetaPortType"> <operation name="coletar"> <documentation>Realiza o pre cadastro de coleta no sistema da transportadora.</documentation> <input message="tns:coletarRequest"/> <output message="tns:coletarResponse"/> </operation> </portType> <binding name="sswinfbr.sswColetaBinding" type="tns:sswinfbr.sswColetaPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="coletar"> <soap:operation soapAction="urn:sswinfbr.sswColeta#coletar" style="rpc"/> <input> <soap:body use="encoded" namespace="urn:sswinfbr.sswColeta" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:sswinfbr.sswColeta" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="sswinfbr.sswColeta"> <port name="sswinfbr.sswColetaPort" binding="tns:sswinfbr.sswColetaBinding"> <soap:address location="https://ssw.inf.br/ws/sswColeta/index.php"/> </port> </service> </definitions>
  23. boa tarde. tenho a seguinte situação sub teste v1=10, v2=20, v3=30,v4=40 e v5=50 ' agora quero mostrar os valores dessas 5 varáveis sem ter que escrever 5x algo do tipo for i=1 to 5 msgbox V&i ' esperando aparececer com i=1 , o valor 10 next i Só que aparece V1,V2,V3,V4 e V5 como fazre aparecer 10,20,30,40, e 50 ? obrigado Só complementando. É VBA -excel
  24. O problema é entender esse ID que você menciona, é difícil imaginar um registro com ID=1, outro com ID=3, outro com ID=3. Geralmente, o id é chave primária de quase todas as tabelas, e muitas delas tem um auto incremento, e assim não é permitido repetir o mesmo id. Se você puder dar um exemplo seria mais fácil ajudá-lo. A seguir montei um código mais simplificado para entender o seu problema: <?php $conn=new mysqli("localhost","root","","diario"); $conn->query("drop table if exists usuarios_dados"); $conn->query("CREATE TABLE `usuarios_dados` (`id` int NOT NULL AUTO_INCREMENT, `empresa` varchar(45) DEFAULT NULL,`senha` varchar(45) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci"); $conn->query("insert into usuarios_dados (empresa,senha) values ('Varig','senha'),('Globo','senha'), ('Record','senha'),('Laravel','senha'),('Band','senha')"); $result=$conn->query("select * from usuarios_dados"); ?> <table class='tabela_dados' border='1'> <tr> <td>id</td> <td>Empresa</td> </tr> <?php if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { ?> <tr> <td><?=$row['id']?></td> <td><?=$row['empresa']?></td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='id' value='<?=$row[id]?>'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='id' value='<?=$row[id]?>'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> <?php } }
  25. Eu ainda não tenho menor ideia do que seja distribuição de responsabilidade, mas para usar um view por vários métodos diferentes, eu inventei o POG, ou seja, tentativa e erro até funcionar: Arquivo Index.php <?php class Controller { public function getUserInput() { if($_GET) { $metodo = key($_GET)=='pergunta' ? $_GET[key($_GET)] : key($_GET); $parametro= key($_GET)!=='pergunta' ? $_GET[$metodo] : null; return $this->$metodo($parametro); } $this->loadview('candidato ou cliente?','pergunta'); } private function candidato($parametro) { $nome = $parametro ?? null; if($nome) { echo "O nome do candidato é " . $nome . "<hr><br>"; $_GET=null; return $this->getUserInput(); } $this->loadView('nome do candidato?','candidato'); } private function cliente($parametro) { $nome = $parametro ?? null; if($nome) { echo "O nome do cliente é " . $nome . "<hr><br>"; $_GET=null; return $this->getUserInput(); } $this->loadView('nome do cliente?','cliente'); } private function loadView($mensagem,$metodo) { require 'view.php'; } } (new Controller)->getUserInput(); Arquivo view.php <form> <?=$mensagem?> <input name=<?=$metodo?>> <input type='submit'> </form>
  26. Mais Cedo
  27. Sua abordagem para integrar o MVC e capturar dados do usuário é criativa e mostra que você está explorando diferentes maneiras de estruturar seu código! No entanto, para seguir mais de perto os princípios do MVC (Model-View-Controller), você pode considerar separar as responsabilidades de forma mais clara, garantindo que cada parte do seu sistema tenha um propósito definido. Aqui vai uma sugestão de como estruturar o código mantendo a separação de responsabilidades: // Arquivo index.php class Controller { public function getUserInput() { if(isset($_GET['action'])) { $action = $_GET['action']; $this->$action(); } } private function candidato() { $nome = $_GET['candidato'] ?? null; if($nome) { echo "O nome do candidato é " . $nome . "<br>"; } $this->loadView('candidato'); } private function cliente() { $nome = $_GET['cliente'] ?? null; if($nome) { echo "O nome do cliente é " . $nome . "<br>"; } $this->loadView('cliente'); } private function loadView($viewName) { require 'view.php'; } } $controller = new Controller(); $controller->getUserInput(); // Arquivo view.php if(isset($viewName)) { echo "<form>Nome do {$viewName}: <input name='{$viewName}'> <input type='submit'></form>"; } Esse exemplo de código escrito por meu colega da king slots implementa um esquema MVC em que o controlador lida com a lógica de decisão e a invocação de visualização, e o arquivo de visualização se concentra na visualização de dados. Observe que usei métodos privados no controlador para lidar com as ações de "candidato" e "cliente" e um método loadView para carregar a visualização apropriada. Isso centraliza o controle e facilita a manutenção futura.
  28. Parece que você teve uma experiência desafiadora ao tentar aplicar a fatoração no seu código! Realmente, herdar a conexão de uma classe base pode ser útil, mas requer atenção aos detalhes, como a inicialização correta dos construtores. Uma sugestão seria chamar explicitamente o construtor da classe pai (parent::__construct();) no construtor da classe ControleProduto para garantir que a conexão seja estabelecida antes de qualquer operação. Isso evitaria a necessidade de duplicar o código de conexão em várias classes. E sobre usar variáveis públicas, considerar o encapsulamento através de métodos getters e setters pode ser uma prática mais segura. Erros e desafios são parte do aprendizado, então veja isso como um passo importante no seu desenvolvimento como programador!
  1. Mais Resultados


  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...