Jump to content
Sign in to follow this  
tatiana schyneider

Problema com while e select

Recommended Posts

Ola gente,

Estou com um problema num código que ta complicado :(

Tenho um trecho em php assim:

$contador = 1;
while( $contador <= 10){
$sql    = "SELECT * FROM estoqueatual  WHERE id = '$contador')";
result = mysql_query($sql, $conexao);
..
}

..

Ou seja, ele vai imprimir para mim, enquanto os registro forem menor que 10..ate ai funciona

Problema: O campo ID, tem numeração assim: 1,2,4,7,8,9

Ou seja, ele nao imprimi 3,5,6 ..etc logo, em vez dele imprimir os 10, ele imprimir os que estao com valores e o resto mostra em branco, quando ele deveria continuar imprimindo os outros, ate´ dar os 10 registros..(contados)

Alguem sabe como contorno isso?

obrigada

Share this post


Link to post
Share on other sites

primeiramente abandonar uso de mysql_* já está descontinuado. use mysqli_* ou pdo, obs: nao é só acrescentar "i" no final. Segue tutorial de um dos moderadores do imaster : http://rberaldo.com.br/como-atualizar-php-mysql-mysqli/

$host = 'localhost';
$user = 'usuario';
$pass = 'senha';
$db = 'nome_do_banco';
 
// conexão e seleção do banco de dados
$con = mysqlI_connect($host, $user, $pass, $db);
 
// executa a consulta
$sql = "SELECT * FROM funcionarios ORDER BY nome";
$res = mysqli_query($con, $sql);
 
// conta o número de registros
$total = mysqli_num_rows($res);
 
echo "<p>Total de Resultados: " . $total . "</p>";
 
// loop pelos registros
while ($f = mysqli_fetch_array($res))
{
echo "<p>" . $f['nome'] . " | " .
$f['email'] . " | " .
$f['salario'] . " | " .
date('d/m/Y', strtotime($f['nascimento'])) . "</p>";
}
 
// fecha a conexão
mysqli_close($con);
 

Esse código ta no blog do beraldo ADM, ele já de mostra como dar um select e printar os campos, cada $f['valor'] esse valor é uma coluna de uma tabela do banco de dados, a própria descrição em portugues na documentação do PHP explica bem o que faz aquela função dentro do while mysqli_fetch_array(onde a magica acontece) segue explicação "Retorna uma matriz que corresponde a linha obtida ou NULL se não houverem mais linhas para o conjunto deresultados representado pelo parâmetro result.

mysqli_fetch_array() é uma versão extendida da função mysqli_fetch_row(). Alem de guardar os dados em índices numéricos na matriz do resultado, a função mysqli_fetch_array() pode também guardar os dados em índices associativos, usando os nomes dos campos do conjunto de resultado como chave."

  • +1 1

Share this post


Link to post
Share on other sites

primeiramente abandonar uso de mysql_* já está descontinuado. use mysqli_* ou pdo, obs: nao é só acrescentar "i" no final. Segue tutorial de um dos moderadores do imaster : http://rberaldo.com.br/como-atualizar-php-mysql-mysqli/

$host = 'localhost';
$user = 'usuario';
$pass = 'senha';
$db = 'nome_do_banco';
 
// conexão e seleção do banco de dados
$con = mysqlI_connect($host, $user, $pass, $db);
 
// executa a consulta
$sql = "SELECT * FROM funcionarios ORDER BY nome";
$res = mysqli_query($con, $sql);
 
// conta o número de registros
$total = mysqli_num_rows($res);
 
echo "<p>Total de Resultados: " . $total . "</p>";
 
// loop pelos registros
while ($f = mysqli_fetch_array($res))
{
echo "<p>" . $f['nome'] . " | " .
$f['email'] . " | " .
$f['salario'] . " | " .
date('d/m/Y', strtotime($f['nascimento'])) . "</p>";
}
 
// fecha a conexão
mysqli_close($con);
 

Esse código ta no blog do beraldo ADM, ele já de mostra como dar um select e printar os campos, cada $f['valor'] esse valor é uma coluna de uma tabela do banco de dados, a própria descrição em portugues na documentação do PHP explica bem o que faz aquela função dentro do while mysqli_fetch_array(onde a magica acontece) segue explicação "Retorna uma matriz que corresponde a linha obtida ou NULL se não houverem mais linhas para o conjunto deresultados representado pelo parâmetro result.

mysqli_fetch_array() é uma versão extendida da função mysqli_fetch_row(). Alem de guardar os dados em índices numéricos na matriz do resultado, a função mysqli_fetch_array() pode também guardar os dados em índices associativos, usando os nomes dos campos do conjunto de resultado como chave."

Vou fazer os testes e te falo Junior,

Muito agradecida pelas explicações e links de estudo :)

Share this post


Link to post
Share on other sites

Foi nada, é nois, manda o whats q ta tudo certo hsauhusasahu, brinks..bons estudos.(y)

Vocês homens sao fogo heim rs

Tentei incrementar no meu codigo, mas mesmo assim, aparece uns registros em branco e ele conta errado :(

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By Keber_Crato
      Boa noite galera!!  estou com dificuldades em conseguir o somatório de de dois campos de uma tabela e o somatório de um campo de outra tabela,
      segue assim:
      Tenho uma tabela chamada CID_TITULAR  e outra CID_COMPOSICAO. a tabela CID_TITULAR recebe os cadastro de um programa social e a tabela CID_COMPOSICAO o cadastros dos dependentes (filhos, parentes) TITULAR_COD = COMPOSICAO_COD_TITULAR (chave de ligação)
      tenho dois campos na CID_TITULAR de valores, são eles: TITULAR_RENDA e TITULAR_RENDA_MENSAL e na outra tabela CID_COMPOSICAO tenho um campo de valor COMPOSICAO_RENDA
      estão povoado assim:
       
      Na tabela CID_TITULAR nos campos TITULAR_RENDA (R$ 10.00) e TITULAR_RENDA_MENSAL (R$ 10.00) e na tabela CID_COMPOSICAO no campo COMPOSICAO_RENDA tenho 3 registros com os valores R$ 300.00, R$ 200.00 e R$ 100.00
      GOSTARIA QUE A SELEÇÃO FOSSE O VALOR DOS DOIS CAMPOS DA TABELA CID_TITULAR + O CAMPO DA OUTRA TABELA CID_COMPOSICAO
       
      NO CASO O SOMATÓRIO CORRETO SERIA R$ 620,00
      10,00 no campo TITULAR_RENDA
      10,00 no campo TITULAR_RENDA_MENSAL
      300,00 NO 1º REGISTRO no campo COMPOSICAO_RENDA
      200,00 NO 2º REGISTRO no campo COMPOSICAO_RENDA
      100,00 NO 3º REGISTRO no campo COMPOSICAO_RENDA
       
      TOTALIZANDO R$ 620,00
      O PROBLEMA É:
      Quando faço a seleção com inner join a resposta é R$ 660,00 e não 620,00. a seleção triplica o valor da primeira tabela devido ter três registros na tabela CID_COMPOSICAO
       
      TABELA CID_TITULAR
      CREATE TABLE `cid_titular` (
        `titular_cod` int(11) NOT NULL AUTO_INCREMENT,
        `titular_renda` float(10,2) DEFAULT NULL,
        `titular_renda_mensal` float(10,2) DEFAULT NULL,
        PRIMARY KEY (`titular_cod`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
       
      TABELA CID_COMPOSICAO
      CREATE TABLE `cid_composicao` (
        `composicao_cod` int(11) NOT NULL AUTO_INCREMENT,
        `composicao_cod_titular` int(11) DEFAULT NULL,
        `composicao_renda` float(10,2) DEFAULT NULL,
        PRIMARY KEY (`composicao_cod`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
       
       
      GOSTARIA MUITO DE AJUDA GALERA. OBRIGADO!!!!
       

    • By malufla79
      Boa tarde, estou com probleminha no phpmailer, o código abaixo funciona corretamente quando consigo enviar para um único e-mail, mas quando coloco a opção todos, ele só manda apenas para primeiro e-mail e não apresenta nenhum erro. Poderia me dar uma ajudinha? Obrigada
       
      Controle
      if ($_POST['filtro'] == 'todos') { // essa consulta pego a lista de e-mails cadastrado no meu banco de dados $usuarios->consultar("select * from mala_email"); $linha = $usuarios->Linha; $rs = $usuarios->Result; } if ($_POST['filtro'] == 'todos') { for ($i=0; $i<$linha; $i++) { $email = $rs[$i]['email']; $mensagem = $_POST['editor']; $util->EnviarEmaiLivre($email, utf8_decode($_POST['assunto']), $mensagem); } } else { $mensagem = $_POST['editor']; $util->EnviarEmaiLivre($_POST['email'], utf8_decode($_POST['assunto']), $mensagem); } Função
      function EnviarEmaiLivre($email, $assunto, $mensagem) { date_default_timezone_set('Etc/UTC'); require 'phpmailer/PHPMailerAutoload.php'; $hostSmtp = "mail.domino.com.br"; $smtpUser = "email@email.com.br"; $senhaSmtp = "********"; $mensagem = ' <p><img src="http://www.dominio.com.br/images/logodolugar.png" alt="Logo do Lugar" width="550"></p> '.$mensagem; //Create a new PHPMailer instance $mail = new PHPMailer; //Tell PHPMailer to use SMTP $mail->isSMTP(); //Enable SMTP debugging // 0 = off (for production use) // 1 = client messages // 2 = client and server messages $mail->SMTPDebug = 0; //Ask for HTML-friendly debug output $mail->Debugoutput = 'html'; //Set the hostname of the mail server $mail->Host = $hostSmtp; // use // if your network does not support SMTP over IPv6 //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission $mail->Port = 587; //Set the encryption system to use - ssl (deprecated) or tls $mail->SMTPSecure = 'tsl'; //Whether to use SMTP authentication $mail->SMTPAuth = true; //Username to use for SMTP authentication - use full email address for gmail $mail->Username = $smtpUser; //Password to use for SMTP authentication $mail->Password = $senhaSmtp; //Set who the message is to be sent from $mail->setFrom('email@email.com.br', 'E-mail do Lugar'); //Set who the message is to be sent to $mail->addAddress($email); //Set the subject line $mail->Subject = $assunto; //Replace the plain text body with one created manually $mail->Body = $mensagem; $mail->isHTML(true); if ($conteudoArquivo != '' && $arquivo != '') { //Attach an image file $mail->addAttachment('phpmailer/images/phpmailer_mini.png'); //Read an HTML message body from an external file, convert referenced images to embedded, //convert HTML into a basic plain-text alternative body $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__)); } if (!$mail->send()) { $retorno = false; } else { $retorno = true; } }  
       
    • By Leandro Volanick
      Boa tarde pessoal.
       
      Gostaria de uma ajuda em uma consulta sql, onde quero agrupar os todos produtos comprados pelo mesmo CPF, dentro de uma array. 
       
      Segue o que estou usando:
      $data=mysqli_query($mysqli, "SELECT xml.id, xml.xProd as produto, prod.id as iddoproduto, GROUP_CONCAT( prod.xProd ) FROM produtos AS prod LEFT JOIN xml as xml ON xml.xProd = prod.xProd GROUP BY xml.CPFdest"); while($info=mysqli_fetch_array($data)) echo '['.$info['iddoproduto'].'],'; No momento, o codigo está trazendo apenas 1 produto, quero que ele printe todos produtos que o CPFdest já comprou.
       
       
    • By Vítor Gonçalves
      Boa Tarde, gostaria se alguém poderia me ajudar!
      tenho um sistema desktop que é validado a cada 6 meses, quando termina essa validade ele pedi para renovar!
      - desejo criar um script em PHP  com a seguinte função:
      -pegar a senha gerada no sistema e enviar para o servidor web( hostinger server-sql) via php
      - o servidor gera e mostra uma contra senha  para ser copiada de volta.
      - ao colar a contra senha no campo "nova licença" no meu programa, ele compara com a que tá no banco de dados na hostinger se bate a mesma e libera o uso.
       
      - já vi isso em outro sistema mas não tive acesso aos scripts para ver como funciona.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.