Ir para conteúdo
Fórum Script Brasil
  • 0

Arrays no mysql


Guest wgarcia

Pergunta

Já postei este tópico anteriormente e não tive nenhuma resposta. Por favor se a pergunta é muito idiota por favor respondam, ou se ninguém sabe responder por favor me informem, ou talvez eu não tenha sido claro. Alguém se manifeste.

Estou quebrando a cabeça aqui... Como faço para passar uma Array como parâmetro para uma consulta de atualização no Mysql?

Meu código é este:

while ($consulta_array = mysql_fetch_array($consulta))

{

$id = $consulta_array['id'];

for ($i=1; $i<=15; $i++)

{

if($_POST['f' . $i . '_' . $id])

{

$f[$i] = '1';

}

else

{

$f[$i] = '0';

}

}

mysql_query("UPDATE processo SET fase1 = '$f[$i]', fase2 = '$f[$i]', fase3 = '$f[$i]', fase4 = '$f[$i]', fase5 = '$f[$i]', fase6 = '$f[$i]', fase7 = '$f[$i]', fase8 = '$f[$i]', fase9 = '$f[$i]', fase10 = '$f[$i]', fase11 = '$f[$i]', fase12 = '$f[$i]', fase13 = '$f[$i]', fase14 = '$f[$i]', fase15 = '$f[$i]' WHERE id = '$id'");

}

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Possível é, mas a tua lógica está errada...

Além do que, $f vem da onde? Pelo menos nessa parte do código ele não está setado.

É um controle de processo de criação de sites, cada domínio que desenvolvemos é dividido em 15 fases, por exemplo: aceitação do contrato, regoistro do domínio, criação da conta no WHM, etc... eu tenho um formulário que envia estas informações:

while($consulta_array = mysql_fetch_array($consulta))
    { 
        echo "<tr><td class='nome' width='200'>" . $consulta_array['dominio'] . "</td>";
        
        for($i=1;$i<=15;$i++)
        {
            if($consulta_array['fase' . $i] ==  '1') {$done = " class='done'"; $check = "<input type='checkbox' [b]name='f" . $i . '_'  . $consulta_array['id'][/b] . "' checked />";} else {$done = " class='notdone'"; $check = "<input type='checkbox' name='f" . $i . '_'  . $consulta_array['id'] . "' />";}
        
            echo "<td" . $done . ">" . $check . "</td>";
        }
                        
        echo "</tr><tr><td class='nome'>Data da execução</td>";
        
        for($i=1;$i<=15;$i++)
        {
            if($consulta_array['fase' . $i] ==  '1')
            {
                $done = " class='done'";
                $data = "<input type='text' name='d" . $i . '_'  . $consulta_array['id'] . "' value='";
                
                if ($consulta_array['data' . $i] != '0000-00-00')
                {
                    $data  .=    date('d/m/y', strtotime($consulta_array['data' . $i])) . "' class='text_done' />";
                }
                else
                {
                    $data = "";
                }
            }
            else
            {
                $done = " class='notdone'"; 
                $data = "<input type='text' name='d" . $i . '_'  . $consulta_array['id'] . "' class='text_notdone' />";
            }
                
            echo "<td" . $done . ">" . $data . "</td>";
        }
                
        echo "</tr><tr><td class='nome'>Responsável pela execução</td>";
        
        for($i=1;$i<=15;$i++)
        {
            if($consulta_array['fase' . $i] ==  '1') {$done = " class='done'"; $nome = "<input type='text' name='n" . $i . '_'  . $consulta_array['id'] . "' value='" . $consulta_array['nome' . $i] . "' class='text_done' />";} else {$done = " class='notdone'"; $nome = "<input type='text' name='n" . $i . '_'  . $consulta_array['id'] . "' class='text_notdone' />";}
                    
            echo "<td" . $done . ">" . $nome . "</td>";
        }
        
        echo "</tr><tr><td colspan='16' style='height: 5px;'>&nbsp;</td></tr>";
    }    ?>
        
                <tr>
                    <td colspan="17" align="center">&nbsp;</td>
                </tr>
                
                <tr>
                    <td colspan="17" align="center"><input type="submit" value="Atualizar" /><input type="button" value="Mostrar todos os processos" onclick="window.location.href ='http://www.indicaweb.com.br/processo/processo_completo.php'" /><br /></td>
                </tr>
Daí vem o csript que passei antes:
$consulta = mysql_query("SELECT id FROM processo WHERE fase1 = '0' OR fase2 = '0' OR fase3 = '0' OR fase4 = '0'
                         OR fase5 = '0' OR fase6 = '0' OR fase7 = '0' OR fase8 = '0'  OR fase9 = '0' OR fase10 = '0' OR fase11 = '0'
                         OR fase12 = '0' OR fase13 = '0' OR fase14 = '0' OR fase15 = '0' ORDER BY data1");

while ($consulta_array = mysql_fetch_array($consulta))
{
    $id = $consulta_array['id'];
    
    for ($i=1; $i<=15; $i++)
    {
        if($_POST['f' . $i . '_' . $id])
        {
            [b]$f[$i] = '1';[/b]        } 
        else
        {
            $f[$i] = '0';
        }
    }
    
    mysql_query("UPDATE processo SET fase1 = '$f[$i]', fase2 = '$f[$i]', fase3 = '$f[$i]', fase4 = '$f[$i]', fase5 = '$f[$i]', fase6 = '$f[$i]', fase7 = '$f[$i]', fase8 = '$f[$i]', fase9 = '$f[$i]', fase10 = '$f[$i]', fase11 = '$f[$i]', fase12 = '$f[$i]', fase13 = '$f[$i]', fase14 = '$f[$i]', fase15 = '$f[$i]'
                 WHERE id = '$id'");

Ela está sendo setada logo após o "IF" : $[$i] = '1';

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'wgarcia'

Arrays no MySQL são, em minha opinião, uma aberração. O correto seria uma tabela normalizada com domínios caracterizados. Mas, se é o que você quer, então trate o atributo que servirá de array, como substrings em uma superstring. A função SUBSTRING te possibilitará resgatar qualquer parte em uma string, seja ela char, varchar, text ou blob. Para achar um valor de forma rápida você deverá criar índices FULLTEXT.

Link para o comentário
Compartilhar em outros sites

  • 0
Possível é, mas a tua lógica está errada...

Além do que, $f vem da onde? Pelo menos nessa parte do código ele não está setado.

Abaixo uma maneira burra de fazer o que eu preciso sem o uso de arrays para passsar os valores para o MySql:

while ($consulta_array = mysql_fetch_array($consulta))
{
    $id = $consulta_array['id'];
    
    if($_POST['f1'. '_' . $id]){$f1 = '1';}else{$f1 = '0';}
    if($_POST['f2'. '_' . $id]){$f2 = '1';}else{$f2 = '0';}
    if($_POST['f3'. '_' . $id]){$f3 = '1';}else{$f3 = '0';}
    if($_POST['f4'. '_' . $id]){$f4 = '1';}else{$f4 = '0';}
    if($_POST['f5'. '_' . $id]){$f5 = '1';}else{$f5 = '0';}
    if($_POST['f6'. '_' . $id]){$f6 = '1';}else{$f6 = '0';}
    if($_POST['f7'. '_' . $id]){$f7 = '1';}else{$f7 = '0';}
    if($_POST['f8'. '_' . $id]){$f8 = '1';}else{$f8 = '0';}
    if($_POST['f9'. '_' . $id]){$f9 = '1';}else{$f9 = '0';}
    if($_POST['f10'. '_' . $id]){$f10 = '1';}else{$f10 = '0';}
    if($_POST['f11'. '_' . $id]){$f11 = '1';}else{$f11 = '0';}
    if($_POST['f12'. '_' . $id]){$f12 = '1';}else{$f12 = '0';}
    if($_POST['f13'. '_' . $id]){$f13 = '1';}else{$f13 = '0';}
    if($_POST['f14'. '_' . $id]){$f14 = '1';}else{$f14 = '0';}
    if($_POST['f15'. '_' . $id]){$f15 = '1';}else{$f15 = '0';}
    
    mysql_query("UPDATE processo SET fase1 = '$f[$i]', fase2 = '$f[$i]', fase3 = '$f[$i]', fase4 = '$f[$i]', fase5 = '$f[$i]', fase6 = '$f[$i]', fase7 = '$f[$i]', fase8 = '$f[$i]', fase9 = '$f[$i]', fase10 = '$f[$i]', fase11 = '$f[$i]', fase12 = '$f[$i]', fase13 = '$f[$i]', fase14 = '$f[$i]', fase15 = '$f[$i]'
                 WHERE id = '$id'");
}

Com base nisto dá pra ter uma idéia do que eu preciso, e isto é um problema que já me deparei em diversas ocasiões, por exemplo quando você passa um $_POST['qualquer_coisa'] diretamente como parâmetro dá um erro, creio que de encapsulamento.

Por favor se alguém puder me ajudar. estou esperando ansiosamente.

Link para o comentário
Compartilhar em outros sites

  • 0
Oi, 'wgarcia'

Arrays no MySQL são, em minha opinião, uma aberração. O correto seria uma tabela normalizada com domínios caracterizados. Mas, se é o que você quer, então trate o atributo que servirá de array, como substrings em uma superstring. A função SUBSTRING te possibilitará resgatar qualquer parte em uma string, seja ela char, varchar, text ou blob. Para achar um valor de forma rápida você deverá criar índices FULLTEXT.

Oi Denis. Muito obrigado pela sua solicitude. Não entendi bem porque é tão estranho passar uma array como parâmetro em uma expressão do MySql. Me parece lógico e simples. Por exemplo: Porque fazer duas expressões:

$parametro = $_POST['parametro'];

mysql_query ("SELECT * for clientes WHERE parametro = '$parametro");

Não seria mais simples:

mysql_query ("SELECT * for clientes WHERE parametro = '$_POST['parametro']);

Dá pra explicar? É possível que você me dê algum exemplo de como ficaria a expressão? Enquanto isto vou pesquisar um pouco sobre Superstrings...

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'wgarcia'

Agora entendi sua necessidade. Você não está falando de armazenamento de arrays e sim de uso de arrays PHP em instruções PHP para unitização em consultas MySQL dentro do PHP. Então esqueça minha consideração quanto ao termo "aberração".

Superstrings em bancos de dados são strings que armazenam dados multivalorados. É raro o uso do termo. Considere como uma string que "guarda" strings.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...