Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, estou com uma dúvida (não me culpem porque originalmente não programo em PHP) e ela é meio que de como funciona as funções no PHP. Estou criando uma página que recebe alguns parâmetros, hora por $_POST, hora por $_GET, hora por $_SESSION, mas essa nem é a questão. Uso esses parâmetros pra controlar alguns "ifs" e apartir disso fazer modificações no banco de dados. No C por exemplo a ordem que é escrito o código garante como vai ser a execução desse código, porém venho tendo um erro curioso, uma gravação no banco de dados que está abaixo da outra esta acontecendo primeiro. Algo que notei é que a de cima está em mais escopos (dentro me mais "ifs" ou funções) do que a de baixo, talvez alguém possa me dizer se isso tem algo a ver e como contorno isso. Lembrando estou em processo de adaptação ao PHP, desculpem pelas minha noobcices.
Pois é, mesmo que ele aceitasse condições que eu não notasse a sequencia de execução era pra ser a como o próprio nome diz uma sequencia. O problema é no trecho de código seguinte:
$latual[$pos][4]=$atual;
update_post_meta( get_the_ID(), 'user'.$login, $latual, $lista );
Ele esta dentro de um else, coloquei um echo dentro desse else pra ver se estava entrando dentro e não imprimia nada, ou seja, não estava executando. Porém a modificação era feita no banco de dados mesmo assim e quando tiro essas duas linha de código a modificação não é feita.
else {
$link = file_get_contents($feedurl);
$link = str_replace('media:', '', $link);
$link = str_replace('itunes:', 'itunes', $link);
$xml = simplexml_load_string($link);
file_put_contents('cache/mem'.$track_id, $link);
$latual[$pos][4]=$atual;
update_post_meta( get_the_ID(), 'user'.$login, $latual, $lista );
}
Mesmo não entrando no else o update no db é feito e mesmo antes da função que está acima dela por ordem de declaração.pode postar tudo? Ainda acho que o problema seja nos if's e elses que vc tem. Se uma condição é aceita no if, ela não executa o comando dentro do else :)
Sim, eu sei. Na verdade o código é muito grande pra eu postar aqui. O erro só acontecia quando a tabela em questão estava vazia, depois disso não acontecia mais. Corrigi com uma gambiarra aqui:
$assinaturas = get_user_meta( $id, 'user'.$login );
$lista = $assinaturas[0];
$latual = $lista;
$pos=0;
foreach ($lista as $key => $val) {
if ($val[3]==$track_id) {
$pos = $key;
}
}
if ($lista[$pos][4]==$atual) {
$xml = simplexml_load_string(file_get_contents('cache/mem'.$track_id));
}
else {
if (!($fazer=='excluir')) {
$link = file_get_contents($feedurl);
$link = str_replace('media:', '', $link);
$link = str_replace('itunes:', 'itunes', $link);
$xml = simplexml_load_string($link);
file_put_contents('cache/mem'.$track_id, $link);
}
if ($pos) {
$latual[$pos][4]=$atual;
update_user_meta( $id, 'user'.$login, $latual, $lista );
}
}
Basicamente ele só faz o update no banco de dados se ele já for definido. Quando eu executava sem essa gambiarra ai ele criava um registro sem indice e dentro dele um array com o indice 4 e um valor. Bom, no mais é isso, consegui resolver sozinho.
Se estiver usando PHP de forma procedural, a ideia é a mesma do C.
O que pode ocorrer é de seus laços de controle estarem aceitando/rejeitando condições que vc não notou :)