1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Site em PHP

Discussão em 'Web Development' iniciada por Guimaraez, 9 de Junho de 2008. (Respostas: 9; Visualizações: 1165)

  1. Guimaraez

    Guimaraez Power Member

    Boa noite,
    Estou a desenvolver um website em php relativo a um videoclube e tenho varios problemas.

    1- Já realizei uma consulta à base de dados (access plo ODBC) para que me listasse todos os filmes de um ano, ano este, introduzido pelo utilizador.

    Código:
    <?php
    $ano = $_POST['ano'];
    $con = odbc_connect("access","","") or die("Erro na conexão com a base de dados");
    $sql = odbc_exec($con,"SELECT * FROM tb_filmes WHERE ano='$ano'");
    $i=0;
    if (empty($ano)){
    // HTML que aparecera o ERRO
    echo "<font color='#FFFFFF'>";
    echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
    echo "<br><br><br>";
    echo "<center>É Necessario o preenchimento do campo <b>Ano ou o filme nao exsite</b></center>";
    echo "</body></html>";
    }
     else {
    while (odbc_fetch_row($sql)){
        $i++;
        echo "<font color='#2F4F4F'>Nome: </font>";
        echo odbc_result($sql,"nome"); 
        echo "<br>";
        echo "<font color='#2F4F4F'>Ano: </font>";
        echo odbc_result($sql,"ano");
        echo "<br>";
        echo "<font color='#2F4F4F'>Genero: </font>";
        echo odbc_result($sql,"genero");
        echo "<br>";
        echo "<font color='#2F4F4F'>Realizador: </font>";
        echo odbc_result($sql,"realizador");
          echo "<br>";
        echo "<font color='#2F4F4F'>Disponivel: </font>";
        echo odbc_result($sql,"disponibilidade");
        echo "<br>";
        echo "<br>";
        echo "<br>";
        echo "<br>";
        }
        }
    ?>
    
    Ele lista-me tudo direito.
    O problema é o seguinte:
    Se o utilizador digitar um ano, em que nao existam filmes na base de dados referentes a esse ano, o ecra aparece vazio. O que eu pretendo é que em vez de esse vazio apareça: "Nao existem filmes referentes a esse ano".

    2- Fiz um formulario para inscriçao de novos socios. Funciona, ele regista na base de dados. Mas sempre que a chave primaria (neste caso, o numero do bi) se repete ele dá erro. Como é que faço para que ele alerte o utilizador quando este digita um numero de BI ja existente na BD??
    o código que tenho é o seguinte:
    Código:
    <?php
    $nome = $_POST['nome'];
    $bi= $_POST['bi'];
    $idade = $_POST['idade'];
    $telefone = $_POST['telefone'];
    if (empty($nome)){
    // HTML que aparecera o ERRO
    echo "<font color='#FFFFFF'>";
    echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
    echo "<br><br><br>";
    echo "<center>É Necessario o Preenchimento do campo <b>Nome</b></center>";
    echo "</body></html>";
    }
    if (empty($bi)){
    // HTML que aparecera o ERRO
    echo "<font color='#FFFFFF'>";
    echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
    echo "<br><br><br>";
    echo "<center>É Necessario o Preenchimento do campo <b>BI</b></center>";
    echo "</body></html>";
    if ('$bi' == 'bi'){
    echo "<br><br><br>";
    echo "<center><font color='#FFFFFF'> Nao existem filmes referentes ao ano escolhido. </center></font>";}
    }
    if (empty($idade)){
    // HTML que aparecera o ERRO
    echo "<font color='#FFFFFF'>";
    echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
    echo "<br><br><br>";
    echo "<center>É Necessario o Preenchimento do campo<b> Idade</b></center>";
    echo "</body></html>";
    }
    if (empty($telefone)){
    // HTML que aparecera o ERRO
    echo "<font color='#FFFFFF'>";
    echo "<html><head><title>Ocorreu Um ERRO !!!</title></head>";
    echo "<br><br><br>";
    echo "<center>É Necessario o Preenchimento do campo<b> Telefone</b></center>";
    echo "</body></html>";
    }
    else{
    echo "'$nome','$bi','$idade','$telefone'";
    $con = odbc_connect("access","","") or die("Erro na conexão com o Database");
    $sql = odbc_exec($con,"INSERT INTO tb_socios (nome,bi,idade,telefone) VALUES('$nome','$bi','$idade','$telefone')");
    echo "<font color='#2F4F4F'>Obrigado. A sua inscrição foi registada com sucesso. Desloque-se ao seu clube de video nas proximas 24 horas para confirmar o registo. Caso contrario o seu registo ficara sem efeito </font>";
    }
    ?>
    
    3- A listagem dos filmes, com ou sem consulta, aparece-me numa so coluna, ou seja o site fica estica na vertical, como faço para o por de forma paginada?

    CUMPS
    Ajudem sf
     
    Última edição pelo moderador: 12 de Junho de 2008
  2. mascker

    mascker Power Member

    Boas.

    1. Usa odbc_num_rows para saber quantos resultados tiveste.
    PHP:
    if(odbc_num_rows($sql)==0)
    {
    echo 
    "Não existem resultados";
    }
    2. Antes de inserires na base de dados fazes uma pesquisa pelo bi. Se o numero de linhas for 0, ainda não existe

    3. Dá uma vista de olhos aqui

    http://php.about.com/od/phpwithmysql/ss/php_pagination.htm

    A única coisa que pode mudar é a query

    Saudações
     
  3. Serrot

    Serrot Power Member

    1 - Podes tentar usar odbc_num_rows num else if antes de :

    Código:
    else {
    while (odbc_fetch_row($sql)){
    .
    .
    

    algo assim

    Código:
    
    } else if (odbc_num_rows($sql)<1) {
    
        echo "Nao existem filmes referentes ao ano escolhido.";
    
    } else {
    
        while (odbc_fetch_row($sql)){
        ...
    
    

    Ao que sei muitas vezes esta função ( odbc_num_rows) não dá grandes resultados, se for o caso podes tentar usar um contador do numero de filmes:

    Código:
    else {
    $nrFilmes=0;
    
        while (odbc_fetch_row($sql)){
     
            $nrFilmes++;
    
            ...
    
    
        }
    
    if ($nrFilmes==0) {
        echo "Nao existem filmes referentes ao ano escolhido.";
    }
    
    
    }
    
    
     
  4. Guimaraez

    Guimaraez Power Member

    Obrigado a todos :) vou tentar e digo ja o resultado
     
  5. Guimaraez

    Guimaraez Power Member

    1 - Resolvido

    2 - Ja percebi a ideia, mas ainda nao conseguir concretizar

    3- E quase missao impossivel pra mim lol, nao pesquei nada.

    Obrigado
     
  6. Serrot

    Serrot Power Member

    2-

    Substitui as linhas:


    $sql = odbc_exec($con,"INSERT INTO tb_socios (nome,bi,idade,telefone)
    echo "<font color='#2F4F4F'>Obrigado. A sua inscrição foi registada com sucesso. Desloque-se ao seu clube de video nas proximas 24 horas para confirmar o registo. Caso contrario o seu registo ficara sem efeito </font>";

    por algo deste género

    Código:
    $rsUser= odbc_exec($con,"SELECT nome FROM tb_socios WHERE bi='$bi' ");
    
    if (odbc_fetch_row($rsUser) ) {
    
        echo "Já existe um user com o mesmo bi";
    } esle {
    
        $sql = odbc_exec($con,"INSERT INTO tb_socios (nome,bi,idade,telefone) VALUES('$nome','$bi','$idade','$telefone')");
    
        if ( !odbc_error()) {
    
            echo "<font color='#2F4F4F'>Obrigado. A sua inscrição foi registada com sucesso. Desloque-se ao seu clube de video nas proximas 24 horas para confirmar o registo. Caso contrario o seu registo ficara sem efeito </font>";
        } else {
    
            echo "Ocorreu um erro ao inserir os seus dados na base de dados";
        }
    
    }
    
    Não sei se com o Access tb se põe o problema de sql injection mas tenta usar algo
    semelhante a:

    if (empty($ano) || ! is_numeric($ano) ){

    e

    if (empty($bi) || ! is_numeric($bi )) {

    em vez de apenas


    if (empty($ano) )

    e

    if (empty($bi))
     
    Última edição: 10 de Junho de 2008
  7. Guimaraez

    Guimaraez Power Member

    1- Resolvido

    2- Resolvido

    3- A trabalhar nisso ;)

    Voces dominam :) obrigado
     
  8. Guimaraez

    Guimaraez Power Member

    Estou ainda a pensar em colocar um motor de buscar, por nome de filme. Ja tenho "um", baseado numa consulta a base de dados no campo "nome", mas o mal é que, para obter resultados o utilizador tem que introduzir o nome do filme da mesma maneira que esta escrito na BD.

    Outra coisa será isto:
    Criar um campo novo na tabela filmes ao qual corresponderia um link. Mas o sql nao aceita campos hyperlink..

    E ainda se tiver tempo queria um sistema em que alertasse o administrador sempre que se inscreve-se um novo socio

    cumps
     
  9. metralha761

    metralha761 1st Folding then Sex

    Nada melhor q ir ao site oficial do PHP e pesquisar.

    http://pt2.php.net/manual/en/function.odbc-fetch-row.php
    "After odbc_fetch_row() is called, the fields of that row can be accessed with odbc_result()."

    Tb toma atenção ao return:
    "Return Values Returns TRUE if there was a row, FALSE otherwise."


    Neste caso podias começar por
    if (odbc_fetch_row($sql)) //date a garantia q se encontrou pelo menos 1
    ##print os resultados como queres
    while (odbc_fetch_row($sql)) //continua a procura de mais resultados
    ##print os resultados como queres
    else //nao houve nada
    print "Sem resultados";
     
  10. Guimaraez

    Guimaraez Power Member

    boas, qeria fazer o seguinte:

    -Verificador de disponibilidade, consiste em:
    utilizador digita o codigo do filme (exemplo 54) e o resultado seria do tipo,

    Cod filme
    Nome do filme
    Disponível/ não disponível
    E se "nao disponivel" aparecer a data de quando estaria disponivel.
    (existira um campo na base de dados chamado datadisponibilidade)

    Eu ja tenho algum codigo para isso.
    O que me esta a falhar é se no caso de nao estar disponivel ele apresentar a data em que ficara disponivel.

    cumps
     
    Última edição: 14 de Junho de 2008

Partilhar esta Página