Jump to content



SELECT QUERY universal para todas as cronicas [PHP]


Ivan Pires

Recommended Posts

Fala pessoal, blz?

 

Acredito que os nossos problemas com compatibilidade de sites acabaram.

Pensando em criar um script universal que possa usado em um site compativel com todas as revs, eu criei o script abaixo.

Ainda está em fases de teste, porem até agora parece que está perfeito.

 

Estou criando o site ICPNetworks 2.0 e estou usando ele, já testei em todas as revs que eu tenho aqui e até agora em todas funcionou perfeitamente.

 

Caso alguém tiver uma ideia melhor e queira melhorar o script, ficamos todos agradecidos.

 

Segue o script abaixo e alguns exemplos de como usar.

 

http://pastebin.com/NBEmYNdJ

 

Para usar o script é fácil, basta fazer o seguinte:

 

Exemplo #1

<?php
      echo info_table("accounts","accesslevel");
?>
Imprime: access_level (exemplo)

 

Exemplo #2

<?php
      echo info_table("characters","charid");
?>
Imprime: obj_Id (exemplo)

 

Exemplo #3

<?php
      echo info_table("characters","accesslevel");
?>
Imprime: accesslevel (exemplo)

 

 

Agora vamos fazer alguns exemplos em uma query.

 

Exemplo #1

<?php
      $stmt = $conn-> prepare('SELECT * FROM characters WHERE '.info_table("characters","charid").' = "123465"');
		if($stmt-> execute())
			while($row = $stmt->fetch(\PDO::FETCH_ASSOC))
				echo $row["char_name"];
?>
Imprime o nome do personagem

 

Exemplo #2

<?php
      $stmt = $conn-> prepare('SELECT * FROM characters WHERE online = "1" AND '.info_table("characters","accesslevel").' = "0"');
		if($stmt-> execute())
			echo $stmt->rowCount();
?>
Imprime o número de jogadores online excluindo Admins,GMs e personagens banidos.

 

 

Agradecimentos especiais ao @paytaly e @_Dudu_1533 por ajudar a implementar ainda mais a função!

Edited by Ivan Pires

 

 

 

Link to comment
Share on other sites

Ivan, você me pediu uma avaliação no face, vou alterar somente uma linha em sua função.

Na linha 7.

- Alterei o uso da função substr pela preg_match. Dessa forma, poderá trabalhar em case-insensitive (/i), podendo considerar também as possibilidades (AccessLevel, Access_level, Access*)

function info_table($tabela, $coluna) {
    global $conn;
    $stmt = $conn->prepare('SHOW COLUMNS FROM ' . $tabela);
    if ($stmt->execute()) {
        if ($coluna == "accesslevel") {
            while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
                if( preg_match('/access/i', $row["Field"])) 
                    return $row['Field'];
            }
        }
        if ($coluna == "charid") {
            if ($tabela == "characters" || $tabela == "heroes" || $tabela == "olympiad_nobles") {
                while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
                    if ($row["Key"] == "PRI")
                        return $row["Field"];
                }
            }else {
                $i = 1;
                while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
                    if ($i == 1)
                        return $row["Field"];
                    $i++;
                }
            }
        }
    }
    return null;
}
Edited by _Dudu_1533

logo.png

Link to comment
Share on other sites

  • 3 weeks later...

Só uma coisinha: na tua função, tem uma chamada de variável global (que é a conexão com o banco);

global $conn;

Se alguém não conseguir usar ou der warning nessa linha, basta criar uma conexão válida do PDO e associar à variável $conn;

 

Ideia bacana, só achei válido comentar isso pois tem gente que possa passar por isso (:

Edited by mend3
8cp1z10.png
Link to comment
Share on other sites

  • 1 month later...

gambira d+ , nem filtra as string , só o pdo basicão não evita sqli , outra coisa existe forma mas organizada de ser criar um CRUD.

Gambiarra onde?

Não existe a necessidade de filtrar as strings, isso é pra ser usado pelo desenvolvedor do site de forma direta, não existe relação nenhuma com o "client". Então, se for usada da forma correta não tem nenhuma possibilidade de sqli.

Se você tem alguma forma melhor, poste! Até então essa minha função é a melhor que já foi feita até hoje.

Na minha opinião, você não sabe pra que serve e nem sabe o que está falando.

Por favor, prove que eu estou errado.

 

Abraço.

Edited by Ivan Pires

 

 

 

Link to comment
Share on other sites

Ivan, quando eu estava aprendendo a aprender programação web voce postou um script de paginação que mesmo hoje que tenho a capacidade de criar um eu ainda utilizo ele, pois foi muito bem feito e nunca tive problemas.

 

E mais uma vez venho aprender um pouco mais contigo. Parabéns pelo post, pois tem muitas pessoas que aprendem e não ensinam. Ainda mais quando se trata de PDO. Obrigado por compartilhar sou programador web e sei da importancia de termos um bom site, e agora um site que de surporte a all cronicas

 

Abraços

R2d3uef.png

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Join now

    Be part of the largest and oldest communities about Lineage2 in Latin America.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.