• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Umbus

Duvidas (muitas XD)

61 mensagens neste tópico

Boas eu tenho algumas duvidas e perguntas a fazer se nao me levarem a mal:

Duvida 1 Boas, primeira questao e o seguinte, eu tenho este codigo numa pagina (index.php):

           <select name="genero" size="5" multiple="multiple" id="genero">         <?
                    $totalcatfilmes = mysql_query("SELECT * FROM categoriasfilmes ORDER BY catfilme ASC;", $ligar);

                    while ($registos = mysql_fetch_array($totalcatfilmes)) {
	$idcatfilme = $registos["id"];
	$catfilme = $registos["catfilme"];

                    ?>
                                <option value=<? echo $idcatfilme; ?>><? echo $catfilme; ?></option>
									</select><?
									}
									?>

De seguida na segunda pagina (index.php?action=verificar) tenho o código:

<select name="genero" size="5" multiple="multiple" id="genero">
                    <?
                    $totalcatfilmes = mysql_query("SELECT * FROM categoriasfilmes ORDER BY catfilme ASC;", $ligar);

                    while ($registos = mysql_fetch_array($totalcatfilmes)) {
				$idcatfilme = $registos["id"];
				$catfilme = $registos["catfilme"];

           				if ($idcatfilme == $genero) {
                    ?>
                                <option value=<? echo $idcatfilme; ?> selected="selected"><? echo $catfilme; ?></option>
									<?
					} else {
                    ?>
                                <option value=<? echo $idcatfilme; ?>><? echo $catfilme; ?></option>
									<?
								}
						}
									?>

      </select>

O problema e que eu quero colocar na base de dados masi do que uma opção, e não consigo, apenas fica uma... alguem me ajuda?

Duvida 2 Outra questão é, eu tenho varios ficheiros ligados a administraçao, e na pagina que vai inicialmente depois do login (depois de passar pela verificaçao tambem) tem o seguine codigo:

session_start();
if (!$_SESSION['SESSION_USERNAME'] or $_SESSION['SESSION'])
{
header("Location: login.php");
exit();
}
$SESSION_login = $utilizador;
?>

O problema e que não sei fazer, o código, para que a sessão funcione em todas as outras paginas, ja tentei copiar este codigo para a pagina seguinte mas quando passo da 1ª pagina para a 2ª esta vai para a pagina de login de novo. Vai uma ajuda?

Duvida 3 Outra duvida que tenho e o seguinte, eu tenho uma tabela com todos os dados da tabela da base de dados, e o que eu queria fazer era por exemplo ao clicar em id, os dados da ficavam por ordem crescente ou decrescente, isso acontecendo com todos os dados da tabela, vai aqui o que ja fiz:

  <?
    include("config.php");
    global $ligar;
  $resultado = mysql_query("SELECT * FROM filmes ORDER BY id DESC;", $ligar);
  while ($registos = mysql_fetch_array($resultado)) {
  ?>
  <tr>
    <td><div align="center"><?echo $registos['id'];?></div></td>
    <td><div align="center"><?echo $registos['num'];?></div></td>
    <td><div align="center"><?echo $registos['titulopt'];?></div></td>
    <td><div align="center"><?echo $registos['tituloen'];?></div></td>
    <td>	<div align="center">
      <?
				$idgenero = $registos['genero'];
                                $genero = mysql_query("SELECT * FROM categoriasfilmes WHERE id=$idgenero;", $ligar);
                                $nomegenero = mysql_fetch_array($genero);
				echo $nomegenero['catfilme'];


	?>
    </div></td>
    <td><div align="center"><?echo $registos['publicado'];?></div></td>
    <td><div align="center"><?echo $registos['destaque'];?></div></td>
    <td><div align="center"><?echo $registos['nocinema'];?></div></td>
    <td><div align="center"><?echo $registos['emprestado'];?></div></td>
    <td><div align="center"><?echo $registos['colocadopor'];?></div></td>
  </tr>
  				<?
}
?>

Duvida 4 E finalmente gostava de saber como faço uma lista de A a Z em que o utilizador carregue na letra e apareça os dados que começao com essa letra.

Espero por uma resposta. Obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Duvida 4 E finalmente gostava de saber como faço uma lista de A a Z em que o utilizador carregue na letra e apareça os dados que começao com essa letra.

Espero por uma resposta. Obrigado pela ajuda

SELCT * FROM tabela WHERE row LIKE '<letra>%'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, vou tentar responder o que conseguir...

Duvida 2

O teu código tem algumas coisas "incoerentes"... experimenta este, um pouco modificado

session_start();
if (empty($_SESSION['SESSION_USERNAME']))
{
header("Location: login.php");
exit();
}
$SESSION['SESSION_USERNAME'] = $utilizador;  //alterei a sessão onde querias colocar, acho que era na mesma que pretendias...
?>

Dúvida 4

Só como complemento à resposta do Hipnoted, a query está certa (só falhou o SELECT ;) ), faltou pelo que me parece a funcionalidade de gerar as letras em PHP:

for($i='a'; $i<='z'; $i++){
echo "<a href=\"paginaOndeQueresListarPorLetras.php?letra=$i\">".strtoupper($i)."</a>";
}

Só um apartezinho, adoro esta funcinalidade de "incrementar" letras  B)

Não foi muito, mas pelo menos já tens alguma coisa. A tua primeira pergunta, acho que anda aí outra parecida nesta secção também. Mas experimenta passar isso com arrays de PHP, vê isto http://www.tizag.com/phpT/examples/formex.php pode ser que ajude.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para que serve o .strtoupper($i). ?

NA duvida 2 com a modificação que fizes-te se eu por em mais de que uma pagina vai funcionar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para que serve o .strtoupper($i). ?

Para mostrar a letra maiúscula.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E como faço para fazer a verificação da sessao em todas as paginas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E como faço para fazer a verificação da sessao em todas as paginas?

Com o primeiro código que te dei, para a 2ª duvida, poe no inicio, mesmo no topo, de todas as paginas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, vou tentar responder o que conseguir...

session_start();
if (empty($_SESSION['SESSION_USERNAME']))
{
header("Location: login.php");
exit();
}
$SESSION['SESSION_USERNAME'] = $utilizador;  //alterei a sessão onde querias colocar, acho que era na mesma que pretendias...
?>

Nao da, na pagina a seguir ao login tem varios links e quando carrego nos links vou direncto para a pagina de login tal como antes :S

Dúvida 4

Só como complemento à resposta do Hipnoted, a query está certa (só falhou o SELECT ;) ), faltou pelo que me parece a funcionalidade de gerar as letras em PHP:

for($i='a'; $i<='z'; $i++){
echo "<a href=\"paginaOndeQueresListarPorLetras.php?letra=$i\">".strtoupper($i)."</a>";
}

Cracha-me o browser todo...

Depois damo um erro fatal a dizer k excedeu mais de 60 segundos, e so aparece repetidamente o ultimo valor...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quanto às letras, eu tive o cuidado de por plicas, mas afinal é com aspas, basta substituir por:

-- incorrecto --

for($i="a"; $i<="z"; $i++){
echo "<a href=\"paginaOndeQueresListarPorLetras.php?letra=$i\">".strtoupper($i)."</a> ";
}

-- incorrecto --

Quanto às sessões é estranho, podes por o ficheiro que usas para fazer o login do user, sff?

EDIT: o codigo acima está errado... o que é estranho é que me lembro de ter feito desta maneira e tinha resultado... Mas vê este link, penso que ajuda http://www.htmlstaff.org/ver.php?id=10897

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Penso que nao seja problema teu nao sei, ja que eu fiz um for so com numeros e nao deu tambem, e numeros nao tem plicas nem aspas... nao da para fazer isso sem o circulo for?

Pois eu acho que não funciona as sessoes porque a propria sessão acaba quando saiu do ficheiro para outro, ele vai iniciar uma nova sessao mas ja nao tenho o $_SESSION['SESSION_USERNAME'], alguma ideia?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

DEpois de criar outro sistema de activação de conta, apercebi-me que afinal eu tinha-me enganado num link... bahh so eu, ja tava a começar a bater com a cabeça e nada, no fim uma porcaria de um link mal feito que fazia-me logout XD.

Continuo e com o mesmo problema das letras. Era porrreiro fazer doutra maneira (sem ser a unha convinha XD)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

olha estive a pesquisar um pouco e apareceu-me logo no google no primeiro resultado  ;)

<?php
for ($i='65'; $i<='90'; $i++) {
$x = chr($i);
print "<a href=\"paginaOndeQueresListar.php?letra=$x\">$x</a> ";
}
?> 

adaptado de http://web.powersugoi.net/articles/php-alphabet/

E este testei-o e a mim funciona-me perfeitamente.

EDIT: Só uma pequena nota, se calhar já sabes, mas para quem não sabe, os números 65, 66, 67 ... até 90 representas as maiúsculas A, B, C... até Z e a função char, apenas converte esse número ascii na letra corresondente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sei isso e ja tinha esprimentado, o problema e que me crascha akilo todo :S. Eu tou a usar o xamp, como servidor localhost para testes...

O que esta a fazer confusao la e o ciclo for...

edit: tive a fazer testes, e penso que saiba o que se passou, ao colocar $i=10 ele fazia para 10 repete mais uma vez ate terminar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ja agora falta a duvida 3:

Duvida 3 Outra duvida que tenho e o seguinte, eu tenho uma tabela com todos os dados da tabela da base de dados, e o que eu queria fazer era por exemplo ao clicar em id, os dados da ficavam por ordem crescente ou decrescente, isso acontecendo com todos os dados da tabela, vai aqui o que ja fiz:

  <?
    include("config.php");
    global $ligar;
  $resultado = mysql_query("SELECT * FROM filmes ORDER BY id DESC;", $ligar);
  while ($registos = mysql_fetch_array($resultado)) {
  ?>
  <tr>
    <td><div align="center"><?echo $registos['id'];?></div></td>
    <td><div align="center"><?echo $registos['num'];?></div></td>
    <td><div align="center"><?echo $registos['titulopt'];?></div></td>
    <td><div align="center"><?echo $registos['tituloen'];?></div></td>
    <td>	<div align="center">
      <?
				$idgenero = $registos['genero'];
                                $genero = mysql_query("SELECT * FROM categoriasfilmes WHERE id=$idgenero;", $ligar);
                                $nomegenero = mysql_fetch_array($genero);
				echo $nomegenero['catfilme'];


	?>
    </div></td>
    <td><div align="center"><?echo $registos['publicado'];?></div></td>
    <td><div align="center"><?echo $registos['destaque'];?></div></td>
    <td><div align="center"><?echo $registos['nocinema'];?></div></td>
    <td><div align="center"><?echo $registos['emprestado'];?></div></td>
    <td><div align="center"><?echo $registos['colocadopor'];?></div></td>
  </tr>
  				<?
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sei isso e ja tinha esprimentado, o problema e que me crascha akilo todo :S. Eu tou a usar o xamp, como servidor localhost para testes...

O que esta a fazer confusao la e o ciclo for...

edit: tive a fazer testes, e penso que saiba o que se passou, ao colocar $i=10 ele fazia para 10 repete mais uma vez ate terminar...

Esse código ultimo que te dei é diferente e aqui funcionou bem, até vou copiar a saida:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z com os links

so se for das versões de PHP... eu uso o wampserver com a versão de PHP 5.2.4

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quanto à outra dúvida, basta trocares o select de acordo com os parametros do get ou post (se calhar melhor usar o get).

Ficava qq coisa do genero:

<?php
...
$campo = mysql_real_escape_string($_GET['campo']);
$ordenar = $_GET['ordem'];

switch($_GET['ordenar']){
case "ascendente":
    $sql = "select from tabela where $campo = x order by campo asc";
    break;
case "descendente":
    $sql = "select from tabela where $campo = x order by desc";
}
...
?>

e depois os links

seriam pagina.php?ordem=crescente&campo=nome&restodecampos=aqui

seriam pagina.php?ordem=decrescente&campo=nome&restodecampos=aqui

Basicamente é essa a logica.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

for ($i='65'; $i<='90'; $i++) {

Esse for é incorrecto. Tu estás a dizer que o $i é a representação decimal dos caracteres que representam o 6 e 5, que por acaso para o PHP não faz grande diferença porque ele faz um atoi() (função em C), e não o valor decimal 65. Quando não sabes o valor das letras, basta fazeres for($i=ord('A');$i<=ord('Z');$i++) ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao percebi softclean, podes dar o exemplo completo com as tabelas e isso?

TEnho a lista feita agr quero que quando carregue para a na letra va para uma função onde depois vai ver todos os filmes com a litra iniciada por a letra carregada, como faço, eu tenho:

switch {$_GET ['action'])
{
case 'abcd';
abcd ($abcd);
break;

default;
index();
}

//entao o link vai ser filmes.php?action=abcd&letra=$abcd

So nao consigo e fazer com que esta variavel fique na função, como faço?

djthyrax, esta a funcionar correctamente :S.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

djthyrax, esta a funcionar correctamente :S.

que por acaso para o PHP não faz grande diferença porque ele faz um atoi() (função em C)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então, supondo que fazes tudo na mesma página fica algo do genero:

//gerar as letras fica sempre no topo
for ($i='65'; $i<='90'; $i++) {
$x = chr($i);
print "<a href=\"paginaOndeQueresListar.php?letra=$x\">$x</a> ";
}

if(empty($_GET['letra'])){
    //se nao houver ?letra=xx
    echo "Escolha uma letra acima para ver uma lista (ou em alternativa podes por aqui uma lista com todos os videos)";
}else{
    //se houver ?letra=xx (carregou num dos links)
    $letra = addslashes($_GET['letra']);       //faz quase a mesma coisa que a função mysql_real_esc... só que nao precisas ter uma ligacao mysql
    $sql = mysql_query("select * from tabela where campo like '$letra*'");
    ...
    //codigo para fazeres a tabela de acordo com os campos
}

Com, quando o user chega à página, vê o alfabeto e vê a mensagem por baixo "Escolha uma letra..." ou entao podes mesmo por uma tabela com todos os filmes (atenção de forem muito não convém, fica uma página muito grande e pesada). Quando ela carrega numa letra, ele vai para a mesma página só que com $letra = a uma letra qualquer e depois ele compara.

Se tiveres alguma duvida numa das funções basta clicar em cima delas, vai para a pagina do PHP onde tens mais informação ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

"Correcção" ao código acima:

//gerar as letras fica sempre no topo
for ($i=65; $i<=90; $i++) 
echo sprintf("<a href='paginaOndeQueresListar.php?letra=%s'>%s</a> ", chr($i), chr($i)); #O echo é mais rápido que o print. Anyway, acho que se eu usar %c em vez de %s, e $i em vez de chr($i), ele faz o mesmo trabalho.


if(empty($_GET['letra']) || strlen($_GET['letra']) != 1 || ord($_GET['letra']) < 65 || ord($_GET['letra']) > 90){
    //se nao houver ?letra=xx, se for mais q 1 letra, e se a representação em decimal não estiver entre 65 e 90
    echo "Escolha uma letra acima para ver uma lista (ou em alternativa podes por aqui uma lista com todos os videos)";
}else{
    //se houver ?letra=xx (carregou num dos links)
    #$letra = addslashes($_GET['letra']);       //faz quase a mesma coisa que a função mysql_real_esc... só que nao precisas ter uma ligacao mysql <- não é necessário fazer isto, a verificação foi feita no if ali em cima.
    $sql = mysql_query("select * from tabela where campo like '$letra%'");
    //codigo para fazeres a tabela de acordo com os campos
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, exacto, senão poderia passar ?letra=qqcoisaquemeapetece e processava na mesma... boa correcção ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sry o tempo, tive a desncançar um pouco de pcs XD. So nao percebi a parte da ordem crescente numa tabela do genero:

<table>

<tr>

<td>Dado1</td>

<td>dado2</td>

</tr>

<tr>

<td>registio['dado1'];</td>

<td>registio['dado2'];</td>

</tr>

</table>

OS registos fiquem numa ordem que eu quero ou no dado 1 ou no dado 2

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usando o código final que o djthyrax deu

//gerar as letras fica sempre no topo
for ($i=65; $i<=90; $i++) 
echo sprintf("<a href='paginaOndeQueresListar.php?letra=%s'>%s</a> ", chr($i), chr($i)); #O echo é mais rápido que o print. Anyway, acho que se eu usar %c em vez de %s, e $i em vez de chr($i), ele faz o mesmo trabalho.


if(empty($_GET['letra']) || strlen($_GET['letra']) != 1 || ord($_GET['letra']) < 65 || ord($_GET['letra']) > 90){
    //se nao houver ?letra=xx, se for mais q 1 letra, e se a representação em decimal não estiver entre 65 e 90
    echo "Escolha uma letra acima para ver uma lista (ou em alternativa podes por aqui uma lista com todos os videos)";
}else{
    //se houver ?letra=xx (carregou num dos links)
    $sql = mysql_query("select * from tabela where campo like '$letra%'");
    //codigo para fazeres a tabela de acordo com os campos
}

Na parte do $sql = mysql_query(... é só pores a ordenação conforme outro parametro do $_GET (ou 'asc' ou 'desc'). e depois fazer a tabela com os campos normalmente. Se quiseres no cabeçalho da tabela (primeira linha) fazer a ordenação pelo campo, passas no $_GET o nome do campo e a ordenação (para isso bastando fazer um link no cabeçalho ou uma seta, conforme queiras):

?letra=A&campo=nome&ordenacao=asc

ficaria a ordenação do campo nome de forma crescente, de todos os titulos que começacem por 'A'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tenho o seguinte codigo, agora quero colocar a letra a funcionar bem no function verfilme() :

<?
include("config.php");

function index()
{

    for ($i=65; $i<=90; $i++) {
$abc= chr($i);
echo "<a href=\"{$_SERVER['PHP_SELF']}?action=verfilme&letra=$abc\">$abc</a>    ";

}
}



function verfilme($abc)
{
   	global $ligar;
   	 $procura ="Select * from filmes where publicado='Sim' AND titulopt like '".$abc."%'";
        $result= mysql_query($procura, $ligar);
        $nregistos = mysql_num_rows($result);

                for ($i=0; $i <$nregistos; $i++) {
        $registo = mysql_fetch_assoc($result);
        echo '<tr>';
        echo '<td>'.$registo['titulopt'].'</td>';
   }

}

	switch($_GET['action'])
		{
		    case 'verfilme':
        		verfilme("$abc");
        		break;

        	default:
        		index();
		}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora