Ir para o conteúdo

Pesquisar na Comunidade

A mostrar resultados para tags ''yii''.



Mais opções de pesquisa

  • Pesquisa por Tags

    Introduza as tags separadas por vírgulas.
  • Pesquisar por Autor

Tipo de Conteúdo


Fórum

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Visual Basic Clássico
    • Visual Basic for Applications (VBA)
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • SharePoint
    • Apresentação de Software
  • Informática Extra-Programação
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Matemática
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categorias

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Procurar resultados em...

Pesquisar conteúdos que contêm...


Data de Publicação

  • Início

    Fim


Última Actualização

  • Início

    Fim


Filtrar por número de...

15 resultados

  1. Bom dia, Estou com um problema com a framework php Yii2, que não consigo manter o login criado. Já segui vários tuts, e continuo a não conseguir. Ele faz bem o login, regista a sessão na tabela, no entanto, continua a tornar o user logado como guest. Alguem ja teve este problema? O codigo é o original, mas alterando apenas a busca dos users, tal como na documentação.
  2. trane

    [Problema] PHP - Website

    Olá Pessoal! Estou a desenvolver um jogo browser em forma de quiz, que consiste em vários níveis de perguntas e cada resposta tem +2 pontos e -1 ponto se for errada. Actualmente estou com um problema na pagina inicial. E como podem ver tem o "registo/login" e a dificuldade, ao inserir de 1 ao 4 , queria arranjar uma maneira que o ranking no lado direito fosse alterado para o nível que a pessoa escolhe-se para isso tentei usar switch para cases mas está-me a dar erro. Vou deixar aqui o código fonte da pagina inicial até porque podem encontrar mais alguns erros e tentar-me assim ajudar na elaboração. <!DOCTYPE HTML> <html> <head> <title>GostoDoFrio - Jogo</title> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <!--[if lte IE 8]><script src="assets/js/ie/html5shiv.js"></script><![endif]--> <link rel="stylesheet" href="assets/css/main.css" /> <!--[if lte IE 8]><link rel="stylesheet" href="assets/css/ie8.css" /><![endif]--> <!--[if lte IE 9]><link rel="stylesheet" href="assets/css/ie9.css" /><![endif]--> </head> <style type="text/css"> input:required:invalid, input:focus:invalid { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeVJREFUeNqkU01oE1EQ/mazSTdRmqSxLVSJVKU9RYoHD8WfHr16kh5EFA8eSy6hXrwUPBSKZ6E9V1CU4tGf0DZWDEQrGkhprRDbCvlpavan3ezu+LLSUnADLZnHwHvzmJlvvpkhZkY7IqFNaTuAfPhhP/8Uo87SGSaDsP27hgYM/lUpy6lHdqsAtM+BPfvqKp3ufYKwcgmWCug6oKmrrG3PoaqngWjdd/922hOBs5C/jJA6x7AiUt8VYVUAVQXXShfIqCYRMZO8/N1N+B8H1sOUwivpSUSVCJ2MAjtVwBAIdv+AQkHQqbOgc+fBvorjyQENDcch16/BtkQdAlC4E6jrYHGgGU18Io3gmhzJuwub6/fQJYNi/YBpCifhbDaAPXFvCBVxXbvfbNGFeN8DkjogWAd8DljV3KRutcEAeHMN/HXZ4p9bhncJHCyhNx52R0Kv/XNuQvYBnM+CP7xddXL5KaJw0TMAF8qjnMvegeK/SLHubhpKDKIrJDlvXoMX3y9xcSMZyBQ+tpyk5hzsa2Ns7LGdfWdbL6fZvHn92d7dgROH/730YBLtiZmEdGPkFnhX4kxmjVe2xgPfCtrRd6GHRtEh9zsL8xVe+pwSzj+OtwvletZZ/wLeKD71L+ZeHHWZ/gowABkp7AwwnEjFAAAAAElFTkSuQmCC); background-position: right top; background-repeat: no-repeat; -moz-box-shadow: none; } input:required:valid { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAepJREFUeNrEk79PFEEUx9/uDDd7v/AAQQnEQokmJCRGwc7/QeM/YGVxsZJQYI/EhCChICYmUJigNBSGzobQaI5SaYRw6imne0d2D/bYmZ3dGd+YQKEHYiyc5GUyb3Y+77vfeWNpreFfhvXfAWAAJtbKi7dff1rWK9vPHx3mThP2Iaipk5EzTg8Qmru38H7izmkFHAF4WH1R52654PR0Oamzj2dKxYt/Bbg1OPZuY3d9aU82VGem/5LtnJscLxWzfzRxaWNqWJP0XUadIbSzu5DuvUJpzq7sfYBKsP1GJeLB+PWpt8cCXm4+2+zLXx4guKiLXWA2Nc5ChOuacMEPv20FkT+dIawyenVi5VcAbcigWzXLeNiDRCdwId0LFm5IUMBIBgrp8wOEsFlfeCGm23/zoBZWn9a4C314A1nCoM1OAVccuGyCkPs/P+pIdVIOkG9pIh6YlyqCrwhRKD3GygK9PUBImIQQxRi4b2O+JcCLg8+e8NZiLVEygwCrWpYF0jQJziYU/ho2TUuCPTn8hHcQNuZy1/94sAMOzQHDeqaij7Cd8Dt8CatGhX3iWxgtFW/m29pnUjR7TSQcRCIAVW1FSr6KAVYdi+5Pj8yunviYHq7f72po3Y9dbi7CxzDO1+duzCXH9cEPAQYAhJELY/AqBtwAAAAASUVORK5CYII=); background-position: right top; background-repeat: no-repeat; } </style> <body class="index"> <div id="page-wrapper"> <!-- Header --> <header id="header" class="alt"> <h1 id="logo"><a href="index.php">GostoDoFrio</a></h1> <nav id="nav"> <ul> <li class="current"><a href="index.php">Bem-Vindo</a></li> </ul> </nav> </header> <!-- Banner --> <section id="banner"> <div class="inner"> <h2>LOGIN</h2> <header> <?php require_once "config.php"; // inclui a conexão a database $nivel = '0'; if(!isset($_POST['join'])){ echo " <form method=\"post\" action=\"index.php\"> <label>Nome</label><br/><input name=\"username\" required/><br/> <label>Apelido</label><br/><input name=\"apelido\" required/><br/> <label>Email</label><br/><input name=\"email\"/><br/> <br/> <label>Dificuldade</label><br/><input name=\"nivel\"/><br/>(1-4)<br/> <br/> <br/> <input type=\"submit\" name=\"join\" value=\"submit\"/> </form> <br/> "; } else{ $user = mysql_real_escape_string($_POST['username']); $apelido = mysql_real_escape_string($_POST['apelido']); $email = $_POST['email']; $nivel = $_POST['nivel']; mysql_query("INSERT INTO users (id, username, apelido, email) VALUES (NULL, '$user', '$apelido', '$email')") or die("Alguma coisa correu mal durante o registo. MySQL erro: ".mysql_error()); session_start(); $_SESSION['user'] = $user; $_SESSION['apelido'] = $apelido; $_SESSION['nivel'] = $nivel; echo " <br/> Bem Vindo <strong>$user $apelido</strong>."; echo " <br/> <form method=\"post\" action=\"perguntanivel1.php\"> <input type=\"submit\" name=\"submit\" value=\"Entrar!\"/> </form> <br/> "; } ?> </header> </div> <div class="inner"> <h2>RANKING</h2> <center> </center> <?php $_SESSION['nivel'] = $nivel; switch ($nivel) { case "1": echo "Your favorite color is red!"; break; case "2": echo "Your favorite color is blue!"; break; case "3": echo "Your favorite color is green!"; break; case "4": echo "Your favorite color is neither red, blue, nor green!"; break; } ?> <table> <tr> <th>Lugar</th> <th>Nome</th> <th></th> <th></th> <th>Pontos</th> </tr> <?php $host = "localhost"; $user = "filipe"; $pass = "filipe1234"; $db = "jogo"; mysql_connect($host, $user, $pass); mysql_select_db($db); $sql = mysql_query('Select * From users ORDER BY PontosN1 Desc Limit 0,5'); $lista = 0; While($dado = mysql_fetch_array($sql)) { $lista++; ?> <tr> <td><?php echo $lista ?></td> <td><?php echo $dado['username']; echo $dado['apelido'];?></td> <td></td> <td></td> <td><?php echo $dado['PontosN1']; ?></td> </tr> <?php } ?> </table> <h2>INSTRUÇÕES</h2> <p>.............................</p> </div> </section> <!-- Footer --> <footer id="footer"> <ul class="icons"> <li><a href="#" class="icon circle fa-twitter"><span class="label">Twitter</span></a></li> <li><a href="#" class="icon circle fa-facebook"><span class="label">Facebook</span></a></li> <li><a href="#" class="icon circle fa-google-plus"><span class="label">Google+</span></a></li> </ul> <ul class="copyright"> <li>© GostoDoFrio</li><li>Code/Design: <a href="">BOTODACRUZ - AGENCIA CRIATIVA</a></li> </ul> </footer> </div> <!-- Scripts --> <script src="assets/js/jquery.min.js"></script> <script src="assets/js/jquery.dropotron.min.js"></script> <script src="assets/js/jquery.scrolly.min.js"></script> <script src="assets/js/jquery.scrollgress.min.js"></script> <script src="assets/js/skel.min.js"></script> <script src="assets/js/util.js"></script> <!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]--> <script src="assets/js/main.js"></script> </body> </html> Depois temos para ser mais especifico a zona do ranking: <table> <tr> <th>Lugar</th> <th>Nome</th> <th></th> <th></th> <th>Pontos</th> </tr> <?php $host = "localhost"; $user = "filipe"; $pass = "filipe1234"; $db = "jogo"; mysql_connect($host, $user, $pass); mysql_select_db($db); $sql = mysql_query('Select * From users ORDER BY PontosN1 Desc Limit 0,5'); $lista = 0; While($dado = mysql_fetch_array($sql)) { $lista++; ?> <tr> <td><?php echo $lista ?></td> <td><?php echo $dado['username']; echo $dado['apelido'];?></td> <td></td> <td></td> <td><?php echo $dado['PontosN1']; ?></td> </tr> <?php } ?> </table> Cada nivel tem uma tabela chamada Pontosn1,pontosn2,pontosn3,pontosn4 Agradeço toda a ajuda! Obrigado!
  3. karadas

    php login - yii2 mysql

    boas people, preciso de um login super simples, nunca fiz nenhum, queria um exemplo fácil para aplicar. objectivo do login é apenas para dar acesso a certos link do menu. neste momento está como login estático, aquele que o próprio yii2 trás de base, este não serve, porque os utilizadores e password têm que ficar guardados na bd. qualquer dúvida, é pedir. cumps
  4. secua

    Uso de Framwork em PHP

    Bom dia a todos, Estou tentando aventurar-me na programação em PHP , após algumas pesquisas descobri que podemos usar Frameworks que facilitam no desenvolvimento do código. Esta afirmação é verdadeira? Para um iniciante é a opção certa? Que Framework aconselham a usar (estou neste momento a analisar a yii)? O objetivo é desenvolver pequenas aplicações internas para a empresa, a escolha duma linguagem web deve-se ao fato de eu achar que este tipo de desenvolvimento disponibiliza de imediato a aplicação para todos, bastando apenas que o PC tenha um browser. Gostaria da vossa opinião. Obrigado Claudio Secua
  5. dec0

    Dúvidas Yii Framework

    Olá gente! Mais uma vez cá estou eu com algumas dúvidas no meu projeto. Sou novato com o Yii framework, e como tal de vez em quando lá vou necessitando de tirar algumas dúvidas e recorro ao fórum... Vou utilizando este tópico para criar novas dúvidas que possa ter. Então neste momento tenho 2 dúvidas: Tenho uma tabela ComponenteLetiva, (id[PK], idAnoLetivo[FK], descricao, dataIni, dataFim). O que pretendo é validar que as datas dataIni e dataFim estão dentro do ano letivo selecionado. Ora para isso, preciso de ir buscar os dados referentes ao ano letivo selecionado. Então tenho no na classe model tenho: public function rules() { return array( // array('data_ini', 'veDataIni'), ); } public function veDataIni($attribute, $params) { $dataIni = $this->data_ini; $anoLetivo = Anoletivo::model($this->idAnoLetivo); if($dataIni < $anoLetivo->data_ini){ $this->addError('dataIni', 'A data não entra nos intervalos deste ano letivo'); } } O que aqui tentei fazer foi carregar o modelo referente ao ano letivo selecionado e ir buscar a sua data de início. Contudo quando vou fazer "Adicionar" tenho o seguinte erro: include(1.php): failed to open stream: No such file or directory (1.php) está a referir-se ao id do AnoLetivo que no caso quem que testo é "1". Alguém me consegue ajudar?
  6. dec0

    Upload foto - Yii Framework

    Olá pessoal! Estou a trabalhar com o Yii Framework para o meu projeto e estou com uma pequena dúvida: Onde fazer o upload da foto de um aluno. Tenho na tabela os seguintes campos (só aqui estão alguns) Aluno(id, nome, dataNascimento, localizacaoFoto). Para fazer o upload da foto estou a tentar seguir este tutorial: http://rafaelcouto.com.br/upload-simples-de-imagem-com-php-mysql/ No entanto a minha dúvida é saber onde se colocará o bloco de código respetivo ao upload da foto... É no actionCreate()? Referente à foto e à tabela Aluno, só tenho mesmo a localização da foto. Não tenho mais nada (pretendo dizer com isto que não tenho tabelas para armazenar fotos). As fotos ficarão na pasta /protected/fotos_Alunos e cada foto terá como nome o numero do CC do respetivo aluno, tipo "12214141.png". Alguém me pode dar uma mãozinha? Obrigado gente!
  7. Bem, vou tentar aqui a minha sorte, espero encontrar alguem que me consiga ajudar, mas sei que (ainda) não são muitos os que por aqui usam Yii Framework. Então é assim, tenho 3 models: Music MusicGenre MusicLink ambos models correspondem a 3 tabelas, sendo a MusicGenre e MusicLink, tabelas auxiliares, que fazem a ligação entre a tabela Music, e as tabelas Genres e Links, respetivamente, isto porque uma Música pode ter varios links de ficheiros, bem como ter varios estilos. no MusicController tenho a action create e update, entre outras no form associado a essas actions, tenho para alem dos campos da tabela/model music mais 2 campos, um campo para escolher os genres musicais, o que existe aqui no forum, quando se cria um topico, e permite meter varias tags, usando o Select2, que envia os ids dos generos por post, num unico indice, em que os valores são separados por virgulas (ex: MusicGenre[genre_id] = 1,7,32,4) tenho depois um outro campo de texto, que corresponde ao link da musica, sendo que este campo pode ser clonado até ter 6 copias, usando o plugin RelCopy, e envia varios links, caso existam, por exemplo: MusicLink[link][0] = http://servidor.com/musica1.mp3, MusicLink[link][1] = http://servidor.com/musica2.mp3 O meu problema está em como guardar estes dados correctamente ? até agora, tenho este codigo: MusicController.php /** * Creates a new model. * If creation is successful, the browser will be redirected to the 'view' page. */ public function actionCreate() { $music = new Music; $genre = new MusicGenre; $link = new MusicLink; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($music); if(isset($_POST['Music']) && isset($_POST['MusicGenre'])) { CActiveForm::validate($genre); CActiveForm::validate($link); $music->attributes=$_POST['Music']; if($music->save()){ foreach(explode(',',$_POST['MusicGenre']['genre_id']) as $gen) { $genre=new MusicGenre; $genre->genre_id = $gen; $genre->music_id = $music->id; if($genre->validate()) $valid[]=true; else $valid[]=false; } foreach($_POST['MusicLink']['links'] as $lnk) { $link=new MusicLink; $link->link = $lnk; $link->music_id = $music->id; $link->host = MusicLink::model()->getHoster($lnk); if($link->validate()) $valid[]=true; else $valid[]=false; } if(!in_array(false,$valid)){ $genre->save(); $link->save(); $this->redirect(array('view','id'=>$music->id)); } } } $this->render('create',array( 'music'=>$music, 'genre'=>$genre, 'link'=>$link, )); } /** * Updates a particular model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id the ID of the model to be updated */ public function actionUpdate($id) { $music = $this->loadModel($id); $genre = MusicGenre::model()->findByAttributes(array('music_id'=>$id));//new MusicGenre; $link = MusicLink::model()->findAll('music_id=:mID',array(':mID'=>$id));; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($music); if(isset($_POST['Music']) && isset($_POST['MusicGenre'])) { $music->attributes=$_POST['Music']; if($music->save()){ foreach(explode(',',$_POST['MusicGenre']['genre_id']) as $gen) { //$genre = MusicGenre::model()->findByAttributes(array('music_id'=>$music->id)); $genre->genre_id = Genre::model()->nameToId($gen); $genre->music_id = $music->id; $valid[]=$genre->save(); } foreach($_POST['MusicLink']['links'] as $lid => $lnk) { $link = MusicLink::model()->find('music_id=:mID AND id=:lID',array(':mID'=>$music->id,':lID'=>$lid)); if($link == null){ $link=new MusicLink; $link->link = $lnk; $link->music_id = $music->id; $link->host = MusicLink::model()->getHoster($lnk); $valid[]=$link->save(); }else if($link->link != $lnk){ $link->link = $lnk; $link->music_id = $music->id; $link->host = MusicLink::model()->getHoster($lnk); $valid[]=$link->save(); } } if(!in_array(false,$valid)) $this->redirect(array('view','id'=>$music->id)); } } $this->render('update',array( 'music'=>$music, 'genre'=>$genre, 'link'=>$link, )); } \music\_form.php <?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array( 'id'=>'music-form', 'type' => 'horizontal', 'customCssErrors' => 'inline', 'enableAjaxValidation'=>false, )); ?> <fieldset> <legend> <?php echo $music->isNewRecord ? Yii::t('b2r','Create Music') : Yii::t('b2r','Update Music') ;?> </legend> <p class="help-block well well-small"><?php echo Yii::t('b2r','Fields with <span class="required">*</span> are required.'); ?> </p> <?php $models = array($music,$genre); if (is_array($link)) foreach ($link as $lnk) $models[] = $lnk; else $models[] = $link; //die(var_dump($models)); ?> <?php echo $form->errorSummary($models); ?> <div class="span6 first"> <?php echo $form->textFieldRow($music,'artist',array('class'=>'span12','maxlength'=>255)); ?> <?php echo $form->textFieldRow($music,'title',array('class'=>'span12','maxlength'=>255)); ?> <?php echo $form->textAreaRow($music,'desc',array('rows'=>3, 'cols'=>60, 'class'=>'span12')); ?> <?php echo $form->select2Row($genre, 'genre_id', array( 'asDropDownList' => false, 'val' => MusicGenre::model()->getMusicGenresNames($music->id), 'options' => array( 'data' => Genre::model()->getGenres(), 'placeholder' => 'Escreva um ou mais categorias, separadas por virgulas', 'containerCssClass' => 'span12', 'tokenSeparators' => array(','), 'multiple'=>true, 'width'=>'none', 'initSelection' => 'js:function (element, callback) { var val = []; $(element.val().split(",")).each(function () { val.push({id: this, text: this}); }); callback(val); }' ) )); ?> <?php echo $form->maskedTextFieldRow($music,'length',array('mask'=>'99:99?:99','htmlOptions'=>array('class'=>'span12','maxlength'=>8)),array('hint'=>Yii::t('b2r','No formato {f1} ou {f2}',array('{f1}'=>'<i class="label label-info">MM:SS</i>','{f2}'=>'<i class="label label-info">HH:MM:SS</i>')))); ?> <?php echo $form->maskedTextFieldRow($music,'size',array('mask'=>'?~~~.~~','charMap'=>array('~'=>'^[0-9]+(\.)?[0-9]{0,2}$'),'placeholder'=>'0','htmlOptions'=>array('class'=>'span12','maxlength'=>8)),array('hint'=>Yii::t('b2r','No formato {f1} ou {f2}',array('{f1}'=>'<i class="label label-info">xx.xx</i>','{f2}'=>'<i class="label label-info">xxx.xx</i>')))); ?> </div> <div class="span6"> <div class="controls"> <ul class="thumbnails"> <li class="span5"> <a class="thumbnail"> <?php echo CHtml::image('/images/capa.gif',Yii::t('b2r','Previsualização da Imagem'), array('id'=>'previewHolder','width'=>'170px','height'=>'170px')); ?> </a> </li> </ul> </div> <?php echo $form->textFieldRow($music,'image',array('class'=>'span8','maxlength'=>255),array('controlCss'=>'skipcopy','append'=>'<a href="#" id="findcover" data-toggle="tooltip" title="'.Yii::t('b2r','Procurar capa no Google').'"><i class="icon-circle-arrow-right"></i></a>')); ?> <?php if ($music->isNewRecord){ echo $form->textFieldRow($link,'link', array('name'=>'MusicLink[links][0]','value'=>'','maxlength'=>255, 'class'=>'span8'), array('controlCss'=>'copy clonable','append'=>'<a id="copylink" href="#" rel=".copy"><i class="icon-plus"></i></a> ') ); }else{ $last = count($link)-1; foreach ($link as $k => $v) die(var_dump($link)); $id = (is_null($v)) ? $k : $v->id; if($k == $last) echo $form->textFieldRow($v,'link', array('name'=>'MusicLink[links]['.$id.']','maxlength'=>255, 'class'=>'span8'), array('controlCss'=>'copy clonable','label'=>'<span class="required">*</span>','append'=>'<a id="copylink" href="#" rel=".copy"><i class="icon-plus"></i></a> ') ); else echo $form->textFieldRow($v,'link', array('name'=>'MusicLink[links]['.$id.']','maxlength'=>255, 'class'=>'span8'), array('controlCss'=>'clonable') ); } ?> <?php $this->widget('ext.jqrelcopy.JQRelcopy',array( //the id of the 'Copy' link in the view, see below. 'id' => 'copylink', //add a icon image tag instead of the text //leave empty to disable removing 'removeText' => '<i class="icon-remove"></i>', //htmlOptions of the remove link 'removeHtmlOptions' => array('style'=>'margin-left:2px;padding:3px 10px;','class'=>'btn btn-small btn-danger'), //options of the plugin, see http://www.andresvidal.com/labs/relcopy.html 'options' => array( //A class to attach to each copy 'copyClass'=>'newcopy', // The number of allowed copies. Default: 0 is unlimited 'limit'=>6, //Option to clear each copies text input fields or textarea 'clearInputs'=>true, //A jQuery selector used to exclude an element and its children 'excludeSelector'=>'.skipcopy', //Additional HTML to attach at the end of each copy. //'append'=>CHtml::tag('span',array('class'=>'hint'),'You can remove this line'), //'jsAfterNewId' => "if(typeof $(this > input).attr('name') !== 'undefined'){ $(this > input).attr('name', $(this > input).attr('name').replace('new', 'new_'+counter));}", ) )); ?> </div> <?php $collapse = $this->beginWidget('bootstrap.widgets.TbCollapse',array('htmlOptions'=>array('class'=>'span12 first'))); ?> <div class="accordion-group"> <div class="accordion-heading"> <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> Avançado </a> </div> <div id="collapseOne" class="accordion-body collapse"> <div class="accordion-inner"> <?php echo $form->textFieldRow($music,'bitrate',array('class'=>'span9')); ?> </div> </div> </div> <?php $this->endWidget(); ?> </fieldset> <div class="form-actions"> <?php $this->widget('bootstrap.widgets.TbButton', array( 'buttonType'=>'submit', 'type'=>'primary', 'label'=>$music->isNewRecord ? Yii::t('b2r','Create') : Yii::t('b2r','Save'), )); ?> </div> <?php $this->endWidget(); ?> <?php Yii::app()->clientScript->registerScript('script', " $('#Music_image').change(function() { $('#previewHolder').attr('src',$(this).val()); }); $('#findcover').click(function() { var q = $('#Music_artist').val(); q += ' - '+$('#Music_title').val(); q += ' cover'; window.open('https://www.google.pt/search?q='+escape(q)+'&tbm=isch', '_blank'); }); " , CClientScript::POS_READY);?> O codigo funciona, mas tem alguns "bugs". imaginando que se tenta enviar o form, a faltar algum campo obrigatorio do model Music e os 2 campos dos models MusicLink e MusicGenre por preencher, ele ai valida os 3 models, e não guarda nenhum. Mas se preencher todos os campos do model Music e deixar por preencher algum campo dos models MusicLink ou MusicGenre, ele ai guarda a musica, e não consigo fazer com que ele valide os outros 2 models alem do MUSIC e que retorne para o form, como é o habitual... não sei que consegui explicar bem, isto ta-me a matar o juiso... Estou a usar a Yii 1.1.14, com o YiiBoilerplate e Yiibooster ficam aqui os links para os plugins usados e mensionados..: http://www.andresvidal.com/labs/relcopy.html http://ivaynberg.github.io/select2/ http://yiibooster.clevertech.biz/
  8. Bem malta, venho pedir aqui ajuda aos gurus que dominam ai a cenas das arrays ora bem, ando para aqui a desenvolver um sistema de comentarios, de forma a permitir respostas a comentario (child comments por assim dizer) Ora, eu ate de certa forma, ja consegui meter isso a dar, o problema é que tou a usar a Yii framework e aquele codigo está um pouco errado... o dito cujo é este: public function commentsRender($row,$level=1) { $command = Yii::app()->db->createCommand() ->setFetchMode(PDO::FETCH_OBJ) ->select('*') ->from('comentario') ->where('parentID = :id', array(':id'=>$row['commentID'])); //isto é apenas o select echo "<li class='comment '>"; echo "<div class='aut'>".$row['userID']."</div>"; echo "<div class='comment-body'>".$row['texto']."</div>"; echo "<div class='timestamp'>".$row['data']."</div>"; echo "<a href='#comment_form' class='reply' id='".$row['commentID']."'>Reply</a>"; $dataReader = $command->query(); //aqui basicamente faz a query if($dataReader->rowCount > 0){ // aqui testa se o comentario tem childs if ($level == 1) $level++; while(($row = $dataReader->read())!==false) { //isto é como o tipico fetch_array echo "<li class='well well-small' style='padding-left: " . (($level - 1) * 20) . "px;'>"; $this->commentsRender($row,$level+1); } echo "</div>"; } echo "</li>"; } (basei-me neste codigo: http://www.technabled.com/2009/06/how-to-multi-level-comments-in-php.html ) nao se aflijam por nao conhecerem a framework, se eu conseguir um exemplo em php puro eu acho que ja me consigo safar! ora isto renderiza uma lista ordenada html do genero: <ul> <li class="comment "> <div class="aut">1</div> <div class="comment-body">comment3</div> <div class="timestamp">1384447010</div><a id="10" class="reply" href="#comment_form">Reply</a> <ul style="padding-left: 20px;"> <li class="comment "> <div class="aut">1</div> <div class="comment-body">comment3.1</div> <div class="timestamp">1384447035</div><a id="11" class="reply" href="#comment_form">Reply</a> <ul style="padding-left: 40px;"> <li class="comment "> <div class="aut">1</div> <div class="comment-body">comment3.1.1</div> <div class="timestamp">1384449678</div><a id="12" class="reply" href="#comment_form">Reply</a> </li> </ul> </li> </ul> </li> <li class="comment "> <div class="aut">1</div> <div class="comment-body">comment2</div> <div class="timestamp">1384433970</div><a id="8" class="reply" href="#comment_form">Reply</a> </li> <li class="comment "> <div class="aut">1</div> <div class="comment-body">comment1</div> <div class="timestamp">1384433970</div><a id="9" class="reply" href="#comment_form">Reply</a> </li> </ul> o problema é que eu em vez de tar a returnar logo com os echos todos, eu queria retornar uma array, do genero: Alguem me pode ajudar? sugerir algum codigo se possivel, ou uns tutoriais... funçoes recursivas é uma area pouco explorada para mim, entao com arrays... da-me a volta a mioleira! espero ter sido suficentemente explicito, e que me consigam ajudar
  9. I-NOZex

    Aceder a pasta comum de uploads

    Boa tarde, tenho um projecto que usa a framework php YII juntamente com o YiiBooster/Boilerplate ( http://yiibooster.clevertech.biz/ ) o projecto fica extruturado da seguinte forma: [app_root] -backend (area de admin) -common (bibliotecas e extensoes comuns) -frontend (area frontal do site) ora, eu pretento fazer um "remote upload" na backend,e até ai tudo bem o meu problema é que queria ter uma pasta partilhada para os uploads, na [app_root] (digamos a pasta public_html) eu consigo fazer upload e ate guardar o link da imagem para a base de dados, mas uma vez que trabalho localmente (win7 32bits + easy php 13.1 V9), ao usar este codigo para gerar o caminho da pasta: realpath(Yii::getPathOfAlias('application').'/../assets/img/') ele gera um caminho do tipo: C:\Programaxao\EasyPHP\data\localweb\livetugayii\assets\img ... (para informação, Yii::getPathOfAlias('webroot') obtem o caminho da pasta backend) e como é obvio, ao tentar carregar a imagem pelo endereço na base de dados, ele tenta carregar: C:\Programaxao\EasyPHP\data\localweb\livetugayii\assets\img\imagem.jpg e nao dá... creio que o problema será só localmente... mas nao tou a ver como resolver... vi a falar algo sobre isto: http://php.net/manual/en/function.symlink.php mas não entendi muito bem o seu uso, e nao sei se funcionará tanto localmente como num servidor linux... Não creio que isto seja problema ao nivel da framework, por isso se nao conhecerem não se preocupem, qualquer outra boilerplate do genero iria gerar um problema igual Obrigado desde já
  10. PF2G

    Paint HTML5 - Guardar desenho numa pasta

    Boa tarde, eu estou a desenvolver uma página web com um espaço para o utilizador pintar e guardar o seu desenho: <section id="crew_info"> <form action="" method="post"> <table><tr> <td> <div id="wPaint" style="position:relative; width:760px; height:350px; margin-top:10px; margin-left:10px; border:solid black 1px;"></div> </td><td> <img id="canvasImage" src="" name="pic" /> <!-- este campo é um copia do desenho feito pelo utilizador (função saveImage())--> </td> </tr><tr> <td colspan="2"> <div style="margin-left:672px;"> <input name="send_pic" type="submit" value="Enviar" style="height:30px; width:100px;" onclick="javascript:saveImage();" /> </div><br/> </td> </tr></table> </form> <script type="text/javascript"> var wp = $("#wPaint").wPaint({ image: "data:image/png;base64,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", drawDown: function(e, mode){ $("#canvasDown").val(this.settings.mode + ": " + e.pageX + ',' + e.pageY); }, drawMove: function(e, mode){ $("#canvasMove").val(this.settings.mode + ": " + e.pageX + ',' + e.pageY); }, drawUp: function(e, mode){ $("#canvasUp").val(this.settings.mode + ": " + e.pageX + ',' + e.pageY); } }).data('_wPaint'); function loadImage_base64() { $("#wPaint").wPaint("image", "data:image/png;base64,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"); } function loadImage_png() { $("#wPaint").wPaint("image", "images/demo/wPaint.png"); } function loadImage_jpg() { $("#wPaint").wPaint("image", "images/demo/wPaint.jpg"); } function saveImage() { var imageData = $("#wPaint").wPaint("image"); $("#canvasImage").attr('src', imageData); $("#canvasImageData").val(imageData); } function clearCanvas() { $("#wPaint").wPaint("clear"); } function upload_image(id) { var imageData = $("#" + id).wPaint("image"); $.ajax({ url: '/wPaint/upload.php', data: {image: imageData}, type: 'post', success: function(resp) { alert('successfully uploaded image!'); } }); } </script> E agora quero guardar o desenho numa pasta, alguem me pode ajudar? Obrigado. Cumprimentos, PF2G
  11. Queria saber que extenções me recomendariam para a gestao de utilizadores (falo de toda a extrutura, desde autenticação, a gestao, perfis, etc) queria tambem saber se é preferivel ter um modulo que comporte isso tudo, ou se é preferivel usar extensoes separadas... por exemplo: modulo: http://www.yiiframework.com/extension/yii-user-management extensoes: http://www.yiiframework.com/extension/yii-user http://www.yiiframework.com/extension/rights http://www.yiiframework.com/extension/mailbox ou se preferirem indicar outras... preciso de umas luzitas nisto, quero saber os prós e contras. eu nao queria usar o modulo muito em parte porque depois fica no endereço tipo: http://projecto.com/index.php/user/user/login se der para meter no endereço so controlador/acção, em vez de modulo/controlador/acção, já era algo bastante bom. Nao venho pedir codigo, apenas opinioes, nem que seja fontes, aceita-se tudo (:
  12. Boas pessoal, Estou aqui um pouco atrapalhado com um projecto, e não sendo PHP a minha linguagem do dia-a-dia estou a ficar sem ideias para como resolver o problema. Estou a usar o Yii Framework, e o meu problema é que só estou a gravar a última linha do CSV na base de dados, e não consigo perceber o que está errado, se me poderem ajudar agradecia imenso. Deixo aqui o código que tenho no controller public function actionImport() { $model = new Produtos; $this->render('import', array('model' => $model) ); if( isset($_FILES['csv_file']) ) { $handle = fopen($_FILES['csv_file']['tmp_name'], 'r'); if ($handle) { while( ($line = fgetcsv($handle, 1000, ";")) != FALSE) { $model = new Produtos; $model->codigo = $line[0]; $model->nome = $line[1]; $model->descricao = $line[2]; $model->stock = $line[3]; $model->data_reposicao = date('Y-m-d', strtotime($line[4]); $model->save(); } } fclose($handle); } }
  13. Viva, Espero que não haja problema em publicar isto aqui. Penso que devem haver pessoas interessadas. O Broculos.net está a oferecer 3 licenças profissionais para o IDE de PHP CodeLobster. O CodeLobster tem plugins para vários CMSs e frameworks, incluindo: - CakePHP plug-in - CodeIgniter plug-in - Drupal plug-in - Facebook plug-in - JQuery plug-in - Joomla plug-in - Smarty plug-in - Symfony plug-in - WordPress plug-in - Yii plug-in - SQL manager Participem e vejam uma análise completa ao IDE em http://www.broculos.net/pt/noticia/oferta-ide-de-php-codelobster-edição-profissional.
  14. Rodrigo Graça

    Validar dados com PHP e jQuery à mistura

    Boa noite a todos! Estou a começar um novo projecto e estava a começar pelo formulário de login e estou com dificuldades na parte de validação dos dados com PHP sem perder os efeitos do jQuery. O original e a funcionar bem mas a validar apenas os dados que lhe são definidos é o seguinte. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Login</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <h1>Login Área de Membros</h1> <div id="container"> <form action="" method="POST" enctype="application/x-www-form-urlencoded"> <fieldset> <input type="text" name="username" value="username" /> <hr /> <input type="password" name="password" value="password" /> <input type="submit" name="submit" value=">" /> </fieldset> </form> </div> <p><span>username: admin</span> <span>password: 12345</span></p> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script> <!-- <script src="js/scripts.js" type="text/javascript"></script> --> <script type="text/javascript" > jQuery.fn.vibrate = function (distancia, repetir, duracao) { var i = 0; var o = distancia / distancia; while (i < repetir) { $(this).animate({ marginLeft: '-' + distancia + 'px' }, duracao); $(this).animate({ marginLeft: distancia }, duracao); i++; if (i == repetir) { $(this).animate({ marginLeft: o }, duracao); } } }; (function(){ var input = $("input:text"); input.focus(function() { value=$(this).val(); $(this).val(""); }); input.blur(function() { if($(this).val()=="") { $(this).val(value); } }); var pass = $("input:password"); pass.focus(function() { pass_value=$(this).val(); $(this).val(""); }); pass.blur(function() { if($(this).val()=="") { $(this).val(pass_value); } }); $("form").submit(function() { if(!(($("input:text").val()=="admin") && ($("input:password").val()=="12345"))){ $("form").vibrate(20, 5, 50); } else { $("span").hide(); $("form").css("margin","auto"); $("input:submit").animate({left: '-=150'}, 700 , function(){ $("input:submit").animate({left: '-=150'},700); $("form").animate({width: '0px'}, 700 , function(){ $("input:submit").hide(); $("form").hide(); $("form").before('<p id="success"></p>'); $("#success").animate({width: '200px', padding: '10px'} ,700 , function () { $("#success").text("Login ok"); }); }); }); } return false; }); })(); </script> </body> </html> O que tentei fazer foi isto mas não funcionou como devido <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Login</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <h1>Login Área de Membros</h1> <div id="container"> <form action="" method="POST" enctype="application/x-www-form-urlencoded"> <fieldset> <input type="text" name="username" value="username" /> <hr /> <input type="password" name="password" value="password" /> <input type="submit" name="submit" value=">" /> </fieldset> </form> </div> <p><span>username: admin</span> <span>password: 12345</span></p> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script> <!-- <script src="js/scripts.js" type="text/javascript"></script> --> <script type="text/javascript" > jQuery.fn.vibrate = function (distancia, repetir, duracao) { var i = 0; var o = distancia / distancia; while (i < repetir) { $(this).animate({ marginLeft: '-' + distancia + 'px' }, duracao); $(this).animate({ marginLeft: distancia }, duracao); i++; if (i == repetir) { $(this).animate({ marginLeft: o }, duracao); } } }; (function(){ var input = $("input:text"); input.focus(function() { value=$(this).val(); $(this).val(""); }); input.blur(function() { if($(this).val()=="") { $(this).val(value); } }); var pass = $("input:password"); pass.focus(function() { pass_value=$(this).val(); $(this).val(""); }); pass.blur(function() { if($(this).val()=="") { $(this).val(pass_value); } }); $("form").submit(function() { <?php if (isset($_POST['submit']) && $_POST['submit'] == ">" ){ if($_POST['username'] == "ola"){ ?> $("form").vibrate(20, 5, 50); <?php }else ?> $("span").hide(); $("form").css("margin","auto"); $("input:submit").animate({left: '-=150'}, 700 , function(){ $("input:submit").animate({left: '-=150'},700); $("form").animate({width: '0px'}, 700 , function(){ $("input:submit").hide(); $("form").hide(); $("form").before('<p id="success"></p>'); $("#success").animate({width: '200px', padding: '10px'} ,700 , function () { $("#success").text("Login ok"); }); }); }); <?php } ?> return false; }); })(); </script> </body> </html> Caso queiram o CSS fica aqui. @font-face { font-family:"museo-sans-1"; src:url(data:font/opentype;base64,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); font-style:normal; font-weight:500; } body { background-color:#34383d; font-family:Arial, Helvetica, sans-serif; } h1 {color:#4f5561; font:50px museo-sans-1,sans-serif; margin:20px 0 0; text-align:center; text-shadow:0 1px 0 rgba(0, 0, 0, 0.5)} #container { position:relative; width:300px; margin:50px auto; } form { position:relative; width:300px; height:100px; background-color:#1c1e21; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; } fieldset {border:none; margin:0; padding:0} input[type="submit"] { position:absolute; left:275px; top:25px; width:50px; height:50px; background-color: #1c1e21; border: 5px solid #34383d; border-radius: 25px; -moz-border-radius: 25px; -webkit-border-radius: 25px; color:#4f5561; } form input[type="text"],form input[type="password"] { width:90%; height:40px; color:#4f5561; background-color: #1c1e21; font-size: 11px; margin:4px 15px; border: 0px; } form input[type="text"]:focus,form input[type="password"]:focus { outline: 0 none; } hr { margin:0px 15px 0px 15px; border: 1px #34383d solid; } #success { width:0px; height:20px; padding:0px; margin:80px auto; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; color:#fff; background-color:#1c1e21; text-align:center; } #container + p { color:#d2dfe0; text-align:center; margin:50px 0 0 0; } #container + p span {display:block} Alguem me pode ajudar e me explicar onde deverei colocar o código PHP para que quando clico ele verifique na base de dados e depois se não for validado faz aquele efeito de abanar se for validado entra. Deixo aqui o link para poderem baixar o código inicial. http://hotfile.com/dl/131563078/72b2b4d/animated-login-form.rar.html
  15. fabiomiguel3

    Yii framework vs Zend framework que diferença abismal!

    Já estava quase a desistir do conceito. Achei o Zend estupidamente dificil... Por exemplo para fazer um simples autoloader deus sabe o que passei... E não é que o Google mais uma vez me seduziu? Escrevi top php frameworks e apareceu me a Yii com muitos votos numa comunidade de programadores. Decidi exprimentar e fiquei... Primeiro a simplicidade foi brutal, depois a rapidez... Em 5 min fiquei a perceber tanto como de zend em 1 mes... e quando andei a explorar la no site do projeto e vi isto... Foi o que faltava para me convencer! Mas que me dizem???
×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.