Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gersonab

Retirar a vírgula da ultima linho do WHILE

Recommended Posts

Estou precisando retirar a vírgula do último registro , segue :

 

header('Content-type: text/json');
echo '[';
$separator = "";
$days = 16;
    echo $separator;
    $initTime = date("Y")."-".date("m")."-".date("d")." ".date("H").":00:00";
    //$initTime = date("Y-m-d H:i:00");
	
	$sql = mysql_query("SELECT * FROM tabela") or die (mysql_error());
	$i = 0;
	$sep = '';
	while ($cal = mysql_fetch_assoc($sql)){
		
		echo '  { "date": "'.$cal['col1'].' '.$cal['col2'].'", "title": "'.$cal['col3'].'", "description": "'.$cal['col4'].'" }$XXXXX';
	}
    $separator = ",";

echo ']';

Onde eu coloquei $XXXXX é o caso, se for o último registro , não pode ter vírgula, se não , tem q ter vírgula ali .

 

Agradeço qualquer ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta usar o mysql_num_rows para saber quantos registros retornaram e monta um if/else para saber se é o último ou não.

Compartilhar este post


Link para o post
Compartilhar em outros sites
header('Content-type: text/json');
echo '[';
$separator = "";
$days = 16;
    echo $separator;
    $initTime = date("Y")."-".date("m")."-".date("d")." ".date("H").":00:00";
    //$initTime = date("Y-m-d H:i:00");
	
	$sql = mysql_query("SELECT * FROM tabela") or die (mysql_error());
	$total = mysql_num_rows( $sql );
	$atual = 0;
	while ($cal = mysql_fetch_assoc($sql)){
		if(++$atual == $total){
			$sep = '';
		} else {
			$sep = ',';
		echo ' { "date": "'.$cal['col1'].' '.$cal['col2'].'", "title": "'.$cal['col3'].'", "description": "'.$cal['col4'].'" }"'.$sep.'"';

	}
	}
$separator = ",";
echo ']';

Mantem o erro ......

error getting json

 

este código seria assim o echo :

echo '  { "date": "2013-03-19 17:30:00", "title": "Test Last Year", "description": "Lorem Ipsum dolor set" },';
echo '  { "date": "2013-03-20 17:30:00", "title": "Test Last Year", "description": "Lorem Ipsum dolor set" },';
echo '  { "date": "2013-03-21 17:30:00", "title": "Test Last Year", "description": "Lorem Ipsum dolor set" },';
echo '  { "date": "2013-03-22 17:30:00", "title": "Test Last Year", "description": "Lorem Ipsum dolor set" }';

Vejam que o último echo não tem a vírgula .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use

 

$atual = 1;

E

 

$sep = ($atual == $total)?'':',';

 

Incremente o $atual antes de fechar o laço.

Compartilhar este post


Link para o post
Compartilhar em outros sites
$sql = mysql_query("SELECT * FROM calendar_event") or die (mysql_error());
	$total = mysql_num_rows( $sql );
	while ($cal = mysql_fetch_assoc($sql)){
		$atual = 1;
		$sep = ($atual == $total)?'':',';
echo ' { "date": "'.$cal['col1'].' '.$cal['col2'].'", "title": "'.$cal['col3'].'", "description": "'.$cal['col4'].'" }"'.$sep.'"';

Manteve o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta usar a cabeça, você está criando a variável $atual DENTRO do laço, então o valor dela sempre será 1... crie ela ANTES do laço, dentro do laço (antes de fechar ele) incremente o valor dela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nobre ESerra, desculpe, não estou entendendo o q vc quer dizer com :

 

crie ela ANTES do laço, dentro do laço (antes de fechar ele) incremente o valor dela.

Fiz assim :

$sql = mysql_query("SELECT * FROM calendar_event") or die (mysql_error());
	$total = mysql_num_rows( $sql );
$atual = 1;
$sep = ($atual == $total)?'':',';
	while ($cal = mysql_fetch_assoc($sql)){
		
echo ' { "date": "'.$cal['col1'].' '.$cal['col2'].'", "title": "'.$cal['col3'].'", "description": "'.$cal['col4'].'" }"'.$sep.'"';

e assim :

$sql = mysql_query("SELECT * FROM calendar_event") or die (mysql_error());
	$total = mysql_num_rows( $sql );
$atual = 1;

	while ($cal = mysql_fetch_assoc($sql)){
$sep = ($atual == $total)?'':',';
		
echo ' { "date": "'.$cal['col1'].' '.$cal['col2'].'", "title": "'.$cal['col3'].'", "description": "'.$cal['col4'].'" }"'.$sep.'"';

Continua o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abaixo o código já mastigado, é copiar/colar:

 

 

header('Content-type: text/json');
echo '[';
$separator = "";
$days = 16;
    echo $separator;
    $initTime = date("Y")."-".date("m")."-".date("d")." ".date("H").":00:00";
    //$initTime = date("Y-m-d H:i:00");
    
    $sql = mysql_query("SELECT * FROM tabela") or die (mysql_error());
    $total = mysql_num_rows( $sql );
    $atual = 1;
    while ($cal = mysql_fetch_assoc($sql)){
        $sep = ($atual == $total)?'':',';
        echo ' { "date": "'.$cal['col1'].' '.$cal['col2'].'", "title": "'.$cal['col3'].'", "description": "'.$cal['col4'].'" }"'.$sep.'"';
        $atual++;

    }
$separator = ",";
echo ']';

Compartilhar este post


Link para o post
Compartilhar em outros sites

trim resolve a parada

 

$sql = trim($sql, ',');


Outra coisa: se vai criar um json, porque não joga tudo dentro de um array associativo e no final chama um json_encode?

Compartilhar este post


Link para o post
Compartilhar em outros sites
$sql = mysql_query("SELECT * FROM tabela") or die (mysql_error());
	
	$max = mysql_query("SELECT id FROM tabela ORDER BY id DESC LIMIT 1 ") or die (mysql_error());
	$atual = mysql_fetch_assoc($max);
	$maxid = $atual['id'];	
	while ($cal = mysql_fetch_assoc($sql)){
		$idsql = $cal['id'];
		$col1=$cal['col1'];
		$col2=$cal['col2'];
		$col3=$cal['col3'];
		$col4=$cal['col4'];
		if ($idsql != $maxid){	
		echo ' { "date": "'.$col1.' '.$col2.'", "title": "'.$col3.'", "description": "'.$col4.'" },';
		} else {
		echo ' { "date": "'.$col1.' '.$col2.'", "title": "'.$col3.'", "description": "'.$col4.'" }';
	}
	}

Da forma passada não funcionou, conforme acima descrito sim, porém acredito que tenha uma forma mais correta d se fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

muuuuuuito mais simples...

$sql = 'select id, CONCAT(col1," ",col2) as `date`, col3 as title, col4 as description from tabela order by id desc';
$resultSet = mysql_query($sql) or die(mysql_error());
$resultArray = array();

while($row = mysql_fetch_assoc($resultSet)){
	$resultArray[] = $row;
}

echo json_encode($resultArray);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.