Ir ao conteúdo

Posts recomendados

Postado

Queria fazer um select com PHP porém não está funcionando

<?php

    //Conexao
    include("conexao.php");

    //SQL
    $sql = "SELECT * FROM cursos";

    //Executar o comando
    $executar = mysqli_query($conexao, $sql);

    //Exibir dados
    while($indice = mysqli_fetch_assoc($executar)){
        echo $indice["curso"]."<hr>";
    }
?>

Aqui meu script

function selecionar(){

            //Ajax
            let ajax = new XMLHttpRequest();

            //Connection validate
            ajax.onreadystatechange = function(){
                
                if((this.readyState == 4) && (this.status == 200)){
                    document.getElementById("tabela").innerHTML = this.responseText;
            } else{
                    document.getElementById("tabela").innerHTML = "Falha ao carregar lista";
            }

            //Obter dados
            ajax.open("GET", "php/selecionar.php", true);
            ajax.send();

        }

        //Ao carregar o arquivo
        window.onload = function(){
            selecionar();
        }
    }

 

Postado

Olá!

você precisa de um script mais robusto.
Que seja capaz de te informar quando e onde há alguma falha.
Segue sugestão (Oops! Tipei um arquivo em php8):

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    input {
      display: block
    }

    .response-table {
      font-family: monospace;
      white-space: pre;
    }
  </style>
</head>

<body>

  <main>
    <form>
      <div>
        <label>Curso</label>
        <input type="text" name="curso" value="Matemática" required autofocus>
      </div>
      <div>
        <label>Valor</label>
        <input type="number" name="valor" value="158.90" required step=".1">
      </div>
      <div>
        <br>
        <button>Salvar</button>
      </div>
    </form>
    <div class="response-body"></div>
    <h2>Get Cursos</h2>
    <div class="response-table"></div>
  </main>
  <script src="assets/app.js"></script>
</body>

</html>

 

assets/app.js

/**
 * TREAT RESPONSE
 * @param {*} response
 */
const treatResponse = async (response) => {
  let body
  // se no cabeçalho da response tiver json
  if (response.headers.get('content-type').includes('json')) {
    // trata a response como json
    body = await response.json()
  } else {
    // trata a response como texto
    body = await response.text()
  }

  return body
}
/**
 * CADASTRAR
 * @param {*} e
 */
const cadastrar = async (e) => {
  // evita que o submit do form atualize a página
  e.preventDefault()

  // define o formData
  const fData = new FormData(e.target)

  // submete os dados do form e espera pela resposta
  const response = await fetch(`api/`, {
    method: 'post',
    body: fData
  })

  const body = await treatResponse(response)

  // mostra a resposta na tela
  document.querySelector('.response-body').innerHTML = body

  // atualiza os dados da tabela
  getTableData()
}

// escuta o submit do form
document.querySelector('form').addEventListener('submit', cadastrar)

/**
 * GET TABLE DATA
 */
const getTableData = async () => {
  // submete a requisição e espera pela resposta
  const response = await fetch(`api/cursos`, {
    method: 'get'
  })

  const body = await treatResponse(response)

  console.log('response :>> ', body)

  // mostra a resposta na tela
  document.querySelector('.response-table').innerHTML = JSON.stringify(body, null, 2)
}

getTableData()

 

api/index.php

<?php

// se algo foi postado
if (sizeof($_POST)) {
  // conecta ao database
  require 'connection.php';
  // extrai as variáveis em $_POST
  extract($_POST);
  // escapa os valores das variáveis
  $curso = $sqli->real_escape_string($curso);
  $valor = $sqli->real_escape_string($valor);

  // monta a query de inserção
  $query  = "insert into cursos set curso='$curso', valor='$valor'";

  // executa a query
  $sqli->query($query);

  // verifica se houve alguma falha na execução da query
  if ($sqli->error) {
    // devolve json com a mensagem de erro
    jsonResponse('<p class="text-danger"><b>ERROR</b>: ' . $sqli->error . '</p><small class="text-secondary">' . __FILE__ . ' at line: ' . __LINE__ . '<small>', 500);

    // se não houve falha
  } elseif ($sqli->affected_rows) {
    // devolve mensagem de sucesso
    jsonResponse('Registro inserido com sucesso, chefe!');
  } else {
    // devolve json com a mensagem de erro
    jsonResponse('Nada foi alterado, chefe!', 400);
  }
}


api/connection.php

<?php

require 'helpers/httpResponse.php';

// definição de variáveis para conexão
$host     = 'localhost';        // servidor
$user     = 'root';             // nome do utilizador
$pass     = 'my-secret-pw';     // senha ou password
$database = 'studies';          // nome da base de dados

// estabelecer conexão:
$sqli = new mysqli($host, $user, $pass);

// verificando se conectou de boas:
if ($sqli->connect_error) {
  // se houver alguma falha, exibe mensagem:
  jsonResponse('<p class="text-danger">Falha na conexão: ' . $sqli->connect_error . '</p>', 400);
}

// definir o padrão de caracteres
if (!$sqli->set_charset('utf8')) {
  // se não conseguir definir o padrão de caracteres, exibe o padrão disponível
  jsonResponse("<p class='text-danger'>Seu charset não é utf8, chefe!<br>$sqli->character_set_name()</p>", 400);
}

// selecionar/abrir o banco de dados para trabalhar
if (!$sqli->select_db($database)) {
  // se o banco de dados não for encontrado
  jsonResponse("<p class='text-danger'>Banco de dados não encontrado, chefe!</p>", 400);
}

 

database.sql

set names utf8mb4;

drop schema if exists studies;
create schema studies;
use studies;

create table cursos(
  id         int not null auto_increment primary key,
  curso varchar(191),
  valor decimal(10,2),
  created_at timestamp default current_timestamp
);

insert into cursos(curso, valor) values ('Português', 100.99);


api/helpers/httpResponse.php

<?php
  /**
   * @param string|array|null $data
   * @param int $code
   * @return void
   */
  function jsonResponse(string|array $data = null, int $code = 200): void
  {
    // clear the old headers
    header_remove();
    // set the actual code
    http_response_code($code);

    // treat this as json
    header('Content-Type: application/json');

    $status = [
      200 => '200 OK',
      400 => '400 Bad Request',
      404 => '400 Not Found',
      422 => 'Unprocessable Entity',
      500 => '500 Internal Server Error'
    ];

    // ok, validation error, or failure
    header('Status: ' . $status[$code]);

    if ($code !== 200) {
      // guarda os dados do backtrace
      $debug = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0];

      if (is_array($data)) {
        $data['debug'] = $debug;
      } else {
        $data .= "<small class='text-secondary'><b>FILE</b>: $debug[file], <b>LINE</b>: $debug[line]<small>";
      }
    }
    // return the encoded json
    die(is_array($data) ? json_encode($data) : '"' . $data . '"');
  }

 

api/cursos/index.php

<?php
// conecta ao database
require '../connection.php';

// define a query de busca
$query = 'select * from cursos order by created_at desc';

// executa a query de busca e guarda o resultado em $result
$result = $sqli->query($query);

// verifica se houve alguma falha na execução da query
if ($sqli->error) {
  // se houve alguma falha, exibe mensagem:
  jsonResponse('<p class="text-danger"><b>Falha na conexão</b>: ' . $sqli->error . '</p>', 500);

  // se não houve falha e algum registro foi encontrado
} elseif ($result->num_rows) {
  // guarda os registros em $dada
  $data = $result->fetch_all(MYSQLI_ASSOC);

  // encerra o script devolvendo um json
  jsonResponse(['data' => $data]);

  // se não houve erro e nenhum registro foi encontrado
} else {
  // devolve json com mensagem
  jsonResponse('Nenhum registro foi encontrado.', 404);
}

 

screenshot
image.png.d83e290c34d72376e2efbba298f95bcf.png

  • Curtir 1
Postado

Brigadão mano mas não era pra ser algo tão complexo assim, era somente pra trazer a lista em uma div com javascript, era um exemplo pra ver o funcionamento do Ajax, mas muito obrigado :) 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!