-
Total de itens
150 -
Registro em
-
Última visita
Posts postados por joanita
-
-
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
-
42 minutos atrás, Stoma disse:
Oi joanita.
Que bom que deu certo! :)
Sobre o item vazio que aparece na categoria, precisamos fazer uma correção na função listaCategorias... altere o while que tem nela para este:
$rows = Array(); while($row = $mysqli->fetch_assoc()){ $rows[] = $row; } return $rows;
Assim resolve esse problema.
Agora, qual a outra dúvida? Em relação a inserir a nova categoria/subcategoria?
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 ; } } ?>
-
Em 07/04/2016 at 17:54, Beraldo disse:
Em casos assim, esse input text recebe o nome de uma nova categoria e o salva no banco via Ajax, atualizando o <select>, para que a categoria possa ser selecionada. É uma lógica um pouco mais avançada, mas não é muito complexa. Se você conhecer um pouco sobre Ajax, não terá grandes dificuldades
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`) -
Boa noite, precisava de criar onde tenho o select das categorias (pre-definidas no codigo), passar esses dados antes para a db em vez de os ter no codigo e no lugar deste select, colocar outro que fosse buscar esses dados ao db e os mostrasse no select e a frente um input que permitisse criar uma nova categoria ou no caso de já selecionada uma no select usar essa ou criar uma subcategoria dessa... ex:
SELECT (vai ao db buscar as categorias existentes) INPUT (permite criar categorias novas ou caso se escolha no select uma permite criar uma subcategoria)
[SELECT] + [INPUT] = [CATEGORIAS E SUBCATEGORIAS NO DB]
o meu código atual é (index.php):
<html>
<body>
<?php
include "ligar-bd.php";
include "estilos/estilos.css";
ini_set('default_charset','UTF-8');
include "conta_total.php";
?>
<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">
Nome:
<br>
<input type="text" name="nome">
Categoria:
<br>
<select name="categoria">
<option>teste 1</option>
<option>teste 2</option>
</select>
<br><br>
Adicionar uma imagem:
<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>
depois tenho outro com os dados php para enviar (envia.php) -
-
alguém pode ajudar aqui?
-
como coloco isto a enviar as imagens para a pasta uploads em vez de pra root?
<?php
// LIGA-SE À BASE DE DADOS
include('ligar-bd.php');
// INFORMA QUE VAI USAR UTF8 AO GRAVAR NA BASE DE DADOS
$mysqli->set_charset('utf8');
// SE FOR PEDIDO UMA CONSULTA
if(!$_GET[getfile]){
// SE ELA NÃO EXISTIR MOSTRA A MENSAGEM DE ERRO
if ($_FILES["file"]["error"] > 0){
echo "Ups... falha no envio, tente novamente. ERRO: " . $_FILES["file"]["error"] . "<br>";
}else{
// TRATAMENTO E CODIFICAÇÃO DAS IMAGENS
move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
$bin_string = file_get_contents($_FILES["file"]["name"]);
$hex_string = base64_encode($bin_string);
// OPÇÕES DO FORMULÁRIO
$nome = filter_var($_POST['nome'], FILTER_SANITIZE_STRING);
$categoria = filter_var($_POST['categoria'], FILTER_SANITIZE_STRING);
// INSERE NA BASE DE DADOS
$mysqli->query(" INSERT INTO teste(
imagem,
nome,
categoria
) VALUES (
'" . $hex_string . "',
'$nome',
'$categoria'
) ");
}
}else{
// SELECIONA NA BASE DE DADOS A ÚLTIMA ENTRADA
if ($result = $mysqli->query(" SELECT * FROM teste ORDER BY id DESC ")){
if($row = $result->fetch_assoc()){
$output_hex_string = $row["imagem"];
$output_bin_string = base64_decode($output_hex_string);
header("Content-Type: image/png");
header("Content-Length: " . strlen($output_bin_string));
// MOSTRA A ÚLTIMA ENTRADA
$result->free();
echo $output_bin_string;
}
}
}
include "ultimo_envio.php";
?> -
ola, não esta nada, pareceu-me estar ainda em msql antigo, mas vi mal desculpa.
então mas voltando ao assunto, normalmente aparece um input para adicionar nova categoria com um select a frente para escolher uma categoria caso esta já exista e não queiramos criar uma nova.
-
tenho um ficheiro que envia um form para a base de dados e codifica a imagem com $hex_string = base64_encode($bin_string);
depois tenho um php para eliminar a entrada da base de dados caso queira, mas acontece que ele elimina do banco mas deixa a imagem no servidor e quero que ele ao eliminar do banco remova tambem a imagem para não ocupar espaço no servidor. Como posso alterar o código pra fazer isso?
o código é este:
<?php
// liga-se à base de dados
include('ligar-bd.php');
// confirma se a variável "id" está selecionada
if (isset($_GET['id']) && is_numeric($_GET['id'])){
// pega na variável "id" da URL
$id = $_GET['id'];
$imagem = $_GET['imagem'];
// apaga a entrada da base de dados
if ($stmt = $mysqli->prepare("DELETE FROM teste WHERE id = ? LIMIT 1")){
$stmt->bind_param("i",$id);
$stmt->execute();
// DEVERIA PEGAR NO NOME GUARDADO EM base64 NO BANCO NO CAMPO "imagem", CONVERTER NO NOME REAL DA IMAGEM E INSERIR NO UNLINK ESSE NOME
unlink($imagem);
$stmt->close();
}else{
echo "ERRO: Impossível eliminar.";
}
$mysqli->close();
// redireciona após ter eliminado com sucesso
header("Location: ver_todos.php");
}else{
header("Location: ver_todos.php");
}
?> -
a tua modelagem de categorias esta obsoleta ainda em mysql
não esta não vi mal
-
assim... ? isto parece-me um select comum... como posso depois permitir a inserção de novas categorias que não estejam pre-definidas (supondo que queres adicionar umproduto numa categoria nova não existente)
Categoria:
<br>
<select name="categoria" id="catid">
<option>Aromáticas</option>
<option>Malaguetas</option>
<option>Legumes</option>
<option>Árvores</option>
<option>Sebes e Arbustos</option>
<option>Flores</option>
</select> -
Beraldo tenho a tabela teste com os campos (id, nome, imagem, catid, categoria)
-
pois era isso que queria, criar um campo para escolher a categoria existente ou digitar a categoria nova, mas o meu problema parte muite de como tudo isso joga com o banco... criar o input é facil, o problema é depois as ligaçoes entre IDs de categorias/subcategorias com o id do $nome.
Neste caso com o meu código que te mostrei acima, podes dar-me um exemplo visual de como farias?
problema de verificação de erros
em PHP
Postado
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)
e tenho este no ficheiro envia.php que é responsavel por verificar e me enviar os erros após receber as infos do index.php
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?