Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá
Desenvolvi esse código para que seleciona o checkbox do formulario na categoria cadastrada vindo de um mysql, mais ele fica repetindo, teria alguma solução para que se imiprimisse apenas categorias distintas.
Teria que imprimi assim
[x] Bebidas
[ ] DJ
[x] Decoração
[ ] Salgados doces
Está imprimindo assim
[x] Bebidas
[ ] Bebidas
[ ] DJ
[ ] DJ
[x] Decoração
[ ] Decoração
[ ] Salgados doces
[ ] Salgados doces
<?php
$servername = "localhost";
$username = "xxx";
$password = "xxx";
$dbname = "xxxx";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset('utf8');if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT DISTINCT categoria FROM categorias_fornecedores";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
$i=-1;
while($row = $result->fetch_assoc()) {
$i++;
foreach ($_POST['categoria'] as $value) {
if ($row["categoria"] == $value) {
$checked = 'checked';
} else {
$checked = '';
}
echo "$i".'<input type=checkbox value="' . $row["categoria"] . '" '.$checked.'>' . $row["categoria"] . '';
}
} echo "0 rerults";
}
?>Deu certo obrigado pela dica, segue o código funcionando pra quem precisar
<?php
$servername = "localhost";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset('utf8');if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT DISTINCT categoria FROM categorias_fornecedores";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
$i=-1;
while($row = $result->fetch_assoc()){
$checked="";
if(in_array($row['categoria'],$_POST["categoria"])){
$checked = "checked";
}
$i++;
echo'<input type=checkbox value="' . $row["categoria"] . '" '.$checked.'>' . $row["categoria"] . ' ';
} echo "0 rerults";
}
?>Estou com outra dúvida relacionado a isso.
Acima eh quando vem de um formulario com metodo $_POST[]
Quando vem de uma consulta sql que nao estou coneseguindo, estou fazeno assim:
$sql3 = "SELECT DISTINCT categoria FROM categorias_fornecedores";
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {
// output data of each row
$i=-1;
$sql2 = "SELECT DISTINCT categoria_fornecedor FROM fornecedores_categoria WHERE id_fornecedor=".$row['id']."";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
// output data of each row
$i=-1;
while($row2 = $result2->fetch_assoc()){
$checked="";
if(in_array($row2['categoria_fornecedor'],$_POST["categoria_fornecedor"])){
$checked = "checked";
}
$i++;
$categoriaArray = array ($row2["categoria_fornecedor"]) ;
foreach($categoriaArray as $value){
echo"<div style=\"width:140px; background-color:#e0dede; float:left; padding:10px; margin:5px;\">" . $row3["categoria"] ."<b>".$value . "</b></div> ";
}
while($row3 = $result3->fetch_assoc()){
$checked="";
if(in_array($row3['categoria'],$categoriaArray)){
$checked = "checked";
}
$i++;
echo'<input type=checkbox value="' . $row3["categoria"] . '" '.$checked.'>' . $row3["categoria"] . ' ';
}
echo "<br>";
}
}
}
Mais só seleciona o checkbox o primeiro item do array.
O que tenho que fazer para selecionar os outros intens quando ofr mais de um item para deixar selecionando?
Tá faltando um pouco de lógica nesse seu script... você está aninhando dois laços e não entende o motivo de estar ocorrendo essa repetição?
Solução óbvia:
Monte um array contendo os itens que deverão ser "checked", rode o laço para imprimir as categorias, dentro do laço, com in_array verifique se o id/informação está no array, se estiver, marque como checked.