Jump to content
Márcio Lima

O abc do PHP e AJAX

Recommended Posts

Márcio Lima

Viva!

Nos últimos tempos tenho me aventurado em criar algumas análises e formulários a uma base de dados em MS SQL recorrendo a PHP.

Salvaguardo que os meus conhecimentos em HTML e/ou PHC são menos que básicos, contudo, recorrendo alguma pesquisa e tentativa erro, tenho conseguido solucionar alguns problemas.

No entanto, cheguei a um problema ainda não consegui resolver:

Tenho uma página em HTML e PHP que apresenta uma tabela, resultante de um select à minha BD. O meu objectivo agora é, por cada linha da tabela, disponibilizar uma caixa de texto e um botão de forma a actualizar um campo dessa mesma tabela.

<!DOCTYPE html>
<html lang="pt">
<head>
<link rel='icon' href='img/favicon.ico' type='image/x-icon'/ >
  <title>Listagem</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>


<?php
$sql = "select bistamp, nome, obrano, ref, design, qtt, familia from bi (nolock) where qtt<>0 and bostamp='".$_GET['pkno']."'";

include 'dbcon.php';
//Executa QUERY
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}
 if( $head = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

echo "
<div class='container'>
  <h2>PackingList - ".$head['obrano']."</h2>
 </div>"; 



 
echo " 
 <div class='container'>

  <p><h5><b>Cliente: </b>".$head['nome']."</h5></p><br>            

  <table class='table table-striped'>";
}


echo "
	<thead>
      <tr>
        
		
        <th>Ref</th>
        <th>Design</th>
		<th>Qtt</th>
		<th>Qtd Stf</th>
	</tr>
	</thead>";
	

	//PRENCHIMENTO DE LINHA
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

  echo "
  <tbody>
      <tr>
        
		
        <td>".$row['ref']."</td>
		<td>".$row['design']."<br><br><b>Familia: </b>".$row['familia']."</td>
		<td>".$row['qtt']."</td>
		<td> 
		<form  name='updphc' method='post' action=''> 
    	<input class='form-control input-md' type='number' id='myqtt2' min='0' max='".$row['qtt']."'><br>
		<button class='btn btn-primary btn-lg' name='btn-".$row['bistamp']."' type='submit' value='".$row['bistamp']."' >Atualiza</button><br><br>
		</form>
		
		
			
		</td>
        
      </tr>
  </tbody>
  ";
 
}
sqlsrv_free_stmt( $stmt);

// Close the connection.
sqlsrv_close( $conn );

?>

</form>  
</table>
</div>

<script>
$(document).ready(function() {
   var delay = 2000;
   $('.btn-primary').click(function(e){
   e.preventDefault();
   var myqtt2 = $('#myqtt2').val();
   if(myqtt2 == ''){
   alert("Quandidade Vazia");
   $('#myqtt2').focus();
   return false;
   }
	
					
   $.ajax
   ({
   type: "POST",
   url: "query.php",
   data: { myqtt2: myqtt2 },
 	 
   success: function(data)
   {
   setTimeout(function() {
   $('.message_box').html(data);
   }, delay);
   }
   });
   });
			
});
</script>

</body>
</html>

O problema é que com este código actual apenas me é considerado a caixa de texto da primeira linha.

Sinto me perdido neste momento.

Alguem me pode ajudar sobre isto?

Um abraço,

 

Márcio LIma

Share this post


Link to post
Share on other sites
Cerzedelo

A primeira questão é,  está a fazer a leitura do campo das qtt, quando está a carregar a página, através do documento ready. Isto é, a leitura das qtt é feita quando a página é carregada pelo browser e não quando clica no botão.

Deve só despoletar a acção de actualização, quando depois de actualizar o campo, clicar no botão actualizar, para isso, deve dar ao referido botão o evento click.

$( "#actualizar" ).click(function() {
  alert( "O botão actualizar foi premido." );
});

A tag actualizar seria o id do botão actualizar.

Depois existe a segunda fase da questão, é a de saber qual é a linha que está a actualizar, isto se quiser fazer o update na base de dados. E para isso, convinha ter um elemento identificativo, um id, por cada uma das linhas, coisa que aparentemente a sua tabela não mostra. Neste caso, nem precisa de um botão, basta clicar na linha da tabela para obter o resultado.

${'#tabela tr td').click(function(){
    var qt = $(this).attr('qtt');
    alert(qt);
    
});

 

Por último, se não quiser estar a redescobrir a roda, e facilitar o trabalho, pode utilizar  DataTables, que lhe permite manipular as tabelas em html.

Ver exemplo em : https://editor.datatables.net/examples/inline-editing/simple

 

  • Vote 1

Share this post


Link to post
Share on other sites
Márcio Lima

Viva

 

Obrigado pela ajuda. Parece-me lógico.

O problema aqui é precisar de resolver esta situação da actualização e não ter as noções básicas de como isto funciona.

Relativamente à identificação do actualizar, a minha ideia seria introduzir a primarykey da linha no id do botão e/ou caixa actualizar e utilizar esse código para a query.

Contudo a dificuldades também passa de: como passar uma variavel do PHP para o script ajax naquele preciso momento.

 

Obrigado pela ajuda.

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

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.