send 2 variables by url

Asked

Viewed 88 times

-1

Sending 2 variáveis for url:

var http = false;
http = new XMLHttpRequest();

function carrega(){

   var nome = document.getElementById('CodigoUtente').value;
   var nomes = document.getElementById('Nome').value;

   var url_="conexao4?CodigoUtente="+nome+"&Nome="+nomes;
   http.open("GET",url_,true);
   http.onreadystatechange=function(){
      if(http.readyState==4){

         var retorno = JSON.parse(http.responseText);

         document.getElementById('CodigoUtente').value = retorno.CodigoUtente;
         document.getElementById('Nome').value = retorno.Nome;
         document.getElementById('DataNasc').value = retorno.DataNasc;
         document.getElementById('Sexo').value = retorno.Sexo;
         document.getElementById('Estadocivil').value = retorno.Estadocivil;
         document.getElementById('Nacionalidade').value = retorno.Nacionalidade;
         document.getElementById('Responsavel').value = retorno.Responsavel;
         document.getElementById('Parentesco').value = retorno.Parentesco;
         document.getElementById('Contato').value = retorno.Contato;
      }
   }
   http.send(null);

}

in the related page 4 I have php that receives the variables:

$CodigoUtente = $_GET['CodigoUtente'];
$Nome = $_GET['Nome'];

if((isset($CodigoUtente)) && (isset($Nome))){  

   $sql = "SELECT CodigoUtente, Nome, DataNasc, Sexo, Estadocivil, Nacionalidade, Responsavel, Parentesco, Contato FROM centrodb.PsicUtentes WHERE (CodigoUtente = '$CodigoUtente') OR (Nome = '%$Nome%')";

   $resultados = $conn->query($sql);

   $json = array();

   while ($rowResultados = $resultados->fetch_assoc()) {

      $dados = array(
         'CodigoUtente' => $rowResultados['CodigoUtente'],
         'Nome' => $rowResultados['Nome'],
         'DataNasc' => $rowResultados['DataNasc'],
         'Sexo' => $rowResultados['Sexo'],
         'Estadocivil' => $rowResultados['Estadocivil'],
         'Nacionalidade' => $rowResultados['Nacionalidade'],
         'Responsavel' => $rowResultados['Responsavel'],
         'Parentesco' => $rowResultados['Parentesco'],
         'Contato' => $rowResultados['Contato']
      );
      $json = $dados;

   }

echo json_encode($json);

}  

The problem is that they only work if you fill both inputs and intended to return the database data just by filling one of them.

I’m trying to solve this way, but it keeps returning always the last row of the table:

$where_caluse = array();
$CodigoUtente = $_GET['CodigoUtente'];
$Nome = $_GET['Nome'];

if(isset($_GET['CodigoUtente'])){
  $where_caluse[] = "CodigoUtente = '".$_GET['CodigoUtente']."'";    
}

if(isset($_GET['Nome'])){
  $where_caluse[] =  "Nome = '".$_GET['Nome']."'";  
}

$where = array_filter($where_caluse);

$query = "SELECT CodigoUtente, Nome, DataNasc, Sexo, Estadocivil, Nacionalidade, Responsavel, Parentesco, Contato FROM centrodb.PsicUtentes";

$resultados = $conn->query($query);

if(!empty($where)){

$final_where = count($where) > 1 ? implode(' OR ', $where) : end($where);
$query = "$query WHERE ". $final_where;

$json = array();

while ($rowResultados = $resultados->fetch_assoc()) {

  $dados = array(
     'CodigoUtente' => $rowResultados['CodigoUtente'],
     'Nome' => $rowResultados['Nome'],
     'DataNasc' => $rowResultados['DataNasc'],
     'Sexo' => $rowResultados['Sexo'],
     'Estadocivil' => $rowResultados['Estadocivil'],
     'Nacionalidade' => $rowResultados['Nacionalidade'],
     'Responsavel' => $rowResultados['Responsavel'],
     'Parentesco' => $rowResultados['Parentesco'],
     'Contato' => $rowResultados['Contato']
    );
      $json = $dados;
}
echo json_encode($json);

}   
  • You were no longer asked that? Why excluded and asked again?

2 answers

2


Hello, I created 3 conditions so that if the variable values $Nome $CodigoUtente there is no query for your query, basically it was a few ifs that determined whether the query would or would not have Where conditions:

Related page4

$CodigoUtente = $_GET['CodigoUtente'];
$Nome = $_GET['Nome'];

// Verficando se os dois parametros foram pasados, 
if(($Nome != "") && ($CodigoUtente != "")){
    $sql_where = "WHERE (CodigoUtente = '$CodigoUtente') OR (Nome = '%$Nome%')";    
} else if ($CodigoUtente != ""){
    $sql_where = "WHERE (CodigoUtente = '$CodigoUtente')";    
}else if ($Nome != ""){
    $sql_where = "WHERE (Nome = '%$Nome%')";        
} else {
    // sem nada aqui porque não fez uma busca e sim quer listar todos, é opicional
    $sql_where = "";
}



if((isset($CodigoUtente)) && (isset($Nome))){  

    $sql = "SELECT CodigoUtente, Nome, DataNasc, Sexo, Estadocivil, Nacionalidade, Responsavel, Parentesco, Contato FROM centrodb.PsicUtentes ".$sql_where;    

   $resultados = $conn->query($sql);

   $json = array();

   while ($rowResultados = $resultados->fetch_assoc()) {

      $dados = array(
         'CodigoUtente' => $rowResultados['CodigoUtente'],
         'Nome' => $rowResultados['Nome'],
         'DataNasc' => $rowResultados['DataNasc'],
         'Sexo' => $rowResultados['Sexo'],
         'Estadocivil' => $rowResultados['Estadocivil'],
         'Nacionalidade' => $rowResultados['Nacionalidade'],
         'Responsavel' => $rowResultados['Responsavel'],
         'Parentesco' => $rowResultados['Parentesco'],
         'Contato' => $rowResultados['Contato']
      );
      $json = $dados;

   }

echo json_encode($json);

} 

The applied logic was, if Name has only it searched by name only, if it has only the client code it searched only by client code and if it has both it will search for one or the other.

I hope I’ve helped.

  • There’s only one problem. The problem is if searching for example by code user 255 I can only do new search for a higher code user, for example if it is a smaller code user, for example 151, does not return the data of the new user I searched, but if it is 452 already returns.

  • Boy I don’t quite understand, when you search for a number, and then do a new search only works if the codigoutente be greater ?

  • yes. After doing the first search, I can only do it again if the user code is larger than the previous one, if it is smaller it does not work.

  • do the test for me do the search and put a number and see if this number will be sent in the url as a smaller number, or will keep the same number.

  • Rapais test with this correction that I did, I ended up reversing the SQL inside the Where

  • to work had already reversed the sql inside Where, because otherwise received Undefined in inputs

Show 2 more comments

1

Dear, You will have to do a treatment in the $sql variable, checking whether the parameters were informed or not, to then concatenate...

Something like that:

$sql = "SELECT CodigoUtente, Nome, DataNasc, Sexo, Estadocivil, Nacionalidade, Responsavel, Parentesco, Contato FROM centrodb.PsicUtentes WHERE 1 = 1 ";

if($CodigoUtente != "" )
     $sql .= "AND (CodigoUtente = '$CodigoUtente') ";

if($Nome != "")
     $sql .= "AND (Nome = '%$Nome%')";

I put it as AND because it will only enter the query if it has actually been informed, it will need some adjustments if you really want it to be an OR (adjust with keys)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.