| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <!-- |
| Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. |
| --> |
| <html> |
| <head> |
| <title>Criando uma Aplicação Orientada pelo Banco de Dados Com o PHP. Projetar a aplicação PHP. Usando o form de entrada HTML. Implementação PHP da leitura do banco de dados MySQL</title> |
| <meta name="KEYWORDS" content="CRUD, Update, Delete, MySQL, PHP, NetBeans"> |
| <meta name="DESCRIPTION" content="Creating a Database Driven Application With PHP. Design PHP application. HTML input form. PHP implementation of reading from MySQL database" > |
| <link rel="stylesheet" type="text/css" href="../../../netbeans.css"> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <link rel="stylesheet" href="../../../print.css" type="text/css" media="print"> |
| <link rel="stylesheet" type="text/css" href="../../../lytebox.css" media="screen"> |
| <script type="text/javascript" src="../../../images_www/js/lytebox-compressed.js"></script> |
| <script src="../../../images_www/js/listCollapse.js" type="text/javascript"></script> |
| <script type="text/javascript"> |
| |
| function toggle(id) { |
| var e = document.getElementById(id); |
| |
| if (e.style.display == '') |
| e.style.display = 'none'; |
| else |
| e.style.display = ''; |
| } |
| |
| </script></head> |
| <body> |
| <h1>Criando uma Aplicação Orientada pelo Banco de Dados com o PHP </h1> |
| <h1>Lição 2: Projetando a Aplicação. Lendo o Banco de Dados </h1> |
| |
| <div style="margin-left:-3px"> |
| <div class="feedback-box margin-around float-left" style="margin-right:15px"> |
| <h4>Conteúdo do tutorial:</h4> |
| <ol start="0"> |
| <li><a href="wish-list-tutorial-main-page.html">Criando uma Aplicação Orientada pelo Banco de Dados com o PHP - Página Principal</a></li> |
| <li><p>Criando o Banco de Dados</p> <ol type="a"><li><a href="wish-list-lesson1.html">Criando um Banco de Dados MySQL</a></li> |
| <li><a href="wish-list-oracle-lesson1.html">Criando Tabelas do Banco de Dados Oracle</a></li> |
| </ol></li> |
| <li><p><b>=> Projetando a Aplicação. Lendo o Banco de Dados</b></p> |
| <ul><li><a href="#createProject">Criando um Projeto PHP</a></li> |
| <li><a href="#pageFlowDiagram">Definindo um Diagrama de Fluxo de Página</a></li> |
| |
| <li><a href="#transferDataFromIndexToWishlist">Adicionando um Form a um index.php</a> |
| <li><a href="#createNewFile">Criando wishlist.php e Testando a Aplicação</a></li> |
| |
| <li><a href="#receiveAndProcessDaaInWishlist">Estabelecendo uma Conexão e Obtendo o Wisher ID</a></li> |
| |
| <li><a href="#wish-table">Exibindo uma Tabela de Desejos</a></li> |
| <li><a href="#lessonResultSourceCode">Código-fonte da Aplicação Após a Lição Atual Ser Concluída</a></li> |
| </ul> |
| </li> |
| <li><a href="wish-list-lesson3.html">Criando um Novo Usuário da Aplicação</a></li> |
| <li><a href="wish-list-lesson4.html">Otimizando o Código</a></li> |
| <li><a href="wish-list-lesson5.html">Adicionando Segurança. Implementando o Log-in de Usuário da Aplicação</a></li> |
| <li><a href="wish-list-lesson6.html">Adicionando um Novo Desejo ao Banco de Dados</a></li> |
| <li><a href="wish-list-lesson7.html">Atualizando e Deletando Entradas no Banco de Dados</a></li> |
| <li><a href="wish-list-lesson8.html">Melhorando a Aparência da Aplicação Usando a Tecnologia CSS</a></li> |
| <li><a href="wish-list-lesson9.html">Implantando a Aplicação em um Servidor Web Remoto</a></li> |
| </ol> |
| </div> |
| </div> |
| <img alt="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0"> |
| <p>Nesta lição, você cria e configura o projeto PHP para desenvolver sua aplicação, cria uma lista de páginas na aplicação e define as relações entre eles. Também desenvolve a funcionalidade básica da aplicação e a testa contra os dados inseridos no banco de dados de amostra na lição 1. </p> |
| <p>O código PHP escrito nessa lição executa as seguintes funções:</p> |
| <p>1. Obtém o nome de uma pessoa que o usuário digita.</p> |
| <p>2. Verifica se a pessoa realmente está no banco de dados. Fecha com uma mensagem de erro caso a pessoa não esteja no banco de dados.</p> |
| <p>3. Exibe uma tabela dos desejos dessa pessoa.</p> |
| <p>O documento atual é uma parte do tutorial Criando uma Aplicação Orientada pelo Banco de Dados no NetBeans IDE para PHP. </p> |
| |
| <br style="clear:left"> |
| |
| <h2><a name="createProject"></a>Criando um Projeto PHP</h2> |
| <p>Selecione Arquivo > Novo Projeto (Ctrl-Shift-N no Linux e Windows, ⌘-Shift-N no MacOS). Crie um novo projeto PHP chamado “wishlist” (lista de desejos). Quando você cria um projeto PHP, ele contém o arquivo index <tt>index.php</tt> por default. Para obter informações sobre como criar e configurar um projeto PHP, consulte <a href="project-setup.html">Configurando um Projeto PHP</a>. </p> |
| <h2><a name="pageFlowDiagram"></a>Definindo um Diagrama de Fluxo de Página </h2> |
| O escopo da sua aplicação cobre os seguintes casos de uso: |
| <ol> |
| <li>O usuário visualiza a lista de desejos de uma pessoa.</li> |
| <li>O usuário se registra como um novo wisher.</li> |
| <li>O usuário se conecta e cria sua lista de desejos.</li> |
| <li>O usuário se conecta e edita sua lista de desejos. </li> |
| </ol> |
| Para cobrir essa funcionalidade básica, você precisará implementar os seguintes arquivos PHP: |
| <ol> |
| <li>A página "inicial" index.php é usada para fazer log-in, registrar e alternar para as listas de desejos de outros usuários.</li> |
| <li>A página wishlist.php para exibir a lista de desejos de um wisher.</li> |
| <li>A página createNewWisher.php para registro como um wisher. </li> |
| <li>A página editWishList.php para editar uma lista de desejos pelo proprietário.</li> |
| <li>A página editWish.php para criar e editar desejos. </li> |
| </ol> |
| <img alt="O diagrama mostra as alternações planejadas entre as páginas em vários casos de uso" class="margin-around" src="../../../images_www/articles/72/php/oracle-wishlist/page-flow-diagram.png"> |
| |
| <p>Agora que finalizou as etapas preliminares, você pode começar a implementar a funcionalidade básica da sua aplicação. Comece visualizando a lista de desejos de um wisher. Esta funcionalidade não envolve quaisquer validações e pode ser testada facilmente, já que você já indicou os dados de teste no banco de dados. A funcionalidade será implementada em duas páginas, index.php e wishlist.php.</p> |
| |
| <h2><a name="transferDataFromIndexToWishlist"></a>Adicionando um Form a um index.php</h2> |
| <p>O arquivo index.php não conterá códigos PHP, portanto, você poderá remover facilmente o seguinte bloco:</p> |
| <p>O arquivo <tt>index.php</tt> é usado para dois propósitos:</p> |
| <ul> |
| <li>Exibir uma página com controles para indicar dados.</li> |
| <li>Transferir os dados inseridos a outro arquivo PHP, onde os dados serão processados. Neste tutorial, os dados são passados para um arquivo chamado <tt>wishlist.php</tt>, no qual, na próxima seção, você criará e escreverá os códigos.</li> |
| </ul> |
| <p>Essas ações são realizadas por meio de um form HTML. Cada form HTML contém:</p> |
| <ul> |
| <li>Um conjunto de campos que corresponde aos controles na página. </li> |
| <li>A “ação” que é executada depois que o usuário envia os dados do form. A ação é representada pelo caminho à página que processa os dados. </li> |
| </ul> |
| <p><strong>Para adicionar um form ao index.php</strong>:</p> |
| <ol> |
| <li>Alterne para a janela Projetos, expanda o nó do seu projeto e o nó de Arquivos de Código-fonte e clique duas vezes no arquivo <tt>index.php</tt>. O arquivo <tt>index.php</tt> se abre na área do editor principal do IDE. O arquivo contém um modelo para a inserção dos códigos HTML e PHP. |
| <p class="notes"><b>Observação: </b>você pode ignorar as advertências do validador HTML.</p> |
| . </li> |
| <li>Remova o bloco PHP. O arquivo index.php não conterá códigos PHP.<br> <img alt="Um bloco PHP vazio que pode ser removido" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson2/remove-php-block.png"></li> |
| <li>Abra a Paleta no menu Janela ou pressione Ctrl-Shift-8. </li> |
| <li>Na seção <strong>Forms HTML</strong> da Paleta, arraste e solte um Form na seção <body> do <tt>index.php</tt>. <br><img alt="Arrastando e soltando um elemento de form HTML na paleta no corpo de index.php" class="margin-around" height="254" src="../../../images_www/articles/72/php/oracle-wishlist/form-dnd.png" width="566"></li> |
| <li>A Caixa de Diálogo Inserir Form abre. No campo Ação, digite o caminho até o arquivo para o qual o form transferirá dados. Nesse caso, digite <tt>wishlist.php</tt>. (Você criará esse arquivo no mesmo local que o <tt>index.php</tt>. Consulte <a href="#createNewFile">Criando wishlist.php e Testando a Aplicação</a>.) Selecione o método GET para a transferência de dados. Dê um nome arbitrário ao form, como <tt>wishList</tt>. Clique em OK quando acabar.<br> <img alt="Caixa de Diálogo Inserir Form, preenchido" class="margin-around" height="249" src="../../../images_www/articles/72/php/oracle-wishlist/insert-form-dialog.png" width="430"> |
| <p>O arquivo agora tem a seguinte aparência:</p> |
| <img alt="index.php com um form adicionado, nenhum conteúdo no form" class="margin-around" height="271" src="../../../images_www/articles/72/php/oracle-wishlist/blank-form.png" width="480"></li> |
| <li>Entre os identificadores de abertura e fechamento do form, digite o texto “Show wish list of: ”.</li> |
| <li>Arraste um componente de Entrada de Texto da seção <strong>Forms HTML</strong> da Paleta até o espaço após o texto “Show wish list of: ”. A caixa de diálogo Inserir Texto abre. </li> |
| <li>Nomeie a entrada como <tt>user</tt>. Selecione o tipo de entrada <tt>text</tt>. Deixe todos os outros campos vazios e clique em OK.<br> <img alt="Inserir diálogo de Entrada de Texto" class="margin-around" height="291" src="../../../images_www/articles/72/php/oracle-wishlist/insert-text-input.png" width="349"> |
| <p>O arquivo agora tem a seguinte aparência:</p> |
| <img alt="Index.php com form de entrada de texto" class="margin-around" height="248" src="../../../images_www/articles/72/php/oracle-wishlist/form-with-text-input.png" width="600"> </li> |
| <li>Adicione uma linha em branco acima da tag </form>. Nessa linha em branco, arraste e solte um componente Botão da seção <strong>Forms HTML</strong> da Paleta.</li> |
| <li>A caixa de diálogo Inserir Botão abre. Digite <tt>Go</tt> no campo Label e clique em OK.<br> <img alt="Caixa de diálogo Inserir Botão, preenchido" class="margin-around" height="246" src="../../../images_www/articles/72/php/oracle-wishlist/insert-button-dialog.png" width="349"></li> |
| <li>Agora, o form se parece com o código abaixo, com uma única diferença. No código abaixo, o atributo <tt>method</tt> está explícito na tag <form>. O NetBeans IDE não adicionou o atributo method ao seu form, pois o GET é o valor default desse atributo. Entretanto, você pode entender o código com mais facilidade se o atributo <tt>method</tt> estiver explícito. |
| |
| <pre class="examplecode"><form action="wishlist.php" method="GET" name="wishList"><br> Show wish list of: <input type="text" name="user" value=""/><br> <input type="submit" value="Go" /><br></form></pre> |
| </li> |
| </ol> |
| <p>Observe os seguintes elementos do form:</p> |
| <ul> |
| <li>A tag de abertura <form> contém o atributo <tt>action</tt>. O atributo action especifica o arquivo para o qual o form transferirá dados. Nesse caso, o arquivo se chama <tt>wishlist.php</tt> e está na mesma pasta que o <tt>index.php</tt>. (Você criará esse arquivo na seção <a href="#createNewFile">Criando wishlist.php e Testando a Aplicação</a>.)</li> |
| <li>A tag de abertura <form> também contém o método a ser aplicado para a transferência de dados (GET). O PHP usa um array <tt>$_GET</tt> ou <tt>$_POST</tt> para os valores passados pelo form, dependendo do valor do atributo <tt>method</tt>. Nesse caso, o PHP usa <tt>$_GET</tt>.</li> |
| <li>Um componente de entrada de<tt>texto</tt>. Esse componente é um campo de texto usado para inserir o nome do usuário cuja lista de desejos você deseja exibir. O valor inicial do campo de texto é uma sequência de caracteres vazia. O nome desse campo é <tt>user</tt>. O PHP usa o nome do campo ao criar um array para os valores do campo. Nesse caso, o array para os valores desse campo é <tt>htmlentities($_GET["user"])</tt>.</li> |
| <li>Um componente de entrada <tt>submit</tt> com o valor “Ir”. O tipo "submit" significa que o campo de entrada aparece na página como um botão. O valor “Ir” é o label do botão. Quando o usuário clica no botão, os dados no componente <tt>texto</tt> são transferidos para o arquivo especificado no atributo <tt>action</tt>.</li> |
| </ul> |
| <h2><a id="createNewFile" name="createNewFile"></a>Criando wishlist.php e Testando a Aplicação</h2> |
| <p>Em <a href="#transferDataFromIndexToWishlist">Adicionando um Form ao index.php</a>, foi criado um form no qual o usuário envia o nome de alguém cuja lista de desejos o usuário deseja ver. O nome é passado para a página <tt>wishlist.php</tt>. Entretanto, essa página não existe. Se você executar o <tt>index.php</tt>, ocorrerá um erro 404: File Not Found ao enviar um nome. Nesta seção, você criará a página <tt>wishlist.php</tt> e testará a aplicação.</p> |
| <p><strong>Para criar a wishlist.php e testar a aplicação:</strong></p> |
| <ol> |
| <li>Dentro do projeto “lista de desejos” que você criou, clique com o botão direito do mouse no nó dos arquivos de código-fonte e, no menu de contexto, selecione Novo > Página Web PHP. O assistente Nova Página Web de PHP é aberto.</li> |
| <li>Digite <tt>wishlist</tt> no campo Nome do Arquivo e pressione Finalizar.<br> |
| </li> |
| |
| <li>Clique com o botão direito do mouse no nó Código-fonte e selecione Executar Projeto no menu de contexto ou clique no ícone Executar Projeto Principal <img alt="O botão Executar Projeto Principal na barra de ferramentas: uma seta triangular verde" src="../../../images_www/articles/72/php/wish-list-lesson2/run-main-project-button.png">na barra de ferramentas, caso você tenha definido o seu projeto como Principal. <br> <img alt="Página da aplicação principal index.php com uma caixa de edição Mostrar da lista de desejos e um botão Ir" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson2/index-php-works.png"> |
| </li> |
| <li>Na lista de desejos Mostrar : caixa de edição, digite Tom e clique em Ir. Uma página vazia com a seguinte URL aparecerá: http://localhost:90/Lesson2/wishlist.php?user=tom. Esse URL indica que a sua página principal funciona corretamente. </li> |
| </ol> |
| <h2><a name="receiveAndProcessDaaInWishlist"></a>Estabelecendo a Conexão e Obtendo o Wisher ID</h2> |
| <p>Nesta seção, você primeiro adiciona o código ao arquivo <tt>wishlist.php</tt> que cria uma conexão ao banco de dados. Em seguida, adiciona o código para recuperar o número do wisher ID cujo nome foi digitado no form <tt>index.php</tt>.</p> |
| <ol> |
| <li>Clique duas vezes no arquivo wishlist.php. O modelo que se abre é diferente do index.php. Comece e termine o arquivo com as tags <html></html> e <body></body>, já que o arquivo também conterá um código HTML. |
| <pre class="examplecode"><!DOCTYPE html><br><html><br> <head><br> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><br> <title></title><br> </head><br> <body><br> <?php<br> // put your code here<br> ?><br> </body><br></html></pre> |
| </li> |
| <li>Para exibir o título, digite o seguinte bloco de código imediatamente depois da tag de abertura <body>, antes da tag <?php gerada: |
| <pre class="examplecode"> Wish List of <?php echo htmlentities($_GET["user"])."<br/>";?></pre> |
| <p>O código agora tem a seguinte aparência:</p> |
| <pre class="examplecode"> |
| <body>Wish List of <?php echo htmlentities($_GET["user"])."<br/>";?><br> <?php<br> |
| // put your code here<br> |
| </body> |
| </pre> |
| |
| <p>O bloco de código PHP exibe os dados recebidos usando o método GET no campo "user". Esses dados são transferidos do <tt>index.php</tt> onde o nome do proprietário da lista de desejos Tom foi inserido no campo de texto "user". Repita as etapas de <a href="#createNewFile">Testando index.php</a> para ver se o wishlist.php funciona corretamente. <br> <img alt="A página wishlist.php mostra o texto Lista de Desejos de Tom" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson2/wishlist-php-title-works.png"> </li> |
| <li><p><a name="connect-db"></a>Delete a seção comentada no bloco PHP do modelo. Em seu lugar, digite ou cole no código a seguir. Esse código abre a conexão ao banco de dados. </p> |
| |
| <p><b>Para o banco de dados MySQL:</b></p> |
| <pre class="examplecode">$con = mysqli_connect("localhost", "phpuser", "phpuserpw");<br>if (!$con) {<br> exit('Connect Error (' . mysqli_connect_errno() . ') '<br> . mysqli_connect_error());<br>}<br>//set the default client character set <br>mysqli_set_charset($con, 'utf-8');</pre> |
| |
| <p><b>Para o banco de dados Oracle:</b></p> |
| <pre class="examplecode">$con = oci_connect("phpuser", "phpuserpw", "localhost/XE", "AL32UTF8"); |
| if (!$con) { |
| $m = oci_error(); |
| exit('Connect Error ' . $m['message']); |
| }</pre> |
| <p>O código tenta abrir uma conexão ao banco de dados e gera uma mensagem de erro, caso haja uma falha.</p> |
| <p class="notes"><b>Observação para os usuários do banco de dados Oracle:</b> Pode ser preciso alterar a conexão ao banco de dados no comando <tt>oci_connect</tt>. A sintaxe padrão é “nome do host/nome do serviço". A conexão ao banco de dados Oracle XE nesse snippet de código é “localhost/XE” para seguir essa sintaxe. </p> |
| <p class="notes"><b>Observação:</b> É possível usar a funcionalidade autocompletar código do NetBeans IDE para as funções mysqli ou OCI8.</p> |
| <img alt="Funcionalidade autocompletar código para chamadas do MySQL" class="margin-around" height="107" src="../../../images_www/articles/72/php/oracle-wishlist/codecompletion.png" width="342"><img alt="Funcionalidade autocompletar código para chamadas do OCI8" class="margin-around" src="../../../images_www/articles/72/php/oracle-wishlist/codecompletion-oci.png"></li> |
| <li><p>Abaixo do código para abrir a conexão ao banco de dados, no mesmo bloco PHP, digite ou cole o código a seguir. Esse código recupera o wisher ID cuja lista tenha sido solicitada. Se o wisher não estiver no banco de dados, o código terminará o processo, ou sairá dele, e exibirá uma mensagem de erro.</p> |
| <p><b>Para o banco de dados MySQL:</b></p> |
| <pre class="examplecode">mysqli_select_db($con, "wishlist");<br> |
| $user = mysqli_real_escape_string($con, htmlentities($_GET["user"]));<br> |
| $wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='" . $user . "'");<br> |
| if (mysqli_num_rows($wisher) < 1) { |
| exit("The person " . htmlentities($_GET["user"]) . " is not found. Please check the spelling and try again"); |
| }<br>$row = mysqli_fetch_row($wisher);<br>$wisherID = $row[0];<br>mysqli_free_result($wisher);</pre> |
| <p><b>Para o banco de dados Oracle:</b> (Observe que o oci8 não tem um equivalente para <tt>mysqli_num_rows</tt>)</p> |
| <pre class="examplecode">$query = "SELECT id FROM wishers WHERE NAME = :user_bv"; |
| $stid = oci_parse($con, $query); |
| $user = $_GET['user']; |
| |
| oci_bind_by_name($stid, ':user_bv', $user); |
| oci_execute($stid); |
| |
| //Because user is a unique value I only expect one row |
| $row = oci_fetch_array($stid, OCI_ASSOC); |
| if (!$row) { |
| exit("The person " . $user . " is not found. Please check the spelling and try again" ); |
| } |
| $wisherID = $row['ID']; |
| oci_free_statement($stid);</pre> |
| <p>Os dados são selecionados no banco de dados <tt>wishlist</tt> usando a conexão $con. O critério de seleção é o nome recebido do index.php como "user".</p> |
| <p>A sintaxe de uma instrução SQL <tt>SELECT</tt> pode ser descrita brevemente da seguinte forma:</p> |
| <ul> |
| <li>Depois de SELECT, especifique os campos dos quais você deseja obter os dados. Um asterisco (*) representa todos os campos.</li> |
| <li>Depois da cláusula FROM, especifique o nome da tabela da qual os dados devem ser recuperados. </li> |
| <li>A cláusula WHERE é opcional. Especifique as condições do filtro nela.</li> |
| </ul> |
| <p>A consulta mysqli retorna um objeto de resultado. O OCI8 retorna uma instrução executada. Em ambos os casos, você extrai uma linha como o resultado da consulta executada e extrai o valor da linha ID, armazendo-o na variável <tt>$wisherID</tt>.</p> |
| <p> Por último, você libera o resultado da mysqli ou a instrução do OCI8. É necessário liberar todos os recursos que usam uma conexão antes que a conexão seja fisicamente fechada. Do contrário, o sistema interno de refcounting do PHP continuará mantendo a conexão do banco de dados subjacente aberta, mesmo se o <tt>$con</tt> não for mais utilizável seguindo a chamada <tt>mysqli_close()</tt> ou <tt>oci_close()</tt>. </p> |
| <p class="notes"><b>Observação de segurança:</b> Para MySQL, o parâmetro <tt>htmlentities($_GET["user"])</tt> tem escape para evitar os ataques de injeção SQL. Consulte <a href="http://en.wikipedia.org/wiki/SQL_injection" target="_blank">Wikipedia sobre injeções SQL</a> e a <a href="http://us3.php.net/mysql_real_escape_string" target="_blank"></a>documentação mysql_real_escape_string. Embora no contexto deste tutorial você não esteja correndo o risco de injeções SQL prejudiciais, recomendamos escapar as strings nas consultas MySQL que estariam correndo risco de tal ataque. O OCI8 evita isso por meio de variáveis de bind.</p> |
| </li></ol> |
| |
| <p>Este bloco PHP agora está concluído. Se você estiver usando um banco de dados MySQL, o arquivo <tt>wishlist.php</tt> se parecerá com o seguinte:</p> |
| <pre class="examplecode">Wish List of <?php echo htmlentities($_GET["user"]) . "<br/>"; ?><br> |
| <?php<br> |
| $con = mysqli_connect("localhost", "phpuser", "phpuserpw"); |
| if (!$con) { |
| exit('Connect Error (' . mysqli_connect_errno() . ') ' |
| . mysqli_connect_error()); |
| }<br> |
| //set the default client character set |
| mysqli_set_charset($con, 'utf-8'); |
| mysqli_select_db($con, "wishlist"); |
| $user = mysqli_real_escape_string($con, htmlentities($_GET["user"])); |
| $wisher = mysqli_query($con, "SELECT id FROM wishers WHERE name='" . $user . "'"); |
| if (mysqli_num_rows($wisher) < 1) { |
| exit("The person " . htmlentities($_GET["user"]) . " is not found. Please check the spelling and try again"); |
| } |
| $row = mysqli_fetch_row($wisher); |
| $wisherID = $row[0]; |
| mysqli_free_result($wisher); |
| ?></pre> |
| <p>Se você estiver usando um banco de dados Oracle, o arquivo <tt>wishlist.php</tt> se parecerá com o seguinte:</p> |
| |
| <pre class="examplecode">Wish List of <?php echo htmlentities($_GET["user"]) . "<br/>"; ?> |
| <?php |
| $con = oci_connect("phpuser", "phpuserpw", "localhost/XE", "AL32UTF8"); |
| if (!$con) { |
| $m = oci_error(); |
| exit('Connect Error ' . $m['message']; |
| exit; |
| } |
| $query = "SELECT id FROM wishers WHERE name = :user_bv"; |
| $stid = oci_parse($con, $query); |
| $user = htmlentities($_GET["user"]); |
| oci_bind_by_name($stid, ':user_bv', $user); |
| oci_execute($stid);<br> |
| //Because user is a unique value I only expect one row |
| $row = oci_fetch_array($stid, OCI_ASSOC); |
| if (!$row) { |
| exit("The person " . $user . " is not found. Please check the spelling and try again" ); |
| } |
| $wisherID = $row["ID"]; |
| oci_free_statement($stid); |
| ?></pre> |
| |
| |
| |
| <p>Se você testar a aplicação e inserir um usuário inválido, a mensagem seguinte aparecerá.</p> |
| <img alt="A página wishlist.php mostra uma mensagem de erro: o usuário não foi encontrado" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson2/wishlist-php-title-user-not-found-works.png"> |
| <h2><a name="wish-table"></a>Exibindo uma Tabela de Desejos</h2> |
| <p>Nessa seção, você pode adicionar o código que exibe uma tabela HTML dos desejos associados ao wisher. O wisher é identificado pelo ID recuperada no código da seção anterior.</p> |
| <ol> |
| <li>Abaixo do bloco PHP, digite ou cole o seguinte bloco de código HTML. Esse código abre uma tabela, especifica a cor de suas bordas (preto), e "desenha" o cabeçalho da tabela com as colunas "Item" e "Data de vencimento." |
| <pre class="examplecode"><table border="black"> |
| <tr> |
| <th>Item</th> |
| <th>Due Date</th> |
| </tr> |
| </table></pre> |
| A tag </table> fecha a tabela. </li> |
| <li> |
| <p>Insira o seguinte bloco de código PHP acima da tag de fechamento </table>.</p> |
| <p><b>Para o banco de dados MySQL:</b></p> |
| <pre class="examplecode"><?php<br>$result = mysqli_query($con, "SELECT description, due_date FROM wishes WHERE wisher_id=" . $wisherID);<br>while ($row = mysqli_fetch_array($result)) {<br> echo "<tr><td>" . htmlentities($row["description"]) . "</td>";<br> echo "<td>" . htmlentities($row["due_date"]) . "</td></tr>\n";<br>}<br>mysqli_free_result($result);<br>mysqli_close($con);<br>?></pre> |
| <p><b>Para o banco de dados Oracle:</b></p> |
| <pre class="examplecode"><?php<br>$query = "SELECT description, due_date FROM wishes WHERE wisher_id = :id_bv";<br>$stid = oci_parse($con, $query);<br>oci_bind_by_name($stid, ":id_bv", $wisherID);<br>oci_execute($stid);<br>while ($row = oci_fetch_array($stid)) {<br> echo "<tr><td>" . htmlentities($row["DESCRIPTION"]) . "</td>";<br> echo "<td>" . htmlentities($row["DUE_DATE"]) . "</td></tr>\n";<br>}<br>oci_free_statement($stid);<br>oci_close($con);<br>?></pre> |
| <p>Dentro do código:</p> |
| <ul> |
| <li>A consulta SELECT recupera os desejos com suas datas de vencimento para o whisher especificado por seu ID, que foi recuperada na etapa 4, e armazena os desejos e as datas de vencimento em um array $result.</li> |
| <li>Um loop exibe os itens do array $result como linhas na tabela enquanto o array não está vazio. </li> |
| <li>As linhas do form das tags <tr></tr>, as células do form das tags <td></td> nas linhas, e \n inicia uma nova linha.</li> |
| <li>A função <tt>htmlentities</tt> converte todos os caracteres que tenham a entidade HTML equivalentes às entradas HTML. Isso ajuda a prevenir <a href="http://en.wikipedia.org/wiki/Cross-site_scripting" target="_blank">scripts de site cruzados</a>.</li> |
| <li>As funções, no final, liberam todos os recursos (resultados do mysqli e instruções do OCI8) e fecha a conexão ao banco de dados. Observe que é necessário liberar os recursos que usam uma conexão antes que a conexão possa ser fisicamente fechada. Do contrário, o sistema interno de refcounting do PHP manterá a conexão do banco de dados subjacente aberta, mesmo se a conexão não for mais utilizável seguindo a chamada <tt>oci_close()</tt> ou <tt>mysqli_close()</tt>. </li> |
| </ul> |
| <p class="alert"><strong>Cuidado: </strong>Certifique-se de digitar os nomes dos campos de banco de dados exatamente como eles foram especificados durante a criação da tabela do banco de dados. Para Oracle, os nomes das colunas são retornados com letras maiúsculas por default.</p> |
| </li> |
| <li>Para testar a aplicação, execute o projeto como descrito na seção <a href="#createNewFile">Testando index.php</a>.<br> <img alt="A página Wishlist.php mostra uma lista de desejos Tom" class="margin-around" src="../../../images_www/articles/72/php/wish-list-lesson2/wishlist-php-works.png"> </li> |
| </ol> |
| |
| <h2><a name="lessonResultSourceCode"></a>O código-fonte da Aplicação após a Lição Atual está Concluído </h2> |
| <p>Usuários MySQL: clique <a href="https://netbeans.org/files/documents/4/1928/lesson2.zip" target="_blank">aqui</a> para fazer o download do código-fonte que reflete o estado do projeto depois que a lição estiver concluída.</p> |
| <p>Usuários de banco de dados Oracle: clique <a href="https://netbeans.org/projects/www/downloads/download/php%252Foracle-lesson2.zip" target="_blank">aqui</a> para fazer o download do código-fonte que reflete o estado do projeto depois que a lição estiver concluída.</p> |
| <h2><a name="nextSteps"></a>Próxima Etapa</h2> |
| <p><a href="wish-list-lesson1.html"><< Lição anterior</a></p> |
| <p><a href="wish-list-lesson3.html">Próxima lição >></a></p> |
| <p><a href="wish-list-tutorial-main-page.html">Voltar à Página Principal do Tutorial</a> |
| </p> |
| <h2><a name="learnMoreUsefulLinks"></a>Links Úteis </h2> |
| <p>Encontre mais informações sobre o uso de HTML, PHP e MySQL ou Oracle Database aqui:</p> |
| <ul> |
| <li><a href="http://www.w3schools.com/html/" target="_blank">Tutorial de HTML </a></li> |
| <li><a href="http://www.htmlcodetutorial.com/" target="_blank">Tutorial do Código HTML - Guia de Referência Grátis para obter Ajuda Com Tags HTML</a></li> |
| <li><a href="http://www.w3schools.com/php/default.asp" target="_blank">Tutorial de PHP</a></li> |
| <li><a href="http://www.tizag.com/phpT/" target="_blank">Tutorial de PHP - Aprenda PHP</a></li> |
| <li><a href="http://www.killerphp.com/" target="_blank">Tutoriais de Vídeo de PHP</a> </li> |
| <li><a href="http://dev.mysql.com/tech-resources/articles/mysql_intro.html" target="_blank">Iniciando o MySQL</a> </li> |
| <li><a href="http://www.killerphp.com/" target="_blank">Tutorial de PHP / MySQL</a> </li> |
| <li><a href="http://www.php-mysql-tutorial.com/" target="_blank">Tutorial de PHP MySQL</a></li> |
| <li><a href="http://php.net/manual/en/book.oci8.php" target="_blank">O Manual do OCI8 da Oracle</a></li> |
| <li><a href="http://blogs.oracle.com/opal/" target="_blank">Blog OCI8 do Christopher Jones</a></li> |
| </ul> |
| <br> |
| <div class="feedback-box" ><a href="/about/contact_form.html?to=3&subject=Feedback:%20PHP%20Wish%20List%20CRUD%202:%20Designing%20the%20Application">Enviar Feedback neste Tutorial</a></div> |
| <br style="clear:both;"> |
| <p>Para enviar comentários e sugestões, obter suporte e manter-se informado sobre os desenvolvimentos mais recentes das funcionalidades de desenvolvimento PHP do NetBeans IDE, <a href="../../../community/lists/top.html">junte-se à lista de correspondência users@php.netbeans.org</a>.</p> |
| <p><a href="../../trails/php.html">Voltar à Trilha de Aprendizado PHP</a><br> |
| </p> |
| </body> |
| </html> |