Site em PHP

Guimaraez

Banido
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:
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.";
}


}
 
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:
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))

1- Resolvido

2- Resolvido

3- A trabalhar nisso ;)

Voces dominam :) obrigado
 
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
 
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";
 
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:
Back
Topo