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 um pequeno problema com meu script php e gostaria da ajuda de vocês.
Acontece que estou elaborando um sistema web e uma das funcionalidades é verificar o privilégio do usuário no mysql e se caso for "4" significa que ele é administrador e portanto requisições enviadas através do menu "Enviar Query" (que também só aparece se o usuário for adm) serão aceitas e processadas. Isso vai ajudar muito quem utiliza o sistema e às vezes precisa deletar coisas e retornar resultados do banco direto pra janela modal assim analisando.
O problema é que não importa o que eu faça apenas tenho a primeira linha do query retornada, nunca mais que isso e gostaria que analisassem meu script. Essa parte é que interessa pra execução. Obs: já tinha colocado apenas o print_r dentro do foreach, mas continua o problema. Obrigado.
function flt($v) {
$v = strip_tags(trim($v));
return $v;
}
function dbq($q, $extra) {
global $con_db;
$query = mysqli_query($con_db, $q) or die(mysqli_error($con_db));
if (isset($extra) and $extra !== '') {
switch ($extra) {
case "return":
return mysqli_fetch_array($query);
break;
case "count":
return mysqli_num_rows($query);
break;
}
} else {
return true;
}
mysqli_close($con_db);
}
if (isset($_REQUEST['acao']) and $_REQUEST['acao'] == 'query') {
if (!isset($_SESSION)) {
session_start();
}
if (isset($_SESSION["pedidos_usuario_login"]) and $_SESSION["pedidos_usuario_login"] !== null and $_SESSION["pedidos_usuario_login"] !== false)
$query = flt($_REQUEST['query']);
$array = explode(';', $query);
$usuario_adm = dbq("select * from usuarios where usuario_login = '{$_SESSION["pedidos_usuario_login"]}' LIMIT 0,1", "return");
$vfp = $usuario_adm["privilegio"];
$extra = flt($_REQUEST["extra"]);
$resultado_return = '';
if ($vfp == 4) {
foreach ($array as $cl) {
$q = dbq($cl, "return");
if ($q == true) {
if ($extra === 'return') {
$resultado_return = $resultado_return . print_r($q);
}
} else {
echo $q;
}
}
} else {
echo 0;
}
print_r($resultado_return);
}>
return mysqli_fetch_array($query);
mysqli_fetch_array não existe nativamente, então vou assumir que ela leia um resultado e retorne ele, este é o problema, você precisará de um laço para ler todos os resultados e depois retornar.
Está certíssimo Eserra!! Muito obrigado, resolvi fazendo assim, porém agora tenho outra questão: Preciso retornar os valores com os nomes das colunas no topo de cada resultado e não estou conseguindo porque os resultados voltam assim...
Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => )
Até consegui usar um método para verificar se a função do MySQL foi "SELECT" e se sim, retorna o nome da tabela do query, coloquei isso em um array chamado $fields mas não funciona o array_combine()
A função ficou assim:
function dbq($q, $extra) {
global $con_db;
$query = mysqli_query($con_db, $q) or die(mysqli_error($con_db));
if (isset($extra) and $extra !== '') {
switch ($extra) {
case "return":
return mysqli_fetch_array($query);
break;
case "returnall":
$s1 = explode(" ", $q);
if ($s1[0] == strtolower('select')) {
$s2 = $s1[3];
$qqq = mysqli_query($con_db, "SHOW COLUMNS FROM $s2") or die(mysqli_error($con_db));
while ($headers = mysqli_fetch_array($qqq)) {
$fields[] = $headers[0];
}
}
while($dados = mysqli_fetch_array($query)){
$dd[] = array_combine($fields,$dados);
};
print_r($dd);
break;
case "count":
return mysqli_num_rows($query);
break;
}
} else {
return true;
}
mysqli_close($con_db);
}Resolvi colocando um foreach($fields as $campos) que é executado em cada laço do while, depois exibindo como $dados[$campos]
Depois coloquei um isset pra verificar se o $dados[$campos] existe, pois o query enviado pode ser "select id from usuarios" e no fields seria pedido para retornar o $dados[$campos] de cada campos sendo que os outros não existem.
Obrigado cara, valeu! :coolio:
return mysqli_fetch_array($query);
mysqli_fetch_array não existe nativamente, então vou assumir que ela leia um resultado e retorne ele, este é o problema, você precisará de um laço para ler todos os resultados e depois retornar.