Solucionado (ver solução)
Solucionado
(ver solução)
13
respostas

Estou precisando de uma ajuda não sei como fazer isso em php puro

Tenho um form que lista os bairros em dois Select exemplo Santana/Jabaquara

até aqui tudo certo o código abaixo esta carregando a lista de bairros nos dos selects , mas como eu vou exibir em um outra tela se o usuário selecionar por exemplo Centro/Jardins.


<?php include ("topo.php"); ?>
<?php include ("conexao.php"); ?>
<?php include ("data-bairro.php");?>

<?php $listaBairros = listaBairros($conexao); ?>


<br/><br/><br/>






  <form method ="POST" action ="lista-valor-corrida.php" value "bairro_i">
    <table class="table table-bordered ">
      <tr>
        <td>Origem
    <select name ="bairro_i" value ="bairro_ix">
      <?php foreach($listaBairros as $categoria): ?>
        <option value ="<?=$categoria ['Nm_bairro']?>">
          <?=$categoria ['Nm_Bairro']?>

        </option>
      <?php endforeach  ?>
    </select>
</form>


     <td>Destino
    <!-- //segundo combo -->
    <form method ="POST" name="bairro_f" value ="bairro_f">
    <select name ="bairro_f" value ="bairro_f">
      <?php foreach($listaBairros as $categoria): ?>
        <option value ="<?=$categoria ['Nm_bairro']?>">
          <?=$categoria ['Nm_Bairro']?>
        </option>

      <?php endforeach  ?>
    </select>

  </form>


</tr>

</table>
  <input type ="submit" value ="Pesquisar" >

<?php include ("rodape.php")?>
13 respostas

O melhor é que seja um form só. Aí vc vai passar os bairros escolhidos para a outra tela. Lá vc vai ter os ids selecionados e pode fazer o que quiser.

Mas como fazer ? Eis a questão ?

Oi Carlos, vou ter que pedir que vc tente e vá postando as dúvidas do seu código aqui. Começa pelo simples.. agrupe os dois selects num form só, coloque names diferentes, aponte para outro arquivo php e vá tentando descobrir.

Aqui esta a função que lista os dois bairros e observação ela precisa ser concatenada

function listaTrajetos($conexao) {
    $trajetos = array();
    $sql = mysqli_query($conexao,"select * from vw_valor_trajetos  where trajeto like '.$bairro_i ."/". $bairro_f%'");
//    $sql = mysqli_query($conexao, "SELECT * FROM vw_valor_trajetos where trajeto like'$bairro_i'."/".'{$bairro_f'");

    while ($trajeto = mysqli_fetch_assoc($sql)) {
      array_push ($trajetos , $trajeto);
    }
    return $trajetos ;

Aqui o codigo dos buscatrajetos

<form method ="POST" action ="lista-valor-corrida.php" value "bairro_i">
    <table class="table table-bordered ">
      <tr>
        <td>Origem
    <select name ="bairro_i" value ="bairro_ix">
      <?php foreach($listaBairros as $categoria): ?>
        <option value ="<?=$categoria ['Nm_bairro']?>">
          <?=$categoria ['Nm_Bairro']?>

        </option>
      <?php endforeach  ?>
    </select>
</form>


     <td>Destino
    <!-- //segundo combo -->
    <form method ="POST" name="bairro_f" value ="bairro_f">
    <select name ="bairro_f" value ="bairro_f">
      <?php foreach($listaBairros as $categoria): ?>
        <option value ="<?=$categoria ['Nm_bairro']?>">
          <?=$categoria ['Nm_Bairro']?>
        </option>

      <?php endforeach  ?>
    </select>

  </form>

E aqui o codigo do listavalortrajetos

<?php include ("topo.php"); ?>
<?php  include ("conexao.php") ?>
<?php include ("data-bairro.php") ?>


<?php
$listaTrajetos =listaTrajetos($conexao)
?>

<?php foreach($listaTrajetos as $trajeto): ?>
    <?=$trajeto ['id_trajeto']?>">
    <?=$trajeto ['trajeto']?>

<?php endforeach  ?>

<?php include ("rodape.php");?>

mas nao funciona

Se eu conseguir passar esses parametros para o databairro.php acho que estará resolvido. Na segunda linha de código abaixo mostra a tela valor-trajeto.php basta saber como se pega o valor dos selects no caso pode ser texto mesmo e jogar la no sql


    $sql = mysqli_query($conexao,"select * from vw_valor_trajetos  where trajeto like '$bairro_i."/".$bairro_f' ");

<?php include ("topo.php"); ?>
<?php include ("conexao.php"); ?>
<?php include ("data-bairro.php");?>

<?php $listaBairros = listaBairros($conexao); ?>


<br/><br/><br/>





  <form method ="POST" action ="lista-valor-corrida.php" value "bairro_i">
    <table class="table table-bordered ">
      <tr>
        <td>Origem
    <select name ="bairro_i" value ="bairro_i">
      <?php foreach($listaBairros as $categoria): ?>
        <option value ="<?=$categoria ['Nm_bairro']?>">
          <?=$categoria ['Nm_Bairro']?>

        </option>
      <?php endforeach  ?>
    </select>
</form>


     <td>Destino
    <!-- //segundo combo -->
    <form method ="POST" name="bairro_f" value ="bairro_f">
    <select name ="bairro_f" value ="bairro_f">
      <?php foreach($listaBairros as $categoria): ?>
        <option value ="<?=$categoria ['Nm_bairro']?>">
          <?=$categoria ['Nm_Bairro']?>
        </option>

      <?php endforeach  ?>
    </select>

  </form>


</tr>

</table>
  <input type ="submit" value ="Pesquisar" >

<?php include ("rodape.php")?>

Pelo que eu entendi, o que você precisa fazer é o seguinte

lista-bairros.php

<?php include ("topo.php"); ?>
<?php include ("conexao.php"); ?>
<?php include ("data-bairro.php");?>

<?php $listaBairros = listaBairros($conexao); ?>

<form method ="POST" action ="lista-valor-corrida.php" >
  <p>Origem</p>
  <select name ="bairro_i" >
      <?php foreach($listaBairros as $categoria): ?>
        <option value ="<?=$categoria ['Nm_bairro']?>">
          <?=$categoria ['Nm_Bairro']?>

        </option>
      <?php endforeach  ?>
    </select>
   <p></p>
   <p>Destino</p>
   <select name ="bairro_f" >
      <?php foreach($listaBairros as $categoria): ?>
        <option value ="<?=$categoria ['Nm_bairro']?>">
          <?=$categoria ['Nm_Bairro']?>
        </option>

      <?php endforeach  ?>
    </select>
    <p></p>
    <input type="submit" value="Calcular">

</form>

lista-valor-corrida.php

<?php include ("topo.php"); ?>
<?php  include ("conexao.php") ?>
<?php include ("data-bairro.php") ?>


<?php
$origem = "";
$destino = "";
if (isset($_POST["bairro_i"])){
    $origem = $_POST["bairro_i"];
}
if (isset($_POST["bairro_f"])){
    $destino = $_POST["bairro_f"];
}


$listaTrajetos =listaTrajetos($conexao, $origem, $destino);
?>

<?php foreach($listaTrajetos as $trajeto): ?>
    <?=$trajeto ['id_trajeto']?>">
    <?=$trajeto ['trajeto']?>

<?php endforeach  ?>

Função

function listaTrajetos($conexao, $bairro_i, $bairro_f) {
    $trajetos = array();
    $sql = mysqli_query($conexao,"select * from vw_valor_trajetos  where trajeto like '.$bairro_i ."/". $bairro_f%'");


    while ($trajeto = mysqli_fetch_assoc($sql)) {
      array_push ($trajetos , $trajeto);
    }
    return $trajetos ;

    }

Quase lá se resolver esse erro estranho. Esta dizendo que o resultado não pode ser dividido por zero mas o erro vem da select ``` insira seu código aqui Aviso : A divisão por zero no D: \ xampp \ htdocs \ cometa \ data-bairro.php na linha 4

Aviso : mysqli_fetch_assoc () espera o parâmetro 1 para ser mysqli_result, booleano dado em D: \ xampp \ htdocs \ cometa \ data-Bairro .php na linha 7


Aviso : A divisão por zero no D: \ xampp \ htdocs \ cometa \ data-bairro2.php na linha 4 

Aviso : mysqli_fetch_assoc () espera o parâmetro 1 para ser mysqli_result, booleano dado em D: \ xampp \ htdocs \ cometa \ data-bairro2 .php na linha 7

<?php
function listaTrajetos($conexao, $bairro_i, $bairro_f) {
    $trajetos = array();
    $sql = mysqli_query($conexao,"select * from vw_valor_trajetos  where trajeto like '.$bairro_i."/".$bairro_f%'");


    while ($trajeto = mysqli_fetch_assoc($sql)) {
      array_push ($trajetos , $trajeto);
    }
    return $trajetos ;

    }




?>
    <?php
    function listaBairros($conexao) {
        $bairros = array();
        $resultado = mysqli_query($conexao, "select * from tb_bairro");

        while($bairro = mysqli_fetch_assoc($resultado)) {
            array_push($bairros, $bairro);
        }

        return $bairros;

    }

Neste caso teria que fazer ajustes na view "vw_valor_trajetos", já que toda a lógica está dentro dela. Você poderia fazer testes manuais direto no banco para identificar melhor o problema, no SQL você pode usar condições (para evitar esse erro de divisão por zero)

Algo que você pode tentar para contornar o erro seria fazer o seguinte.

function listaTrajetos($conexao, $bairro_i, $bairro_f) {
    $trajetos = array();
    $query = "select * from vw_valor_trajetos  where trajeto like '.$bairro_i."/".$bairro_f%'";
    echo $query; //Apenas para imprimir na tela e testar manualmente no banco

    try {
        $sql = mysqli_query($conexao, $query);
        while ($trajeto = mysqli_fetch_assoc($sql)) {
          array_push ($trajetos , $trajeto);
        }
    } catch (Exception $e) {
        //Houve um erro
    }
    return $trajetos ;

 }

Não deve aparecer a mensagem de erro, mas não deve retornar nada.

No banco de dados está normal se eu colocar dentro do select ex:

Selecione * de vw_valor_trajetos onde trajeto como 'Centro / Sta Monica' 1945 Centro / Sta Monica

Executa normal acredito que o problema esteja nos parâmetros. Os paramentros são concatenados 2 para fazer um centro/santa monica =.$bairro_i ."/".$bairro_f

Aviso : A divisão por zero no D: \ xampp \ htdocs \ cometa \ data-bairro2.php na linha 5 NAN Aviso : mysqli_fetch_assoc () espera o parâmetro 1 para ser mysqli_result, booleano dado em D: \ xampp \ htdocs \ cometa \ data- bairro2.php na linha 10

<?php

function listaTrajetos($conexao, $bairro_i, $bairro_f) {
    $trajetos = array();
    $query = "select * from vw_valor_trajetos  where trajeto like '.$bairro_i."/".$bairro_f%'";
    echo $query; //Apenas para imprimir na tela e testar manualmente no banco

    try {
        $sql = mysqli_query($conexao, $query);
        while ($trajeto = mysqli_fetch_assoc($sql)) {
          array_push ($trajetos , $trajeto);
        }
    } catch (Exception $e) {
        //Houve um erro
    }
    return $trajetos ;

 }

pode não ser isso, mas me parece que de alguma maneiro o php está entendo que $bairro._i"/".$bairro_f é uma divisão quando na verdade é uma concatenação de duas string + / para fazer o paramento correto bairro_i/bairro_f ou Centro/Santana como mostra na tabela

solução!

Você se confundiu com as aspas, Carlos. Veja o que colocou:

 $query = "select * from vw_valor_trajetos  where trajeto like '.$bairro_i."/".$bairro_f%'";

Você começa abrindo uma aspas dupla, mas não fecha ela para concatenar o $bairro_i, já que usa uma aspas simples. Em vez disso, acaba fechando só antes da / e abrindo, novamente, depois dela, para então fechar tudo no final da string. Basicamente, o que acaba acontecendo é que o PHP tenta dividir a string "select * from vw_valor_trajetos where trajeto like '.$bairro_i." com a string ".$bairro_f%'". Consertando as aspas esse problema da divisão deve resolver. Mas eu não acho o mais adequado concatenar strings desnecessariamente e especialmente em queries de banco de dados, que muitas vezes são mais complexas. Por que você não usa isso?:

$query = "SELECT `*` FROM `vw_valor_trajetos` WHERE `trajeto` LIKE '{$bairro_i}/{$bairro_f}%'";

Tks Agradeço demais !!! Tudo certinho agora !!! Muito obrigado Resolvido