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

Ajuda com PHP - Estou disponivel para pagar se for necessario!

Discussão em 'Programação' iniciada por KAMPUZ, 7 de Setembro de 2005. (Respostas: 17; Visualizações: 1130)

  1. KAMPUZ

    KAMPUZ Power Member

    Boas amigos,

    Estou a tentar desenvolver um site mas tenho muitos poucos conhecimentos de PHP. Para o fazer utilizei o dreamweaver e tenho tudo pronto excepto uma coisa que ao principio parecia simples (e é, eu é que nao tou dentro do assunto) mas já perdi demasiado tempo e estou disposto, se for o caso, a pagar para me ajudarem nesta questão.

    O problema surge nos links da página thumbnails para a pagina details, não consigo escrever um código que os direccione directamente para lá. Tudo o resto funciona, excepto isto.

    Deixo aqui os links para as páginas de teste que criei
    Thumbnails
    Details

    Links para os códigos
    Código de details
    Código de thumbnails

    Tabela do mysql

    Código:
    DROP TABLE IF EXISTS tbl_modelos_mod;
    CREATE TABLE tbl_modelos_mod (
      id_mod smallint(6) NOT NULL auto_increment,
      titulo_mod text NOT NULL,
      descricao_mod text NOT NULL,
      gpac_mod text NOT NULL,
      altura_mod int(11) NOT NULL default '0',
      largura_mod int(11) NOT NULL default '0',
      profundidade_mod int(11) NOT NULL default '0',
      assento_mod int(11) NOT NULL default '0',
      peso_mod decimal(2,1) NOT NULL default '0.0',
      imagempequena_mod text NOT NULL,
      imagemgrande_mod text NOT NULL,
      restaurantes_mod text,
      cafes_mod text NOT NULL,
      hoteis_mod text NOT NULL,
      3idade_mod text NOT NULL,
      gamaeconomica_mod text NOT NULL,
      gamamedia_mod text NOT NULL,
      gamaalta_mod text NOT NULL,
      oportunidades_mod text NOT NULL,
      exclusivo_mod text NOT NULL,
      mostrar_mod text NOT NULL,
      PRIMARY KEY  (id_mod)
    ) TYPE=MyISAM;
    Como disse acima, o problema é na link do thumbnails para o details. Estou disposto a pagar a quem me ajudar a resolver este problema. Contactem-me por aqui, por PM ou para o email kampuz at sapo ponto pt

    Thanks
     
  2. Lancaster

    Lancaster To fold or to FOLD?

    Heyas all...

    Porque é que não experimentas fazer uma coisa deste género, quando estás na página thumbnails, escreves no link da imagem algo como:

    Antes de executares este código tens que criar um script que te construa um link em cada imagem..o que é fácil...

    Código:
    <a href="details.php?cod_cadeira=1" ><img src="xpto"></a>
    
    e depois na página details, fazes:

    Código:
    if ( $_GET['cod_cadeiras'] )
    select details from tabela cadeiras where cod_cadeiras = $_GET['cod_cadeiras'];
    e depois escreves os detail's de cada cadeira...
    
    Penso que seja o mais fácil a fazer...e isso fica a bombar...

    E sim é à borlix...mas check PM na mesma..:P

    Hasta all [[]]
     
  3. Mitnick

    Mitnick Power Member

    Pois... eu recentemente desenvolvi algo semelhante e ficou a funciuonar como o Lancaster disse
     
  4. KAMPUZ

    KAMPUZ Power Member

    Antes de mais, obrigado pela prontidão na ajuda.

    No meu post anterior esqueci-me de dizer uma coisa muito importante, sou um completo zero à esquerda no que diz respeito a php... :001:

    Deixa-me ver se percebi o que querias dizer:

    thumbnails
    Editar o link e mete-lo no formato.
    Código:
    details.php?cod_cadeira=1
    mas assim num fica um link estático uma vez que vai aparecer a mesmo link em cada foto que eu clicar? devo acrescentar algo ao link?

    details
    Só para nao haver dúvidas, não é preciso acrescentar nada na base de dados certo?
    Não quero abusar da tua boa vontade mas não te importas de explicar melhor como é que escrevo esse código.

    Obrigado e prometo ter a PM em consideração.
     
  5. Lancaster

    Lancaster To fold or to FOLD?

    Heyas all..

    Não fica estático, o que é que acontece..a ver se eu me consigo explicar:
    O que tu vais ter é uma galeria com thumbnails certo? Uma página onde tens 10, 20, 30 fotografias certo? Todas lado a lado etc..etc.. é isto?

    O que tu fazes é, quando estás a criar a página com os thumbnail's vais à tabela onde tens os dados das cadeiras, e vais buscar o ID e o campo que necessitas para a fotografia..

    Fazes um for, e ele vai-te preenchendo os links com o cod_cadeira=1,2,3,4,5 e por aí adiante..

    Depois quando carregares no thumbnail, ele vai-te passar o cod_cadeira por GET e na página details basta ires à procura dos vários detalhes da cadeira com cod_cadeira XPTO...

    Em príncipio não..

    Não abusas nada...estás à vontade...se ainda não percebes-te...posta outra vez..que trata-se disso..

    Hasta all [[]]
     
  6. BraBo

    BraBo Banido

    Acho que a unica coisa que tu necessitas é mesmo o id do objecto. Max Rows, Start Rows, Top Rows, etc etc, não são necessários nem aconcelhados andarem pela query string (morada) ... Dessa forma qualquer utilizador pode "mixkrar" com as configurações de exibição da página.
    Nos thumbnails manda uma variavel contendo o ID da cadeira (exactamente como já fizeste), e no outro lado apanhas o ID da cadeira e vais buscar os dados ($id_mod = $GET_['id_mod']).
    Depois só tens de ligar à base de dados e pedir a cadeira ...
    $query = "SELECT * FROM tabelaCadeiras WHERE id_cadeira='" . $id_mod . "' LIMIT 1";
    $result = mysql_query($query, $link_da_ligacao_a_base_de_dados);
    $rows = mysql_num_rows($result);
    if ($rows > 0) {
    $dados_1 = mysql_result($result, 0, "dados_1");
    $dados_2 = mysql_result($result, 0, "dados_2");
    $dados_3 = mysql_result($result, 0, "dados_3");
    }
    mysql_close();
     
    Última edição: 8 de Setembro de 2005
  7. KAMPUZ

    KAMPUZ Power Member

    Desculpem lá de novo mas acho que assim não vou lá.
    Vou explicar aqui as alterações que tentei a ver se tou a fazer bem

    thumbnails.php

    alterei
    Código:
    <a href="details.php?id_mod=<?php echo $row_Recordset1['id_mod']; ?>"><img src=...
    por
    Código:
    <a href="details.php?cod_cadeira=1"><img src=...
    details.php

    Código:
    mysql_select_db($database_bd_ducampus, $bd_ducampus);
    $query = "SELECT * FROM tbl_modelos_mod WHERE cod_cadeira='" . $id_mod . "' LIMIT 1";
    $result = mysql_query($query, $bd_ducampus);
    $rows = mysql_num_rows($result);
    if ($rows > 0) {
    $dados_1 = mysql_result($result, 0, "dados_1");
    $dados_2 = mysql_result($result, 0, "dados_2");
    $dados_3 = mysql_result($result, 0, "dados_3");
    }
    mysql_close();
    não sei se preenchi correctamente o quadro e fiquei sem saber o que devo escrever nas linhas $dados_1=...
    também fiquei com outra duvida, a ideia é criar outro "recordset" na mesma página ou adicionar estes comandos ao existente?

    Muito obrigado novamente e desculpem a minha falta de conhecimentos nesta area....
     
  8. BraBo

    BraBo Banido


    Ok, aqui vai ...
    Na página de thumbnails tu tens cada imagem a apontar para uma morada do género
    Código:
    www.qualquercoisa.TopLevelDomain/details.php?id_mod=um_numero_qualquer
    , certo??? Nesta página deixas estar como está porque é mesmo isto que é necessário ser feito.

    Na página details ...
    // Crias uma ligação à base de dados:
    $servidor = "nome do servidor";
    $db_user = "nome do utilizador";
    #db_pass = "password do utilizador";
    $link = mysql_connect($servidor, $db_user, $db_pass);

    // Seleccionas a base de dados:
    $base_dados = "nome da base de dados";
    mysql_select_db($base_dados, $link);

    // Recebes da query string o ID da cadeira a exibir:
    $id_mod = $_GET['id_mod']; // O que vem no URL ...

    // Fazes o query à base de dados:
    $query = "SELECT * FROM tbl_modelos_mod WHERE cod_cadeira='" . $id_mod . "' LIMIT 1";
    $resultado = mysql_query($query, $link);
    $linhas_do_resultado = mysql_num_rows($resultado);

    if ($linhas_do_resultado > 0) {
    // O resultado tem mais de '0' (zero) linhas, como especificaste um limite de 1 linha
    // e se ele tem mais de '0', então tem exactamente 1ª linha.

    // Retiras os dados necessários do RecorSet (resultado).
    // Usas um indice '0' (segundo parametro do método "mysql_result",
    // porque as listagens começam sempre por '0'. O '0' é a linha no RecordSet.
    $img_url = mysql_result($resultado, 0, "img_url");
    $img_nome = mysql_result($resultado, 0, "img_nome");

    // Exibes a imagem como quiseres
    echo("<img src='" . $img_url . "' alt='" . $img_nome . "'>");

    // O "img_url" e "img_nome" é alterado para o nome dos campos na base de dados
    // que tu queres.
    } else {
    // O resultado do query retornou-te '0' (zero) linhas (não é maior que '0', ou seja,
    // o resultado está vazio.
    // É aconcelhavel exibir uma mensagem de erro e/ou redireccionar o utilizador
    // para a página de thumbnails novamente.
    }

    // Fechas a ligação à base de dados para não ocupares rescursos desnecessários ...
    mysql_close();

    Espero que te tenha ajudado... Como vês não usei arrays e afins para manipular o RecordSet, apenas porque acho que fica mais limpo usar estas funções do PHP.
     
  9. KAMPUZ

    KAMPUZ Power Member

    Boas,

    Devo dizer que a tua explicação foi muito boa. Só ao ler aquilo já deu para aprender muita coisa apesar de eu ainda não ter conseguido fazer o que pretendia. Mas pelo menos acho que agora estou mesmo muito perto.

    Daquilo que escreveste fiquei com uma dúvida neste ponto:

    Código:
    $query = "SELECT * FROM tbl_modelos_mod WHERE cod_cadeira='" . $id_mod . "' LIMIT 1";
    onde tem cod_cadeira deverá estar o nome da coluna onde ele deve procurar o resultado, certo?

    Aquilo que eu acho que está a falhar é o seguinte:
    [​IMG]

    O link deveria associar o campo id_mod ao "record" e não a uma coluna da tabela. Pelo que percebi o codigo que tu me deste apenas serve para associar a colunas da tabela e não ao "record" como tem na imagem.

    Eu ao seguir por exemplo o link details.php?id_mod=23 ele deveria levar-me para o "record" 9

    Não vos censuro se me mandarem dar uma volta ao bilhar grande :lol:
     
  10. BraBo

    BraBo Banido

    $query = "SELECT * FROM tbl_modelos_mod WHERE id_mod='" . $id_mod . "' LIMIT 1";

    Não sabia o nome dos campos na tabela ...
    Normalmente os ID's nas tabelas servem para identificar registos nessas mesmas tabelas, por isso até custumas ser unicos (não replicaveis). Tu ao teres "Record" e "id_mod" estás a usar dois campos exactamente para a mesma coisa, ou seja, identificar um registo especifico numa determinada tabela.
    Ou usas :
    $query = "SELECT * FROM tbl_modelos_mod WHERE id_mod='" . $id_mod . "' LIMIT 1";
    ou :
    $query = "SELECT * FROM tbl_modelos_mod WHERE Record='" . $id_mod . "' LIMIT 1";
    sendo a variavel $id_mod o numero de identificação.
     
    Última edição: 8 de Setembro de 2005
  11. KAMPUZ

    KAMPUZ Power Member

    Acho que me faltou dizer algo de importante.

    O campo que referi "record" não é um campo da tabela. Este campo resulta de um filtro anteriormente aplicado à tabela e os valores inscritos na tabela que inseri aqui com o nome "record" são portanto o numero de ordem, que vão ser utilizados na barra de navegações criada pelo dreamweaver.

    O link deveria então associar o id_mod ao record (que é o numero de ordem após a aplicação de um filtro na tabela).

    Sendo assim, aquilo que me disseste continua válido?
     
  12. BraBo

    BraBo Banido

    ?????????????????????????????????????????????????????????????????????? É de onde então?!?!

    ???????
     
  13. Lancaster

    Lancaster To fold or to FOLD?

    Heyas all...

    Eu acho que já percebi o que é que o Kampus fez:

    O que ele fez foi, fez um select à base de dados onde vieram todos os dados que ele tinha nessa tabela, e meteu esses dados num recordset, e esta história do record, é o indice deste recordset.

    Para fazeres essa associação, tens que ir ao recordset procurar qual é o indice que tem lá dentro o id_mod=23...ou seja quando a página está a carregar, uma das primeiras coisas que terá que ir fazer, é ir ver a que record o id_mod corresponde.

    Espero que tenhas percebido..

    Hasta all [[]]
     
  14. BraBo

    BraBo Banido

    Pelo que eu percebi, foi que ele queria ter uma página com uma listagem (seja do que for, neste caso cadeiras) em que quando se carregava num determinado objecto, o utilizador era redireccionado para uma página contendo os detalhes do objecto carregado.

    Visto tudo isto, acho que apenas precisa de saber um detalhe qualquer que identifique o objecto e só mesmo esse objecto, ou seja, um ID. Não é necessário um campo RECORD o qual será usado para recolher seja o que for. Se ele tiver 1000 registos de cadeiras na base de dados, ele tem de fazer um query que carrega um recordset com 1000 registos, e depois usar um loop que pode ter até 1000 ciclos até encontrar o id_mod que pretende ...

    Muito má política. Se por segundo houverem 100 pedidos de detalhes de cadeiras no servidor, então são retornados e processados 100.000 registos de cadeiras. Se multiplicarmos isto pelo numero de sites que o servidor de alojamento pago poderá ter na mesma máquina ... Muito mal.

    Alguém uma vez disse neste mesmo forum: "60% do bom desempenho e programação de uma aplicação está do lado da base de dados (caso acente numa), ou seja, dos queries feitos e da estrutura da mesma. Só os outros 40% são relativos a manipulação visual e de informação da aplicação".

    Se o campo record apenas serve para mostrar a ordem num determinado menu, então só deve ser referenciado nesse mesmo menu . Se o id_mod é o que identifica o produto, então é isso que é preciso passar no URL e chamar na base de dados, o campo "record" não serve para nada, pois apenas serve para ordenar produtos.

    P: Como é que se ordena uma listagem com um elemento???
    R: Não ordena ...
     
  15. KAMPUZ

    KAMPUZ Power Member

    Obrigado a todos pelas explicações.
    Já consigo com que o link vá directo dos thumbnails vá directo à página dos details :009:

    Agora só me falta resolver um pequeno pormenor que passo a descrever:

    Quando faço a ligação dos thumbnails para a pagina dos details, a barra de navegação deste deixa de funcionar. Isto acontece porque ele vai acrescentar ao link o endereço actual, e passo a explicar com um exemplo:

    Ao clicar num link dos thumbnails vou para uma página do tipo: .../details.php?id_mod=11
    Se depois clicar numa das barras de navegação ele vai para um endereço do tipo:
    .../details.php?pageNum_Recordset1=1&totalRows_Recordset1=16&id_mod=11
    O link só funciona se remover o que está a bold que é precisamente o que ele vai buscar ao endereço da página. Há algo no código que está a criar isto e o código é: (exemplo para o botão next)

    Código:
    <a href="<?php printf("%s?pageNum_Recordset1=%d%s", $currentPage, $totalPages_Recordset1, $queryString_Recordset1); ?>">Last</a>
    Há alguma maneira de fazer com que esta ultima parte deixe de aparecer?
     
  16. BraBo

    BraBo Banido

    Afinal quem é que criou o código??? Foste tu que o escreveste???

    Duas perguntas :
    -> Tu queres que o utilizador possa alterar o numero de artigos expostos na listagem?!?!?! É que se passares isso por URL, ele vai poder alterar, podendo por apenas 5 ou até todos (o que altera o layout todo da página e te ocupa recursos desnecessários).
    -> Para que queres tu saber o numero de artigos expostos por listagem na página de detalhes de apenas um produto????!!!! Não faz sentido nenhum. Ou listas os produtos, ou exibes os detalhes de um deles. Levares as variáveis para a página de detalhes não te serve de nada. Se o proposito é voltares atrás e levares as variaveis de volta, usas o history(); do browser.

    Outras duas perguntas (já vão em 4) :
    -> Porque ainda usas tu o campo RECORD da tabela na página de detalhes?!??!?! Afinal o que identifica o produto não é o campo "id_mod"?!?!?!?! Se não é o "id_mod", para que raio existe ele??!?!
    -> Porque não usas funções mais simples para manipulares os resultados do MySql?!?!?! As linguagens evoluem, são criadas novas funcionalidades numa plataforma para que um programador possa tirar partido delas e preocupar-se mais com o produto que vai desenvolver sem complicar o código(a não ser que tenha mesmo de ser complicado). Usas o "mysql_connect();", o "mysql_select_db();", "mysql_query();", o "mysql_num_rows();", o "mysql_result();" e o "mysql_close();" ... Assim por alto, não estou a ver mais nada que precises para o que queres fazer.
     
  17. KAMPUZ

    KAMPUZ Power Member

    Boas,

    Respondendo às tuas perguntas:

    O código foi inteiramente criado pelo dreamweaver, daí ele ter originado este bug que eu não consigo resolver. Como te disse anteriormente, os meus conhecimentos de php são quase nulos!

    1 - Aquilo que o utilizador pode mudar no url é apenas qual o numero de ordem que vai ser originado pelo link, penso que não dá para mudar o numero de cadeiras a mostrar em cada página, ou dá?

    2 - totalRows_Recordset1=16 -> Isto serve para a barra de navegações saber qual o ultimo registo. Assim esse link leva automaticamente para o ultimo artigo dessa categoria.

    3 - O campo Record que resulta de um query serve tambem para a barra de navegações. Assim quando a barra de navegações é activada, ele sabe que tem de ir para o proximo registo do campo record e não para o proximo registo do id_mod uma vez que alguns destes registos tao filtrados.

    4 - Simplesmente porque a única maneira que eu tinha de criar um site (que eu pensava que ia ser em curto tempo) era usando o dreamweaver. Tenho noção que posso estar a dar uma volta muito maior mas pelo caminho mais curto eu nao tenho conhecimentos sufucientes.

    Mais uma vez, agradeço muito a tua colaboração e a dos outros.
     
  18. BraBo

    BraBo Banido

    Quanto ao DreamWeaver não te posso ajudar. Já o instalei duas ou três vezes (junto com o Flash) mas nunca o cheguei a usar. Para Php sempre usei o bloco de notas do windows, embora andem por aí editores porreiros (segundo "ouço" dizer).

    Não sei se tens prazos para acabar isso, mas um site com painel de administração feito do zero demora sempre o seu tempo a ser feito.

    Abraço e desculpa lá não te poder ajudar mais.
     

Partilhar esta Página