Ir para conteúdo
Fórum Script Brasil

CarlosFreire

Membros
  • Total de itens

    5
  • Registro em

  • Última visita

Tudo que CarlosFreire postou

  1. Oi, brunogm: Tb. sou iniciante em php (embora com boa base em asp), e talvez por isto mesmo não entendi bem sua sql para inserir, principalmente o estoque.estoque e o valor NULL... para quê? Eu simplificaria assim: $sql = mysql_query("INSERT INTO estoque (produto,quantidade, fornecedor, preço) VALUES (‘$produto','$quantidade',’$fornecedor',’$preço')") or die($erro[1]); Outro coisa: vc. colocou um campo “preço” na mySql ou é apenas erro de digitação? Não sei se podemos ter aí a possível causa de algum erro, mas eu, pelo menos, tenho por norma não usar acentuação em nome de campo na base de dados. Espero que ajude mas, repetindo, tb. sou iniciante em php, ok?
  2. Prezados: Meu problema: durante o loop em mail(); fazer com que o navegador responda a cada envio (se sucesso ou não). Algo similar ao response.buffer=false no asp. Juro que li (e creio que entendi) tudo que está no manual do PHP acerca das funções para controle de saída. Utilizei de todas as formas possíveis e imagináveis dentro do loop as funções ob_star(); ob_get_contents() e ob_flush() ou ob_end_flush(); e não consegui o resultado esperado. Tenho as respostas esperadas, sim, mas somente após o fim do loop. Segue o código: if(isset($_POST['submit'])==1){ //inicia o envio $sql = mysql_query("select Nome, email from TesteMail order by Nome limit 3"); //usei este limite para teste, mas normalmente seria sem limite $mailok = 0; $mailfalha = 0; $assunto = $_POST['assunto']; $mensagem = str_replace("\r","<br>",$_POST['mensagem']); //inicia o loop while($result = mysql_fetch_assoc($sql)) { $mail_to = $result['Nome']."<".$result['email'].">"; $txtfalha = "<p>Erro no envio de e-mail para ".$result['Nome']." [".$result['email']."]</p>"; $txtsucesso = "<p>E-mail enviado com sucesso para ".$result['Nome']." [".$result['email']."]</p>”; $nome_from = 'end do meu domínio'; $header = 'MIME-Version: 1.0' . "\r\n"; $header .= "Content-type: text/html; charset=utf-8\n"; $header .= '1\r\nX-MSMail-Priority: High' . "\r\n"; $header .= "From: ".$nome_from."\r\n"; $header .= "Reply-to: end do meu domínio\r\n"; ob_start(); if (mail($mail_to, $assunto, $mensagem, $header)){$mailok= $mailok+1; $var=$txtsucesso; }else{$mailfalha= $mailfalha+1; $var=$txtfalha;} echo $var; ob_get_contents(); $content = ob_get_contents();//utilizei o $content para gravar no bd e verificar posteriormente o valor obtido pelo ob_get_contents() $sql1 = mysql_query("INSERT INTO InfoMail (titulo, texto, content) VALUES ('$assunto','$var','$content')") or die($erro[1]); ob_end_flush(); //também tentei com o ob_flush()... dá igual. } //acaba o loop echo "<p>".$mailok." enviados | ".$mailfalha." não enviados.</p>"; } //fim do if submit Em tempo: li tb. em um blog <http://resolvafacil.blogspot.com/2009/06/o-php-flush-não-descarrega-as.html>: A causa mais comum de problemas com o uso do comando flush() em PHP está no parâmetro output_buffering do seu arquivo php.ini. Ele faz com que sejam retidos os caracteres até que o buffer seja preenchido. Para resolver este problema, simplesmente adicione um comando str_repeat ao seu script, colocando como parâmetros um espaço que se repetirá x vezes, onde x é o valor que está contido na variável output_buffering. Você pode descobrir este valor através da função phpinfo. O valor do output_buffering em meu php.ini estava iconfigurado como "no value" (não habilitado). Pedi ao suporte do meu site que o habilitasse. Fizeram configurando-o como valor "1"(?), mas ressalvando que o limite seria = ao memory_limit do php.ini (no caso, 128M). Ao ver isto, nem tentei o gatilho acima da str_replace por: 1) Citar flush(); e não ob_flush(); 2) Não ter idéia de qual valor deveria colocar como x; 3) Ser um gatilho…:o( Alguma luz?
  3. :blush: Ooops… acho que me candidatei a esporro do Hitler (enquadra tb. quem faz a procura de forma errada?). Mas, ao menos, uma boa conclusão tirei: pensar em como faço atualmente no asp para entender o php ajuda, mas… com um pé atrás, sempre! Apenas eliminei a chamada ao primeiro registro (compartilho este erro com o asp e seu mínimo de 3 linhas para abrir uma consulta). Assim, o while vem corretamente, sem precisar reiniciar a consulta com o data_seek. Acho que vale colocar o resultado “final” da ajuda aqui do post. Um jeito bem fácil e simples de abrir div’s com informações mais detalhadas de um registro usando 5 linhas de javascript básico. O link rel não vem ao caso, é jquery abrindo/fechando outras div’s, chamando página de update, etc.). As div’s chamadas pelo javascript não podem ter display algum no css. //java function verInfo(valor) { document.getElementById(""+valor+"").style.display = "block"; } function fecharInfo(valor) { document.getElementById(""+valor+"").style.display = "none"; } //body <?php If (!empty($Rs2));{ while($result2 = mysql_fetch_array($Rs2)) { ?> <p> <input type="checkbox" name="check[]" value="<?php echo $result2['id']?>" style="margin-right:5px" /> <a href="#" onClick="verInfo('info<?php echo $result2['id'];?>');"><span>+</span></a>&nbsp; <a href="#" id="edita" rel="edita.php?id=<?php echo $result2['id']?>&tabela=Infos"><?php echo $result2['titulo']; ?></a></p> <div id="info<?php echo $result2['id'];?>" style="display:none; margin:5px 0"> <p><?php echo str_replace("\r","<br>",$result2['texto']);?></p> <p><a href="#" onClick="fecharInfo('info<?php echo $result2['id'];?>');"><span>-</span></a></p> </div> <?php }} ?>
  4. Oi ESerra, obrigado pela resposta. Como estou refazendo algumas coisas no código inicial que postei, segue abaixo então outro código, tão simples quanto, de outra página (mas “completo” no que diz respeito ao loop). Vale observar que este comportamento estranho acontece em todas as páginas do site onde tem while. //arquivo de conexão: <? $str = "Conexão com o banco falhou!/Não foi possível selecionar o banco de dados!"; $erro = explode("/",str); $con = mysql_connect(“mysql.meudb”,”meulogin”,”minhasenha”) or die($erro[0]); mysql_select_db(“meudb”, $con) or die($erro[1]); $msg = $_REQUEST["msg"]; mysql_set_charset('utf8’); ?> //cabeçalho php da página <?php require_once('conn.php'); $sql = "SELECT nome, site, ano FROM Clientes WHERE exibir = 'S' order by ano desc"; $Rs = mysql_query($sql,$con) or die(mysql_error()); $row_Rs = mysql_fetch_array($Rs); $totalRows_Rs = mysql_num_rows($Rs); ?> //body <p>&rArr;&nbsp;&nbsp;<?php echo "<a href=.$row_Rs['site]. ">".$row_Rs['nome']."</a>"; ?></p> //linha “gatilho" <?php while($row_Rs = mysql_fetch_array($Rs)) { ?> <p>&rArr;&nbsp;&nbsp;<?php echo "<a href=.$row_Rs['site]. ">".$row_Rs['nome']."</a>"; ?></p> <?php } ?> No banco de dados tenho 15 registros na condição da consulta. Se deixo apenas o while, a consulta retorna 14 registros (omite o primeiro).
  5. :blush: Antes, desculpas pela aparente simplicidade da pergunta. Sou iniciante em php, mas com muito boa experiência em asp, e não consigo ver onde está o erro. Procurei mas não encontrei menção parecida em fórum php algum (Imasters, por exp.). O código é um simples while: no cabeçalho, criando a consulta (a $con está definida em um include): $sql = "select id, nome, site, ano from ClientesT where exibir='S' order by nome"; $Rs1 = mysql_query($sql,$con) or die(mysql_error()); $result1 = mysql_fetch_array($Rs1); $total1 = mysql_num_rows($Rs1); no body, respondendo: <?php while($result1 = mysql_fetch_array($Rs1)) { ?> <p><?php echo "<a href=# onClick=showInfos('".$result1['id']."&tabela=ClientesT')>".$result1['nome']."</a>"; } ?></p> O erro: o loop somente responde a partir do segundo registro, seguindo corretamente até o final. Para corrigir, tive que reescrever a resposta assim: <p><?php echo "<a href=# onClick=showInfos('".$result1['id']."&tabela=ClientesT')>".$result1['nome']."</a>"; ?></p> <?php while($result1 = mysql_fetch_array($Rs1)) { ?> <p><?php echo "<a href=# onClick=showInfos('".$result1['id']."&tabela=ClientesT')>".$result1['nome']."</a>"; } ?></p> Ou seja, chamando “manualmente" o primeiro registro e a seguir o loop. Obviamente, fiquei intrigado, ainda mais se comparando ao do while do asp, onde nunca precisei de “gatilho” parecido. Alguma luz?
×
×
  • Criar Novo...