Jump to content
Fórum Script Brasil

joanita

Membros
  • Posts

    150
  • Joined

  • Last visited

About joanita

Perfil

  • Gender
    Female
  • Location
    Portugal
  • Interests
    PHP e Design

Recent Profile Visitors

4740 profile views

joanita's Achievements

0

Reputation

  1. ok, tenho este trexo de codigo que me recebe e mostra os erros após enviar o form, ou seja mostra o que falta preencher: (index.php) <?php // Se existir sessão iniciada. if(isset($_SESSION['erros'])){ // Exibe caso existam, todos os erros trazidos pela sessão do ficheiro "envia.php". $mostra_erros = $_SESSION['erros']; echo "<br><img src='estilos/erro.png' border='0'><br>Upsss!<br>"; for($i = ; $i < count($mostra_erros); $i++){ echo "<font class='erros'>$mostra_erros[$i]<br></font>"; } } // Termina a sessão. session_destroy(); echo "<br>"; ?> e tenho este no ficheiro envia.php que é responsavel por verificar e me enviar os erros após receber as infos do index.php <?php session_start(); // Inicia a sessão // Liga-se à base de dados. require_once 'ligar-bd.php'; // Verifica se o número de elementos contados é igual aos que se espera enviar. // (É UMA PROTEÇÃO IMPORTANTE PORQUE PERMITE VER SE É UMA PESSOA OU ALGUM SOFTWARE A ENVIAR O FORMULÁRIO). if( count($_POST) == 3 ){ // Limpa o lixo das variaveis antes de as guardar. $nome = filter_var($_POST['nome'], FILTER_SANITIZE_STRING); $categoria = filter_var($_POST['categoria'], FILTER_SANITIZE_STRING); $id_categoria = filter_var($_POST['id_categoria'], FILTER_SANITIZE_STRING); // Armazena todos os erros na variiável $erros para mais tarde poder mostra-los. $erros = array(); // Verifica se os campos obrigatórios estão selecionados ou preenchidos. // e caso o campo não esteja selecionado ou preenchido exibe os erros. if( $nome == "" ){ $erros[] = "Preencha o nome!"; } // Caso o valor da variável seja comparável com zero mostra o erro. if( $categoria == "0" ){ $erros[1] = "Escolha a categoria ou insira uma nova!"; } // Caso existam erros, cria uma sessão para transporta-los para qualquer lugar sempre que desejado. if( count($erros) > ){ $_SESSION['erros'] = $erros; // redireciona para o link echo '<meta http-equiv="refresh" content="0; url=index.php" />'; } } exit; ?> acontece que ele retorna bem os erros, so que se por exemplo eu não inserir ou selecionar nada e clicar em enviar, ele retorna os 2 erros do nome e categoria, se eu escrever um nome apenas e enviar ele não retorna o erro da categoria! e se escolher uma categoria apenas e enviar ele retorna bem o erro do nome... alem disso, como são 2 ficheiros diferentes, caso eu faça uma dessas opções e envie ele retorna apenas um erro e não mantem o que já tinha sido selecionado ou inserido antes de enviar, resumindo obriga-me a preencher e selecionar de novo. como poderia meter isto a funcionar bem?
  2. como assim? tenho o index.php com o form que depois redireciona para este envia.php que tem as instruções para enviar os dados, mas ainda está em faase de construção pois alterei o original... agora o que tenho é isso que postei. A ideia será enviar apenas após fazer isto tudo que te falei, ou seja, verificar as categorias e inserir nome e categorias... a estrutura do banco é: -- -- Estrutura da tabela `categorias` -- CREATE TABLE IF NOT EXISTS `categorias` ( `id` int(11) NOT NULL AUTO_INCREMENT, `idcategoria` int(11) NOT NULL, `categoria` varchar(50) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; -- -- Estrutura da tabela `produtos` -- CREATE TABLE IF NOT EXISTS `produtos` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) NOT NULL, `imagem` longtext NOT NULL, `id_categoria` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=73 ; e a do index atualmente é: <?php require_once 'ligar-bd.php'; require_once "funcoes.php"; require_once "estilos/estilos.css"; include "topo.php"; require_once "conta_total.php"; ini_set('default_charset','UTF-8'); ?> <html> <body> <center> <titulo>Adicionar Nova Entrada</titulo> <hr size=1 width=500 class="degrade"> <form action="envia.php" method="POST" enctype="multipart/form-data"> <table align="center" width="500px" border="0" cellpading="4" cellspacing="8" bgcolor="#f0f0f0"> <?php echo $_SESSION['erros']; ?> <tr> <td align="center"> <hr size=1 width=500 class="degrade"> <label for="nome">Nome:</label> <br> <input type="text" name="nome"> <br> <label for="categoria">Escolha a Categoria:</label> <br> <select name="categoria" id="categoria"> <option value='0' select='selected'>---</option> <?php $categorias = listaCategorias(); if( $categorias > ){ foreach($categorias as $categoria){ echo "<option value='{$categoria["id"]}'>{$categoria["categoria"]}</option>\r\n"; } } ?> </select> <br> ou insira uma nova... <br> <br> <label for="subcategoria">Nova Subcategoria ou Categoria:</label> <br> <input type="text" name="subcategoria"> <br> <label for="imagem">Adicione uma imagem:</label> <br> <input type="file" name="file"> <hr size=1 width=500 class="degrade"> <br> <input type="submit" value="Adicionar Entrada" class="button buttonfx buttonredondo"> <br> <br> </td> </tr> </table> </form> <?php include "rodape.php"; ?> </center> </body> </html> Atenção que o index infelizmente ainda me está a dar um erro de sessão que não estou a conseguir resolver (só para variar rsrsrsr) :D
  3. isso :) algo do género sim... mas estou meio baralhado de como fazer isso... o código que tenho é???? <?php require_once 'ligar-bd.php'; if( count($_POST) == 3 ){ $nome = filter_var($_POST['nome'], FILTER_SANITIZE_STRING); $categoria = filter_var($_POST['categoria'], FILTER_SANITIZE_STRING); $id_categoria = filter_var($_POST['id_categoria'], FILTER_SANITIZE_STRING); $erros = array(); if( $nome == "" ){ $erros[0] = "Preencha o nome!"; } if( $categoria == "0" ){ $erros[1] = "Escolha a categoria ou insira uma nova!"; } if( count($erros) > 0 ){ $_SESSION['erros'] = $erros; // redireciona para o link echo '<meta http-equiv="refresh" content="0; url=index.php" />'; exit; } } exit; ?>
  4. pensa comigo... o campo de cima (categoria) deveria mostrar todas as categorias e respetivas subcategorias caso existam... o campo de baixo deveria permitir apenas criar uma nova subcategoria ou categoria. deveria existir algo tipo um IF que verificasse se o campo categoria tinha alguma categoria/subcategoria selecionada e caso sim, usasse esse destino para a nova entrada e ao mesmo tempo p+ermitisse criar uma nova subcategoria dessa se fosse preciso, caso não existisse nada selecionado então mostraria uma mensagem a obrigar a selecionar uma categoria ou permitia criar uma nova. o que tem que ser obrigatório é ter uma categoria selecionada ou criar uma nova cat ou sub dessa,
  5. então mas para isso não é p+reciso o campo subcategoria porque as categorias e subcategorias deviam aparecer no select "categoria"... e isso é capaz de baralhar as pessoas
  6. ??? então mas isso assim não da, acho que não estas a perceber... os campos nome e imagem são obrigatórios, tal como uma categoria... seja ela criada de novo ou selecionada... logo não posso deixar apenas 2 campos de seleção um para a cat e outro para a sub, tem que permitir criar uma percebes? imagina que eu quero adicionar uma nova planta numa categoria que não existe ou subcategoria de uma categoria já existente...
  7. a duvida é que te4nho 2 campo ne? o catefgoria e por baixo o subcategoria (que tambem tem que dar para nele criar a categoria nova)... imagina tu podes escolher uma categoria das que já existe e criar uma subcategoria dessa categoria ou simplesmente usar a categoria existente ou ainda criar uma nova categoria no caso de nenhuma estar selecionada... nós já conseguimos meter o campo categoria a listar as categorias, agora falta o subcategoria funcionar
  8. perfeito :) será que podemos avançar mais com o resto podes ajudar?
  9. alterei o nome da tabela "teste" para "produtos"... faz mais sentido, assim ficamos com categorias e produtos
  10. excelente! esta a funcionar maravilhosamente... Stoma muito obrigado :) será que me podes ajudar no resto do código que falta? Isto é assim, eu estou a criar um banco de sementes organicas, onde dá para a pessoa inserir a semente que tem e meter por categoria, tem os campos (nome, categoria e subcategoria) imagina... tu metes o nome de uma semente e o código tem que ver se alguma categoria esta selecionada, se tiver uma selecionada adiciona a semente nessa ou permite criar uma subcategoria dessa categoria, caso não esteja nenhuma selecionada, o campo subcategoria tem que permitir criar uma nova categoria, mas nada como veres a funcionar neste link: http://www.rpublicidade.com/teste/index.php eu tenho 2 bases de dados (bancos como voces chamam no brasil) uma chamada teste com os dados da semente, outra chamada categorias com as categorias, assim: -- -- Estrutura da tabela `categorias` -- CREATE TABLE IF NOT EXISTS `categorias` ( `id` int(11) NOT NULL AUTO_INCREMENT, `idcategoria` int(11) NOT NULL, `categoria` varchar(50) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; -- -- Estrutura da tabela `teste` -- CREATE TABLE IF NOT EXISTS `teste` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) NOT NULL, `imagem` longtext NOT NULL, `id_categoria` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=73 ; da uma olhada no link para perceberes primeiro o que queria. Já coloco o que faz falta ainda fazer bom vamos por partes... a parte do select das categorias já ficou a funcionar, só uma coisa... (aparece um espaço no fim do select sem nada, esse espaço deveria aparecer no inicio do select para caso estivesse vazio como aparece, poder-mos criar outra nova categoria usando o campo subcategoria). Nesta parte falta ainda permitir criar nova categoria ou uma subcategoria da categoria selecionada, ou simplesmente não ser usado ficando apenas com a categoria selecionada. Abaixo o código inteiro atual do index.php <?php include "topo.php"; require_once "ligar-bd.php"; require_once "functions.php"; require_once "estilos/estilos.css"; require_once "conta_total.php"; ini_set('default_charset','UTF-8'); ?> <html> <body> <center> <titulo>Adicionar Nova Entrada</titulo> <hr size=1 width=500 class="degrade"> <form action="envia.php" method="POST" enctype="multipart/form-data"> <table align="center" width="500px" border="0" cellpading="4" cellspacing="8" bgcolor="#f0f0f0"> <tr> <td align="center"> <hr size=1 width=500 class="degrade"> <label for="nome">Nome:</label> <br> <input type="text" name="nome"> <br> <label for="categoria">Escolha a Categoria:</label> <br> <select name="categoria" id="categoria"> <?php $categorias = listaCategorias(); if( $categorias > ){ foreach($categorias as $categoria){ echo "<option value='{$categoria["id"]}'>{$categoria["categoria"]}</option>\r\n"; } } ?> </select> <br> ou insira uma nova... <br> <br> <label for="subcategoria">Nova Subcategoria ou Categoria:</label> <br> <input type="text" name="subcategoria"> <br> <label for="imagem">Adicione uma imagem:</label> <br> <input type="file" name="file"> <hr size=1 width=500 class="degrade"> <br> <input type="submit" value="Adicionar Entrada" class="button buttonfx buttonredondo"> <br> <br> </td> </tr> </table> </form> <?php include "rodape.php"; ?> </center> </body> </html> além disso, eu quando comecei o código fiz apenas uma tabela para tudo, depois é que me deram o concelho para fazer antes em duas, logo o resto dos ficheiros deixaram de funcionar (é uma questão de adaptar ás novas tabelas, mas ainda está por fazer...) mas vamos primeiro tratar isso das subcategorias.
  11. aparece no select escrito array e array de novo abaixo <?php // ############################## // FUNÇÃO QUE TRATA AS CATEGORIAS // ############################## function listaCategorias(){ // Na função a variável $mysqli não é reconhecida, por isso informamos que existe. global $mysqli; // Agora já reconhece a ligação à BD, já podemos executar o código. $sql = "SELECT id, categoria FROM categorias ORDER BY categoria ASC"; if(!$mysqli = $mysqli->query($sql)){ die('Erro ao consultar a base de dados: [' . $mysqli->error . ']'); } if( $mysqli->num_rows > ){ $rows = Array(); while($rows[] = $mysqli->fetch_assoc()){} return $rows; } } ?>
  12. tal como expliquei no primeiro post, tenho 2 files, um é o index.php e o outro o fuctions.php. ao inserir esse codigo antes do if nada da, o unico sitio que permite alguma resposta é antes do fuction, e aparece apenas NULL. Em qualquer outro lado não aparece nada e e mostra so meia pagina. functions.php <?php // ############################## // FUNÇÃO QUE TRATA AS CATEGORIAS // ############################## function listaCategorias(){ // Na função a variável $mysqli não é reconhecida, por isso informamos que existe. global $mysqli; // Agora já reconhece a ligação à BD, já podemos executar o código. $sql = "SELECT id, categoria FROM categorias ORDER BY categoria ASC"; if(!$mysqli = $mysqli->query($sql)){ die('Erro ao consultar a base de dados: [' . $mysqli->error . ']'); } if( $mysqli->num_rows > ){ $rows = $mysqli->fetch_all(MYSQLI_ASSOC); return $rows; }else{ return ; } } ?> e o index.php tem o seguinte select: <label for="categoria">Escolha a Categoria:</label> <br> <select name="categoria" id="categoria"> <?php $categorias = listaCategorias(); if( $categorias > ){ foreach($categorias as $id => $categoria){ echo '<option value="'.$id.'">'. $categoria .'</option>'."\r\n"; } } ?> </select> ERRO: [28-Apr-2016 20:10:29 Europe/Lisbon] PHP Fatal error: Call to undefined method mysqli_result::fetch_all() in .../functions.php on line 19 ou seja, a linha: $rows = $mysqli->fetch_all(MYSQLI_ASSOC); há e não fui eu que criei não
  13. mas assim ela da erro, esconde metade do cenário que deveria mostrar na pagina
  14. boa noite, tenho o seguinte código no index.php que chama o ficheiro functions.php: <label for="categoria">Escolha a Categoria:</label> <br> <select name="categoria" id="categoria"> <?php $categorias = listaCategorias(); if( $categorias > ){ foreach($categorias as $id => $categoria){ echo '<option value="'.$id.'">'. $categoria .'</option>'."\r\n"; } } ?> </select> mas ele em vez de retornar apenas os valores "categoria (que contém os nomes delas)" está a retornar apenas a primeira entrada, mostrando o ID e a Categoria... Devia mostrar apenas as categorias das várias entradas. functions.php <?php // ############################## // FUNÇÃO QUE TRATA AS CATEGORIAS // ############################## function listaCategorias(){ // Na função a variável $mysqli não é reconhecida, por isso informamos que existe. global $mysqli; // Agora já reconhece a ligação à BD, já podemos executar o código. $sql = "SELECT id, categoria FROM categorias ORDER BY categoria ASC"; if(!$mysqli = $mysqli->query($sql)){ die('Erro ao consultar a base de dados: [' . $mysqli->error . ']'); } if( $mysqli->num_rows > ){ $rows = $mysqli->fetch_assoc(); return $rows; }else{ return ; } } ?>
  15. olha aí Beraldo... <div class="formularioPainel"> <form action="" method="POST" enctype="multipart/form-data"> <label> <titulo>Selecione ou insira uma nova Categoria ou Subcategoria: </titulo> <br> <span>Categorias: </span> <select name="categoria"> <option>DEVIA LER E MOSTRAR AS ENTRADAS DO CAMPO "categoria" NA BASE DE DADOS "teste"</option> </select> </label> <br> <span>Insira a nova Categoria/Subcategoria: </span> <label> <input type="text" name="categoria" value=""/> </label> <input type="submit" value="Enviar" /> <input type="hidden" name="acao" value="adicionar_categoria" /> </form> </div> <?php // LIGA-SE Á BASE DE DADOS include('ligar-bd.php'); include('estilos/estilos.css'); // INFORMA QUE VAI USAR UTF8 AO GRAVAR NA BASE DE DADOS $mysqli->set_charset('utf8'); if(isset($_POST['acao']) && $_POST['acao'] == "adicionar_categoria"){ $categoria = $_POST['categoria']; // SE A CATEGORIA ESTIVER VAZIA MOSTRA A MENSAGEM if($categoria == ""){ echo "<script>alert('O campo categoria não pode ficar vazio!')</script>"; }else{ // SELECIONA A CATEGORIA NA BASE DE DADOS $seleciona = $mysqli->query("SELECT * FROM teste WHERE categoria = '$categoria'"); //SE A CATEGORIA EXISTIR NA BASE DE DADOS MOSTRA A MENSAGEM if(mysqli_num_rows($seleciona) == 1) { echo "<script>alert('Esta categoria já existe!')</script>"; }else{ // INSERE NA BASE DE DADOS $insere = $mysqli->query("INSERT INTO teste (categoria) VALUES('$categoria')"); echo "<script>alert('Adicionado com sucesso!')</script>"; } } } ?> e na minha tabela tenho estes campos: `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) CHARACTER SET utf8 NOT NULL, `imagem` longtext CHARACTER SET utf8 NOT NULL, `catid` int(11) NOT NULL, `categoria` varchar(50) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`)
×
×
  • Create New...