Didi3D 0 Denunciar post Postado Maio 7, 2014 Amigos bom dia estou percebendo um mal funcionamento em um Foreach mas como ele não apresenta erro não estou conseguindo localizar a lógica do problema vamos pelo array primeiro que chamo de $res Array ( [0] => Array ( [item1] => 7762839492237333716 [item1] => dados [item3] => http://google.com [urls] => http://google.com.br [data] => terça-feira, 6 de maio de 2014 ) [1] => Array ( [item1] => 2850270816776548847 [item2] => dados [item3] => http://yahoo.com.br'>http://yahoo.com.br [urls] => http://yahoo.com [data] => terça-feira, 6 de maio de 2014 ) ) com ele pego os dados jogo em um foreach pra armazena-los em uma variavel $sql para depois gravar no banco o foreach é o seguinte: foreach ($res as $result) { $serial = $result['item1']; $titulo = $result['item2']; $link_l = $result['item3']; $link_2 = $result['urls']; $post = 'blablabla.'; $status = '1'; $data = $result['data']; //data atual $now = date("Y-m-d H:i:s"); $url = 'http://localhost/submit_url.php'; //estes seriam os "inputs" do formulário $campos = array('url' => urlencode($link_2), 'code' => urlencode("5138679238058982"),); //temos que colocar os parâmetros do post no estilo de uma query string foreach($campos as $name => $valor) { $string_campos .= $name . '=' . $valor . '&'; } $string_campos = rtrim($string_campos,'&'); $ch = curl_init(); //configurando as opções da conexão curl curl_setopt($ch,CURLOPT_URL,$url); //este parâmetro diz que queremos resgatar o retorno da requisição curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch,CURLOPT_POST,count($campos)); curl_setopt($ch,CURLOPT_POSTFIELDS,$string_campos); //manda a requisição post $lnk = curl_exec($ch); curl_close($ch); $link_c = strip_tags($lnk); em seguida como mencionado ainda dentro deste foreach vou alocando os dados aqui $sql .= "('$serial','$titulo','$link_l','$link_c','$post','$status','$now','$data'),"; e tudo é gravado no mysql funciona perfeitamente porém na linha do foreach que tem esse código: $campos = array('url' => urlencode($link_2), ele deveria pegar todos os valores da key um a um de cada array começando pelo primerio passando segundo e assim como deveria ser e gerar um outro link em tese funciona pois os links armazenados na variável $link_c são todos diferentes porém percebi que todo se referem apenas a key do primeiro array apenas ou seja se houverem 5 arrays com 5 links como google, yahoo, aol, ig e msn ele gera 5 novos mas todos com base no google e ignora as outras ocorrências por aluma razão que não consegui compreender ele não passa para o próximo valor da key do array abaixo ele fixa no primeiro e nada que eu fiz até agora fez com que ele pega-se os valores da key do arrays abaixo dele não estou entendendo esse mal funcionamento do foreach ou minha lógica pois com as outras keys ele faz o serviço sem problemas... Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Guima 164 Denunciar post Postado Maio 7, 2014 Se bem entendi, a chave 'urls' não deveria ser um array? Compartilhar este post Link para o post Compartilhar em outros sites
rockrgo 138 Denunciar post Postado Maio 7, 2014 Cara onde está o fechamento da chave do primeiro foreach? Compartilhar este post Link para o post Compartilhar em outros sites
Didi3D 0 Denunciar post Postado Maio 7, 2014 Se bem entendi, a chave 'urls' não deveria ser um array? Então ela é uma das keys de cada array e tem um valor mas o foreach só usa o 1º [urls] do primeiro array de cinco keys [item1], [item2], [item3], [urls] e [data] Cara onde está o fechamento da chave do primeiro foreach? ha eu esqueci de por no post aqui mas no script ela existe de boa, tudo ae funciona o problema é que ele não percorre a [urls] dos outros arrays coisa q ele faz perfeitamente com todos os outros [item1], [item2] etc... entendeu =) Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Guima 164 Denunciar post Postado Maio 7, 2014 Cara, se entendi, a estrutura do seu array precisa ser revisada. Explica o que é esse array, ele contém quais informaçõe a respeito do quê? Exemplo: "é uma lista de pedidos que, em cada item, contém uma lista de produtos, onde cada um tem seus respectivos preços de custo e venda". Compartilhar este post Link para o post Compartilhar em outros sites
Didi3D 0 Denunciar post Postado Maio 7, 2014 Claro Lucas vamos lá o Array é criado a partir de dados vindos de um site de empregos nele eu pego o Titulo[item1], Descrição[item2],O site em si[item3] Link da vaga[urls] e data da postagem[data] faço alguns filtros pois esses dados vem por uma classe simple_html_dom.php que vi alguns exemplos de utilização aqui mesmo no Fórum dae o foreach pega ese array já finalizado com os dados de cada vaga por isso que ele fica da forma que esta no primeiro post: Array ( [0] => Array ( [item1] => 7762839492237333716 [item1] => dados [item3] => http://google.com [urls] => http://google.com.br [data] => terça-feira, 6 de maio de 2014 ) [1] => Array ( [item1] => 2850270816776548847 [item2] => dados [item3] => http://yahoo.com.br'>http://yahoo.com.br [urls] => http://yahoo.com [data] => terça-feira, 6 de maio de 2014 ) ) Então eu quero apenas alterar o valor da chave [urls] por outro gerado na função dentro do foreach, tudo funciona porém percebi que o novo link gerado pela função não pega os outras chaves [urls] aqui eu coloquei apenas 2 arrays cada um com seu valor de [urls] certo ? quando o foreach passa tudo é jogado na variável $sql porém se o primeiro array o [urls] = http://google.com.br na próxima vez que ele passar deveria ser [urls] = http://yahoo.com Ae que esta o problema ele fixa no valor do 1º array [urls] = http://google.com.br então se eu tiver 10 arrays todos eles vão com o link gerado errado porque a função ou o foreach não pegam o valor do próximo [urls] do array abaixo acho que ficou melhor de entender né ? mas qualquer dúvida sugestão ou mudança na estrutura fique a vontade ajuda é bem vinda claro hehehe :-) Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Guima 164 Denunciar post Postado Maio 7, 2014 Antes do foreach de $res você inicializa a variável $string_campos? Compartilhar este post Link para o post Compartilhar em outros sites
Didi3D 0 Denunciar post Postado Maio 7, 2014 Não ela só existe nesse único lugar em que aparece mesmo ou seja dentro de outro foreach que gera a nova URL com os dados passados do array no caso o [urls]. Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Guima 164 Denunciar post Postado Maio 7, 2014 Antes do foreach de $campos, tente colocar: $string_campos = ''; Compartilhar este post Link para o post Compartilhar em outros sites
Didi3D 0 Denunciar post Postado Maio 7, 2014 Olha só tenho uma coisa a lhe dizer !! $string_campos = ''; foreach($campos as $name => $valor) { $string_campos .= $name . '=' . $valor . '&'; } Muito Obrigado Lucas !! Funcionou perfeitamente !! agora compreendi que se a cada loop essa variável não estiver vazia ela não aloca o novo valor do próximo [urls] assim como acontece com os demais e a limpeza foi o que faltava !! Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Guima 164 Denunciar post Postado Maio 7, 2014 Na verdade, ele aloca, mas ao final, depois do primeiro valor. Quando você enviava, provavelmente, ele pegava os primeiros valores e ignorava o restante. E se resolveu, marque o tópico como resolvido. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Didi3D 0 Denunciar post Postado Maio 7, 2014 Na verdade, ele aloca, mas ao final, depois do primeiro valor. Quando você enviava, provavelmente, ele pegava os primeiros valores e ignorava o restante. E se resolveu, marque o tópico como resolvido. :thumbsup: É Isso ae ! resolvido !! obrigado mais uma vez Compartilhar este post Link para o post Compartilhar em outros sites