Pesquisa incremental com PHP e MySQL

1. Pesquisa incremental com PHP e MySQL

André
andrezc

(usa Debian)

Enviado em 31/08/2012 - 11:42h

Olá. Eu tenho esses arquivos:


index.php

<?php
include_once("gridview_functions.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt">
<head>
</script>
<pre style="font-family: Book Antiqua; color: white; font-weight: bold;">Razao Social:</pre>
<td><input id="pesquisa" type="text" name="pesquisa" size="100"> </td>
<br><br>
<link rel="stylesheet" type="text/css" href="style.css" media="screen" />
<script type="text/javascript" src="ajax.js"></script>
</head>
<body>
<div class="container" id="container">
<div class="loading" id="loading" /></div>
<div class="content" id="content"><!-- inicio content -->
<?php
echo DoGridView(1,GRIDVIEW_NAME,GRIDVIEW_CLASS_TABLE,GRIDVIEW_CLASS_HEADER,
GRIDVIEW_CLASS_CELL,GRIDVIEW_CLASS_ALTERNATE_CELL);
?>
</div><!-- fim content -->
</div>
</body>
</html>



gridview_functions.php

<?php
include_once("settings.inc");

/**
* Construir Tabela
*
* @param String $name
* @param String $tblClass
* @param String $tdHeaderClass
* @param String $tdCellClass
* @param String $tdAlternateCellClass
* @return String
*/
function DoGridView($page,$name,$tblClass="",$tdHeaderClass="",$tdCellClass="",$tdAlternateCellClass=""){
$const=get_defined_constants();
if(!$page || $page<0 || !is_numeric($page)) $page=0; else $page--;

$tdAlternateCellClass=($tdAlternateCellClass)?$tdAlternateCellClass:$tdCellClass;

$db=connectDB();
$iSQLFields=GenerateISqlFields();
$beginAt=$page*$const['PER_PAGE'];
$sql=mysql_query("
Select $iSQLFields
From `{$const['TBL_DADOS']}`
Limit $beginAt,{$const['PER_PAGE']}
"); // Alterar aqui
$arrContent=array();
//guardar todo o conteúdo num array
while($myrow=mysql_fetch_assoc($sql)){
array_push($arrContent,$myrow);
}
mysql_close($db);
$count=sizeof($arrContent);

//construir cabeçalho
$arrHeader=$arrContent[0];
$colspan=sizeof($arrHeader)+1;
$i=0;
$headerCell=DoTableCell("td_header_{$name}_0","&nbsp;",$tdHeaderClass);
foreach ($arrHeader as $key=>$value){
$i++;
$headerCell.=DoTableCell("td_header_{$name}_$i",$key,$tdHeaderClass);
}
$rows=$headerCell;
//

for($i=0;$i<$count;$i++){
$auxArr=$arrContent[$i];
$id_cell=0;
$class=($i%2==0)?$tdCellClass:$tdAlternateCellClass;

foreach ($auxArr as $value){
if($id_cell==0){ //1ª iteração, opção para editar
$record_id=$value;
$auxIdRow="{$name}_{$record_id}";
$linkEdit=DoCustomHref("#","GridView.jxEditCell('$record_id','$auxIdRow')","Editar"); //link para editar

$cell=DoTableCell("td_{$name}_{$record_id}_0",$linkEdit,$class); //criar célula para editar
}

//conteúdo das células
$id_cell++;
$content=($value)?$value:"&nbsp;";

$cell.=DoTableCell("td_{$name}_{$record_id}_{$id_cell}",$content,$class); //criar a céluca
//
}

$rows.=DoTableRow("tr_{$name}_$record_id",$cell); //criar a linha
}

$rows.=DoPaginationBar($page,$colspan);

return DoTable($rows,$name,$tblClass); //construir e retornar a gridview
}

/**
* Construir Tabela
*
* @param String $rows
* @param String $id
* @param String $tblClass
* @return String
*/
function DoTable($rows,$id,$tblClass){
if($tblClass) $tblClass="class=\"$tblClass\"";
return "
<table $tblClass name='$id' id='$id'>
$rows
</table>
";
}

/**
* Construir célula
*
* @param String $id
* @param String $content
* @param String $class
* @return String
*/
function DoTableCell($id, $content, $class="",$colspan=""){
if($class) $class=" class=\"$class\" ";
if($colspan) $colspan=" colspan=\"$colspan\" ";
if(!$content) $content="&nbsp;";
return "<td $class name=\"$id\" id=\"$id\" $colspan>$content</td>";
}

/**
* Construir linha
*
* @param String $id
* @param String $td
* @param String $class
* @return String
*/
function DoTableRow($id,$td,$class=""){
if($class) $class=" class=\"$class\" ";
return "<tr $class name=\"$id\" id=\"$id\">$td<tr>";
}

/**
* Construir href
*
* @param String $onclick
* @param String $text
* @param String $class
* @return String
*/
function DoCustomHref($link,$onclick,$text,$tooltip="",$class=""){
if($class) $class=" class=\"$class\" ";
if(!$tooltip) $tooltip=$text;
return "<a href='$link' onclick=\"$onclick\" title=\"$tooltip\" $class>$text</a>";
}

/**
* Obter valores da tabela e devolver no formato JSON
*
* @param int $id
* @return String
*/
function JSONGetRowValues($id){
$iSQLFields=GenerateISqlFields();
$arrFields=__GetArrayFields();
$count=sizeof($arrFields);
$key=key($arrFields);
$const=get_defined_constants();

$db=connectDB();
$sql=mysql_query("
Select $iSQLFields
From `{$const['TBL_DADOS']}`
Where `$key`=\"$id\"
");
$myrow=mysql_fetch_array($sql);

$i=0;
foreach ($arrFields as $key=>$value){
$i++;
$field="field_{$id}_{$i}";
$value=utf8_encode($myrow["$value"]);
$json.="
{
\"field\": \"$field\",
\"value\": \"$value\"
},";
}
$json=left($json,strlen($json)-1);
$json="
({\"informacoes\":
[$json
]
});
";
mysql_close($db);
return $json;

}

/**
* Guardar valores na tabela
*
* @param Array $arrValues
* @return String
*/
function SaveRecord($arrValues){
$arrFields=__GetArrayFields();
$const=get_defined_constants();
$i=0;

foreach ($arrFields as $key=>$value){
if(!$fldPK){
$fldPK="`$key`";
$fldPKValue="\"".mysql_escape_string($arrValues[0])."\"";
}
else{
$str.="`$key`=\"".mysql_escape_string($arrValues[$i])."\",";
}
$i++;
}
$str=left($str,strlen($str)-1);
$iSQL="Update {$const['TBL_DADOS']} set $str where $fldPK=$fldPKValue";

$db=connectDB();
$str=(mysql_query($iSQL))?"success":"error";
mysql_close($db);

return $str;
}

/**
* Ligação à bd
*
* @return
*/
function connectDB(){
$db = mysql_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD);
mysql_select_db(DB_NAME,$db) or die("<b><br/>Impossivel aceder á base de dados.</b><br/>");
return $db;
}

/**
* Gerar parte da instrução sql respeitante
* aos campos
*
* @return String
*/
function GenerateISqlFields(){
$arrFields=__GetArrayFields();
foreach ($arrFields as $key=>$value){
$iSQLFields.="`$key` as `$value`,";
}
return left($iSQLFields,strlen($iSQLFields)-1);
}

function DoPaginationBar($page,$colspan){
$db=connectDB();
$const=get_defined_constants();

$iSQL="Select count(*) From `{$const['TBL_DADOS']}`";
$sql=mysql_query($iSQL);
$myrow=mysql_fetch_array($sql);
$numRegs=$myrow[0];
if ($numRegs>$const['PER_PAGE']){ //caso o número de registos seja > perPage, constrói a barra, c.c., não
$regSplit=$numRegs/$const['PER_PAGE'];
if($numRegs%$const['PER_PAGE']>0) $regSplit++;

$numPagesTotal=intval($regSplit);
$barraPaginacao="<div class='pages'>";

for ($i=1;$i<=$regSplit;$i++){
$title="{$const['LNG_PAGINACAO_PAGINA']} $i {$const['LNG_PAGINACAO_DE']} $numPagesTotal";
if ($i==$page+1){
$title.="&nbsp;{$const['LNG_PAGINACAO_SELECIONADA']}";
$barraPaginacao.=DoCustomHref("#","GridView.jxGotoPage('$i')",$i,$title,"current");
}
else{
$barraPaginacao.=DoCustomHref("#","GridView.jxGotoPage('$i')",$i,$title);
}
}
$barraPaginacao.="</div>";
}
mysql_close($db);
return DoTableRow("",DoTableCell("pagination",$barraPaginacao,"footer",$colspan));
}


function left ($str, $howManyCharsFromLeft){return substr ($str, 0, $howManyCharsFromLeft);}
?>


Eu gostaria de saber como fazer para ir pesquisando de acordo com o que o usuário for digitando, como no Google. Alguém sabe como eu poderia fazer?

Há outros arquivos. Se precisar, posto eles.

Obrigado.


  


2. Re: Pesquisa incremental com PHP e MySQL

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 31/08/2012 - 21:40h

Ainda não precisei fazer isso, mas da pra fazer com JavaScript, veja um plugin que faz isso:

http://jqueryui.com/demos/autocomplete/


3. Re: Pesquisa incremental com PHP e MySQL

André
andrezc

(usa Debian)

Enviado em 01/09/2012 - 18:02h

Obrigado, Raimundo. Vou dar uma olhada.


4. Jquery dataTables

Juliano Giacomeli
julianjedi

(usa Arch Linux)

Enviado em 06/09/2012 - 17:40h

Eu uso o DataTables é facil e indolor =]

http://datatables.net/


5. Re: Pesquisa incremental com PHP e MySQL

André
andrezc

(usa Debian)

Enviado em 07/09/2012 - 17:51h

julianjedi escreveu:

Eu uso o DataTables é facil e indolor =]

http://datatables.net/


Vou ver. Obrigado.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts