A tarefa do lado do servidor geralmente é realizar operações lógicas de acordo com a solicitação do cliente e retornar a resposta do resultado. Essa resposta geralmente está no formato XML (portanto, o lado do servidor precisa usar o DOM do PHP para criar uma resposta XML)
1. O PHP usa o DOM para criar uma resposta XML, que é analisada pelo JS do cliente e então exibida na página (então; você precisa ser proficiente na API DOM do PHP)
Na verdade, existem duas maneiras de gerar XML em PHP:
Usar API DOM (Método 1)
A outra é ecoar diretamente o conteúdo XML (Método 2);
Veja exemplo:
Página HTML (contém três funções de gatilho JS: onmouseover, onmouseout, onclick; aciona suas próprias funções respectivamente)
<!doctype html public "-//w3c//dtd html 4.0 tRANSITIONAL//en">
<html>
<cabeça>
<title> Servidor PHP Ajax </title>
<script type="text/javascript" src="js.js"></script>
</head>
<corpo>
<span onmouseover="PHPechoXML()" onmouseout="PHPDOMXML()">Palavras padrão</span>
<div id="mostrar"></div>
dividir<input type="text" id="firstNumber"/>por
<input type="text" id="segundoNumber"/>
<input type="button" value="Enviar" onclick="CSparameter()"/>
<div id="resultado"></div>
</body>
</html>
Página JS (defina três funções de gatilho JS respectivamente: PHPechoXML, PHPDOMXML e CSparameter)
Existem funções de criação de objetos XMLHttpRequest e respectivas funções de processamento de respostas do servidor.
///////1.Criar objeto XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
função createXmlHttpRequestObject();
...{
var
xmlHttp;
...{
//tenta criar o objeto XMLHttpRequest
xmlHttp = novo XMLHttpRequest();
}
pegar (e)
...{
// assume IE6 ou mais antigo
var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP');
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
tentar
...{
//tenta criar o objeto XMLHttpRequest
xmlHttp = novo ActiveXObject(XmlHttpVersions[i]);
}
pegar (e)...{}
}
}
se (!xmlHttp)
alert("Erro ao criar o objeto XMLHttpRequest.");
outro
retornar xmlHttp;
}
///////2. Função de resposta de evento JavaScript (gatilho onmouseover)
//lê um arquivo do servidor
função PHPichoXML()
...{
// só continua se xmlHttp não for nulo
if(xmlHTTP)
...{
//tenta se conectar ao servidor
tentar
...{
//inicia a leitura de um arquivo do servidor
//Envia uma solicitação assíncrona para o arquivo PHPechoXML.php no lado do servidor
xmlHttp.open("GET", "PHPechoXML.php", verdadeiro);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send(nulo);
}
//exibe o erro em caso de falha
pegar (e)
...{
alert("Não é possível conectar ao servidor: " + e.toString());
}
}
}
///////3. Função de resposta de evento JavaScript (gatilho onmouseout)
funçãoPHPDOMXML()
...{
// só continua se xmlHttp não for nulo
if(xmlHTTP)
...{
//tenta se conectar ao servidor
tentar
...{
//inicia a leitura de um arquivo do servidor
//Envia uma solicitação assíncrona para o arquivo PHPDOMXML.php no lado do servidor
xmlHttp.open("GET", "PHPDOMXML.php", verdadeiro);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send(nulo);
}
//exibe o erro em caso de falha
pegar (e)
...{
alert("Não é possível conectar ao servidor: " + e.toString());
}
}
}
// trata a resposta recebida do servidor, função de retorno de chamada de status do lado do servidor
função handleRequestStateChange()
...{
se (xmlHttp.readyState == 4)
...{
// continua somente se o status HTTP for "OK"
se (xmlHttp.status == 200)
...{
tentar
...{
// lê a mensagem do servidor
var xmlResponse = xmlHttp.responseXML;
//Captura possíveis erros no IE e Opera
if(!xmlResponse||!xmlResponse.documentElement)
...{
throw("Estrutura XML inválida: "+xmlHttp.responseText);
}
//Captura possíveis erros no FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
if(rootNodeName=="parsererror")
...{
throw("Estrutura XML inválida: "+xmlHttp.responseText);
}
//Obtém a resposta XML do servidor, analisa-a e exibe-a na página web
//obtém o elemento do documento XML
xmlRoot = xmlResponse.documentElement;
//obtém arrays com títulos de livros e ISBNs
cityArray=xmlRoot.getElementsByTagName("cidade");
//gera saída HTML
varhtml = "";
// itera pelos arrays e cria uma estrutura HTML
for (var i=0; i<cityArray.length; i++)
html += cityArray.item(i).firstChild.data + "<br/>";
//obtém uma referência ao elemento <div> na página
minhaDiv = document.getElementById("mostrar");
//exibe a saída HTML
myDiv.innerHTML = "Servidor diz: <br />" + html;
}
pegar (e)
...{
//exibe mensagem de erro
alert("Erro ao ler a resposta: " + e.toString());
}
}
outro
...{
//exibe mensagem de status
alert("Ocorreu um problema ao recuperar os dados: " +
xmlHttp.statusText);
}
}
}
///////4. Função de resposta de evento JavaScript (gatilho onclick)
função CSparâmetro()
...{
// só continua se xmlHttp não for nulo
if(xmlHTTP)
...{
//tenta se conectar ao servidor
tentar
...{
//Obtém o valor no formulário
var primeiroNumber=document.getElementById("primeiroNumber").value;
var secondNumber=document.getElementById("secondNumber").value
//Definido como parâmetro para fazer uma solicitação assíncrona para CSparameter.php no lado do servidor
var param="firstNumber="+firstNumber+"&secondNumber="+secondNumber;
// inicia a leitura de um arquivo do servidor
;
xmlHttp.open("GET", "CSparameter.php?"+param, verdadeiro);
xmlHttp.onreadystatechange = handleRequestStateChangePara;
xmlHttp.send(nulo);
}
//exibe o erro em caso de falha
pegar (e)
...{
alert("Não é possível conectar ao servidor: " + e.toString());
}
}
}
//Função de retorno de chamada de mudança de status do servidor (o servidor aceita os parâmetros do cliente e retorna uma resposta XML após cálculo lógico. O cliente analisa o XML e retorna as atualizações para a página)
// trata a resposta recebida do servidor
função handleRequestStateChangePara()
...{
se (xmlHttp.readyState == 4)
...{
// continua somente se o status HTTP for "OK"
se (xmlHttp.status == 200)
...{
tentar
...{
// lê a mensagem do servidor
var xmlResponse = xmlHttp.responseXML;
//Captura possíveis erros no IE e Opera
if(!xmlResponse||!xmlResponse.documentElement)
...{
throw("Estrutura XML inválida: "+xmlHttp.responseText);
}
//Captura possíveis erros no FireFox
var rootNodeName=xmlResponse.documentElement.nodeName;
if(rootNodeName=="parsererror")
...{
throw("Estrutura XML inválida: "+xmlHttp.responseText);
}
//obtém o elemento do documento XML
xmlRoot = xmlResponse.documentElement;
cityArray=xmlRoot.getElementsByTagName("resultado");
//gera saída HTML
varhtml = "";
// itera pelos arrays e cria uma estrutura HTML
for (var i=0; i<cityArray.length; i++)
html += cityArray.item(i).firstChild.data + "<br/>";
//obtém uma referência ao elemento <div> na página
minhaDiv = document.getElementById("resultado");
//exibe a saída HTML
myDiv.innerHTML = "Servidor diz: <br />" + html;
}
pegar (e)
...{
//exibe mensagem de erro
alert("Erro ao ler a resposta: " + e.toString());
}
}
outro
...{
//exibe mensagem de status
alert("Ocorreu um problema ao recuperar os dados: " +
xmlHttp.statusText);
}
}
}
Script PHP do lado do servidor (responsável por aceitar solicitações assíncronas do Cliente, respondê-las e devolvê-las ao Cliente em formato XML)
PHEchoXML.php (o primeiro método para PHP gerar resposta XML, echo gera conteúdo XML)
<?php
//O primeiro método para o PHP do lado do servidor gerar arquivos XML é ecoar o XML diretamente.
header('Tipo de conteúdo: texto/xml');
//gera cabeçalho XML
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
;
$cityArray=array('Paris','Londres','NovaIorque','Pequim','Tokoy');
foreach ($cityArray como $cidade)
{
echo '<cidade>'.$cidade.'</cidade>';
}
echo '</cities>'
?>
PHPDOMXML.php (O segundo método para o PHP gerar uma resposta XML, usando a API DOM do PHP para gerar uma resposta no formato XML)
<?php
header('Tipo de conteúdo: texto/xml');
$cityArray=array('Xangai','Pequim','Shanxi','Shandong');
//Cria um documento XML
$dom=new DOMDocument();
//Tag mais externa
$cidadesTag=$dom->createElement('cidades');
$dom->appendChild($cidadesTag);
//A tag interna pode ser gerada através de loop
foreach ($cityArray como $cidade)
{
$cityTag=$dom->createElement('cidade');
$cidadeNome=$dom->createTextNode($cidade);
$cityTag->appendChild($cityName);
$cidadesTag->appendChild($cidadeTag);
}
//Salva a estrutura XML como uma string e gera-a
$xmlString=$dom->saveXML();
echo $xmlString;
?>
2. Transferência de parâmetros entre o lado do cliente e o lado do servidor:
Pode haver um formulário na página da web do lado do cliente, para que os parâmetros possam ser passados para o <método GET ou POST, variável ou XML> do lado do servidor, e o lado do servidor gere uma resposta XML que atenda aos requisitos com base em os parâmetros passados (interação implementada dos parâmetros do lado do cliente e do lado do servidor)
Veja exemplo:
Como em 1, o script do lado PHP para passagem de parâmetros é o seguinte CSparameter.php (aceita os parâmetros da solicitação assíncrona do cliente, executa o processamento lógico e gera uma resposta XML para enviar de volta ao cliente) <?php
//Personalize a função de tratamento de erros no lado do servidor
require_once('error_handler.php');
header('Content-Type: text/xml');
//Aceita parâmetros da solicitação assíncrona do cliente
$primeiroNúmero=$_GET['primeiroNúmero'];
$secondNumber=$_GET['secondNumber'];
//Executa cálculos lógicos
$result=$firstNumber/$secondNumber;
//Gera uma resposta em formato XML e retorna ao Cliente
$dom=new DOMDocument();
$resultadosTag=$dom->createElement('resultados');
$dom->appendChild($resultadosTag);
$resultTag=$dom->createElement('resultado');
$resultText=$dom->createTextNode($resultado);
$resultTag->appendChild($resultText);
$resultadosTag->appendChild($resultTagTag);
$xmlString=$dom->saveXML();
echo $xmlString
?>
3. Tratamento de exceções de erro no lado do PHP (os erros ou exceções mencionados aqui referem-se a erros lógicos):
a) Por padrão, o PHP não lançará uma exceção quando ocorrer um erro ou exceção (isso ocorre porque o display_errors padrão no php.ini está desativado e o erro será salvo no registro de log de erros do Apache), então é escrito Difícil de depurar. <Muitas vezes é difícil localizar erros exibidos pelo navegador>
b) Mas se display_errors estiver ativado, o erro será exibido, mas a mensagem de erro será hostil.
http://www.downcodes.com/
c) Você pode escrever sua própria função de tratamento de exceção de erro PHP (display_errors não precisa necessariamente estar ativado) para exibir erros de uma maneira óbvia para facilitar a depuração;
Normalmente você escreve sua própria função de tratamento de exceções da seguinte maneira:
Exibe a função de lançamento de exceção de erro do lado do servidor definida error_handler.php (pode ser facilmente reutilizada em programas PHP)
<?php
//definir uma função de tratamento de erros definida pelo usuário método de tratamento de exceções de erros definido pelo usuário
set_error_handler('error_handler', E_ALL);
função error_handler($errNo,$errStr,$errFile,$errLine)
{
//Se o buffer de saída não estiver vazio, esvazie-o
if(ob_get_length()) ob_clean();
//Definir saída personalizada
$error_message='ERRNO: '.$errNo.chr(10).'TEXTO: '.$errStr.chr(10).'LOCATION: '.$errFile.', Linha'.$errLine;
echo $ mensagem_erro;
saída;
}
?>
4. Acesso ao banco de dados do lado do servidor <Use MySQL para acessar dados e obter dinâmica verdadeira>
Isso já é muito clássico, você pode usar MySQL, MSSQL, Oracle, etc.
a) Abra o banco de dados; b) Instrução SQL Consulta c) Feche o banco de dados
5. Encapsulamento e arquitetura do programa PHP do lado do servidor (o programa PHP do lado do servidor introduz o modo de design)
a) appname.php <Aceitar solicitação do cliente>
b) appname.class.php <Encapsula lógica do lado do servidor, operações de banco de dados, tratamento de erros, etc. em classes, incluindo atributos, métodos, construtores e destruidores>
c)config.php
d) error_handler.php
é um exemplo de introdução de padrões de design no lado do servidor: (Projete a arquitetura do programa de scripts PHP do lado do servidor para aumentar a escalabilidade e a reutilização)
Um programa de sugestão de palavras-chave muito simples: (incluindo index.html, css/style.css, js.js e código PHP php/suggest.php, Suggest.class.php, error_handler.php, config.php suporta banco de dados)
index.html(css/style.css, js.js; observe que dois eventos de cliente JS acionam onkeyup, onclick)
onkeyup envia uma solicitação ao servidor de forma assíncrona em tempo real quando o usuário insere, e o servidor responde. onclick envia uma solicitação ao servidor quando o usuário clica em pesquisar;
<!doctype html public "-//w3c//dtd html 4.0 tRANSITIONAL//en">
<html>
<cabeça>
<title> Design Pattern PHP AJAX (palavras-chave sugerem DEMO) </title>
<link type="text/css" rel="stylesheet" href="css/style.css"/>
<script type="text/javascript" src="js.js"></script>
</head>
<corpo>
<noscript>
<strong>Este exemplo requer um navegador habilitado para JavaScript!</strong>
</noscript>
<div class="projeto">
<span class="title">Bem-vindo ao Design Pattern PHP AJAX (palavras-chave sugerem DEMO) </span>
<br />
<br />
<div class="notícias">
<br /><input type="text" id="keyword" onkeyup="keyup()" /><input type="button" id="search" onclick="search()" value="search"> <br /><br />
sugerir palavras-chave:
<div id="mostrar"></div>
</div>
</div>
</body>
</html>
css/estilo.css
corpo
{...}{
família de fontes: Arial;
tamanho da fonte: pequeno;
cor de fundo: #fff;
}
.título
{...}{
tamanho da fonte: x-grande;
}
div.projeto
{...}{
cor de fundo: #99ccff;
preenchimento: 5px;
borda:#000099 1px sólido;
}
div.notícias
{...}{
cor de fundo:#fffbb8;
preenchimento: 2px;
borda: 1px tracejada;
}
#mostrar
{...}{
cor: #008000;
estilo da fonte: itálico;
}js.js (definir função de resposta em JS e função de retorno de chamada para o Cliente processar a resposta do Servidor)
/////////////////////////////////////////////// /// /////////
//1.Criar objeto XMLHttpRequest
/////////////////////////////////////////////// /// /////////
var xmlHttp = createXmlHttpRequestObject();
função createXmlHttpRequestObject()
...{
var xmlHttp;
tentar
...{
//tenta criar o objeto XMLHttpRequest
xmlHttp = novo XMLHttpRequest();
}
pegar (e)
...{
// assume IE6 ou mais antigo
var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP');
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
...{
tentar
...{
//tenta criar o objeto XMLHttpRequest
xmlHttp = novo ActiveXObject(XmlHttpVersions[i]);
}
pegar (e)...{}
}
}
se (!xmlHttp)
alert("Erro ao criar o objeto XMLHttpRequest.");
outro
retornar xmlHttp;
}
//Exibe a resposta correta do servidor para a div com o id de show
exibição de função (mensagem)
...{
showDIV=document.getElementById("mostrar");
showDIV.innerHTML=mensagem;
}
//Exibe a mensagem de erro da resposta do lado do servidor para a div com o id de show
função displayError(mensagem de erro)
...{
//Mostra mensagem de erro
display("Erro ao recuperar a nova mensagem!<br/>"+errormessage);
}
///////////////////////////////////////////// /// //////////
//2.função orientada a eventos (função keyup)
/////////////////////////////////////////////// /// /////////
var keyupAddress="php/suggest.php?action=keyup&keyword=";
tecla de função()
...{
if(xmlHTTP)
...{
//Envia uma solicitação assíncrona quando o servidor não está ocupado
if(xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
tentar
...{
var palavra-chave=document.getElementById("palavra-chave").valor;
//Faça uma solicitação assíncrona
xmlHttp.open("GET",keyupAddress+palavra-chave,true);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.send(nulo);
}
pegar (e)
...{
displayError(e.toString);
}
}
}
}
/////////////////////////////////////////////// /// /////////
//3. Função de retorno de chamada, esta função é acionada quando o status da resposta do servidor muda.
/////////////////////////////////////////////// /// /////////
função handlereadystatechange()
...{
if(xmlHttp.readyState==4)
...{
se(xmlHttp.status==200)
...{
tentar
...{
//Obter resposta do servidor
var xmlResponse = xmlHttp.responseXML;
SuggestArray=xmlResponse.getElementsByTagName("sugerir");
var showText="";
for(var i=0;i<suggestArray.length;i++)
...{
var textNodes=suggestArray[i].getElementsByTagName("texto");
var timesNodes=suggestArray[i].getElementsByTagName("vezes");
for(var j=0;j<textNodes.length;j++)
...{
showText+=textNodes[j].childNodes[0].nodeValue+" ("+timesNodes[j].childNodes[0].nodeValue+") <br />";
}
}
//Mostra a resposta da página
display(mostrarTexto);
}
pegar (e)
...{
displayError(e.toString());
}
}
}
}
/////////////////////////////////////////////// /// /////////
//2. função orientada a eventos (função de pesquisa)
/////////////////////////////////////////////// /// /////////
var searchAddress="php/suggest.php?action=search&keyword=";
pesquisa de função()
...{
if(xmlHTTP)
...{
//Envia uma solicitação assíncrona quando o servidor não está ocupado
if(xmlHttp.readyState==0||xmlHttp.readyState==4)
...{
tentar
...{
var palavra-chave=document.getElementById("palavra-chave").valor;
//Faça uma solicitação assíncrona
xmlHttp.open("GET",searchAddress+palavra-chave,true);
xmlHttp.onreadystatechange=handlereadystatechange;
xmlHttp.send(nulo);
}
pegar (e)
...{
displayError(e.toString);
}
}
}
}
Nota final: A estrutura do programa do script PHP do lado do servidor (suggest.php é a principal função de processamento no lado do servidor, e também há Suggest.class.php, error_handler.php, config.php, etc.)
Suggest.php (pegue os parâmetros do cliente e chame os dois métodos da classe Suggest para gerar uma resposta em formato XML e enviá-la de volta ao cliente)
<?php
require_once('suggest.class.php');
header('Tipo de conteúdo: texto/xml');
//Certifique-se de que o navegador do usuário não armazenará os resultados em cache
header('Expira: Quarta, 23 de dezembro de 1980 00:30:00 GMT');
header('Última modificação: '.gmdate('D, d MYH:i:s').' GMT' );
header('Cache-Control: sem cache, deve-revalidar');
header('Pragma: sem cache');
$action=$_GET['action'];
$keyword=$_GET['palavra-chave'];
$oSuggest=nova sugestão();
if($action=='keyup'&&$palavra-chave!='')
{
$suggestXML=$oSuggest->getSuggests($keyword);
}
if($action=='pesquisar'&&$palavra-chave!='')
{
$suggestXML=$oSuggest->submitKeyword($keyword);
}
echo $suggestXML;
?> sugerir classe.class.php
<?php
require_once('error_handler.php');
require_once('config.php');
sugestão de aula
{
//Variáveis de membro
private $conn;
//Construtor, link do banco de dados
função__construir()
{
$this->conn=new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if (mysqli_connect_errno()) {
printf("Falha na conexão: %s ", mysqli_connect_error());
saída();
}
}
//Destruidor, desconecte o link do banco de dados
função __destruir()
{
$this->conn->close();
}
//função membro getSuggests (esta função responde principalmente a action=keyup do lado do cliente, ou seja, uma solicitação assíncrona quando o usuário está digitando)
função pública getSuggests($palavra-chave)
{
//Gerar sugestão (gerar palavras-chave no banco de dados que sejam iguais à primeira metade da palavra-chave inserida)
$suggest_query='selecione * de palavras-chave onde palavras-chave como ''.$keyword.'%' ordenam por vezes limite desc 5';
$suggest_result=$this->conn->query($suggest_query);
$suggest_num=$suggest_result->num_rows;
$strOUT='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
if($suggest_num==0)
{
//$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>0</times></suggest></suggests>';
}
outro
{
$strOUT=$strOUT."<sugestões>";
for($i=0;$i<$suggest_num;$i++)
{
$suggest_row = $suggest_result->fetch_row();
$strOUT=$strOUT.'<suggest><text>'.$suggest_row[1].'</text><times>'.$suggest_row[2].'</times></suggest>';
}
$strOUT=$strOUT.'</suggests>';
}
retornar $strOUT;
}
//função membro submitKeyword (esta função responde principalmente a action=search do lado do cliente, ou seja, a solicitação assíncrona quando o usuário clica em pesquisar)
função pública submitKeyword($palavra-chave)
{
$select_query='selecione * de palavras-chave onde palavra-chave=''.$keyword.''';
$select_result=$this->conn->query($select_query);
$select_num=$select_result->num_rows;
//Adicione novas palavras-chave ao banco de dados ao encontrá-las e aumente o número de palavras-chave existentes ao encontrá-las.
$strOUT='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
//Já existe, aumente o número de vezes
if($select_num!=0)
{
$select_row = $select_result->fetch_row();
$times_now=$select_row[2];
$vezes_agora=$vezes_agora+1;
$update_query='atualizar palavras-chave definir horários ='.$times_now.' onde palavra-chave=''.$keyword.''';
$update_result=$this->conn->query($update_query);
$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>'.$times_now.'</times></suggest></suggests>';
}
outro
{
//Sem inserção salva
$insert_query='inserir em keywords(keyword, times) valores(''.$keyword.'',1)';
$insert_result=$this->conn->query($insert_query);
$strOUT=$strOUT.'<suggests><suggest><text>'.$keyword.'</text><times>1</times></suggest></suggests>';
}
retornar $strOUT;
}
}
?>
As duas últimas funções, config.php, salvam informações de configuração do aplicativo (como informações de configuração do banco de dados)
<?php
define('DB_HOST', 'localhost');
define('DB_USER','phpajaxuser');
define('DB_PASSWORD','phpajaxuser');
define('DB_DATABASE','phpajax');
?>
error_handler.php salva o tratamento de exceções personalizado
<?php
//Definir função de tratamento de erros definida pelo usuário
set_error_handler('error_handler', E_ALL);
função error_handler($errNo,$errStr,$errFile,$errLine)
{
if(ob_get_length()) ob_clean();
$error_message='ERRNO: '.$errNo.chr(10).'TEXT: '.$errStr.chr(10).'LOCATION: '.$errFile.' '.$errLinha;
echo $ mensagem_erro;
saída;
}
?>Finalmente, instruções SQL são necessárias para adicionar o banco de dados para salvar palavras-chave no banco de dados.
CRIAR TABELA `palavras-chave` (
`id` int (10) não assinado NOT NULL auto_increment,
`palavra-chave` varchar(32) NOT NULL padrão '',
`times` int (10) não assinado NOT NULL padrão '0',
CHAVE PRIMÁRIA (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;
Pouco conhecimento sobre PHP para pesquisas futuras:
Como o PHP lê dados de um servidor remoto (algo semelhante ao Web Crawl):
arquivo_get_contents;
Ou CURL<Biblioteca de URLs do Cliente>www.php.net/curl