-
Total de itens
150 -
Registro em
-
Última visita
Sobre joanita

Perfil
-
Gender
Female
-
Location
Portugal
-
Interests
PHP e Design
Últimos Visitantes
6.284 visualizações
joanita's Achievements
0
Reputação
-
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?
-
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
-
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; ?>
-
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,
-
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
-
??? 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...
-
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
-
perfeito :) será que podemos avançar mais com o resto podes ajudar?
-
alterei o nome da tabela "teste" para "produtos"... faz mais sentido, assim ficamos com categorias e produtos
-
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.
-
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; } } ?>
-
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
-
mas assim ela da erro, esconde metade do cenário que deveria mostrar na pagina
-
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 ; } } ?>
-
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`)