Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, eu estou me matando aqui com um problema super primário, que não sei o que ocorre que não funciona.
Vejam meu código:
<?php
//Exemplo: eu acesso a página www.site.com.br/esse_arquivo.php?id_item=2
$id_item = $_GET['id_item'];
$sintaxe = mysql_query('SELECT id_usuario, item FROM itens WHERE id_itens = ' . $id_item);
$registro=mysql_fetch_array($sintaxe);
$sintaxe2 = mysql_query("SELECT * FROM usuarios ORDER BY nome");
?>
<select name="itens" id="itens">
<option value=''>Selecione um cliente...</option>
<?php while($registro2=mysql_fetch_array($sintaxe2)) {
?>
<option value="<?=$registro2['id_usuario']?>" checked="<?php if ($registro2['id_usuario'] == $registro['id_usuario']) { echo 'checked'; } ?>"><?=$registro2['nome']?></option>
<?php } ?>
</select>
Já fiz o teste do echo e vejam o resultado:
>
echo $registro2['id_usuario']
// exibe: 2
echo $registro['id_usuario']
// exibe: 2
Logo, se 2 = 2, por que não exibe o "checked"?
E pior que se eu digitar algo como:
if ($registro2['id_usuario'] == 2) { echo 'checked'; }
ou
if (2 == $registro['id_usuario']) { echo 'checked'; }
Daí funciona e exibe o checked.
Alguém sabe por que está acontecendo isso?
>
Option não é checked, é selected.
Carlos Eduardo
Ah sim, realmente, eu confundi no meu exemplo, digitei rapidamente.
Mas mesmo assim, não imprime no html a tag selected. Por isso meu problema deve ser no php, só não sei porque.
Rode assim:
<?php
error_reporting( E_ALL | E_STRICT );
ini_set('display_errors', TRUE);
//Exemplo: eu acesso a página www.site.com.br/esse_arquivo.php?id_item=2
$id_item = $_GET['id_item'];
$sql = mysql_query('SELECT id_usuario, item FROM itens WHERE id_itens = ' . $id_item) or die( mysql_error() );
$registro = mysql_fetch_assoc($sql);
$sql2 = mysql_query("SELECT id_usuario, nome FROM usuarios ORDER BY nome") or die( mysql_error() );
?>
<select name="itens">
<option value="">Selecione um cliente...</option>
<?php
while( $registro2 = mysql_fetch_assoc($sql2) )
{
$selected = ( $registro2['id_usuario']==$registro['id_usuario'] ) ? ' selected="selected"' : '';
echo '<option value="'.$registro2['id_usuario'].'"'.$selected.'>'.$registro2['nome'].'</option>';
}
?>
</select>Muito obrigado William Bruno, agora deu certo.
Mas eu só gostaria de entender, por que funciona ao utilizar mysql_fetch_assoc ao invés do mysql_fetch_array?
Eu dei uma pesquisada no manual do php e descobri que mysql_fetch_array($result, MYSQL_ASSOC) é equivalente ao mysql_fetch_assoc - mas só não consegui entender a diferença.
http://br.php.net/manual/pt_BR/function.mysql-fetch-assoc.php
http://br.php.net/manual/pt_BR/function.mysql-fetch-array.php
E muito obrigado mesmo William.
fetch_array devolve tanto associativo como numerico
Como você não precisa de indices numericos, o fetch_assoc é mais rápido para você.
E não foi só isso que alterei. Olhe com cuidado.
Option não é checked, é selected.
Carlos Eduardo