Nützliche PHP-Codeschnipsel

  • Ich hab mal wieder ne kleine Klasse mit Funktionen die sich mit MySQL Beschäftigt(sowie einen kleinen Hash mit encode & decode Funktion), nichts großes aber denke nützlich für den ein oder anderen:


    PHP
    <?php/*---- MySQL Klasse by G-Mac_x3---- 13.04.2013---- Freie Nutzung*/error_reporting(E_ALL);class Datenbank{	protected $db;	protected $querysend;	protected $vari;	public $hashv;	public function connect($host,$user,$password,$database)		{		$this->db = mysql_connect($host, $user, $password);		if($this->db == true)		{			if(mysql_select_db($database, $this->db) == true)			{				return true;			}			else			{				return "Die Datenbank konnte nicht gewaehlt werden";				}		}		else		{			return "Es konnte keine Verbindung zur Datenbank aufgebaut werden";		}	}	public function sendQuery($query)	{		$this->querysend = @mysql_query($query, $this->db);		if($this->querysend == true)		{			return $this->querysend;		}		else		{ 			return mysql_error();		}	}	public function fetchArray($query = null)	{		if($query != null) $this->querysend = $query;		return mysql_fetch_array($this->querysend);		}	public function numRows($query = null)	{		if($query != null) $this->querysend = $query;		return mysql_num_rows($this->querysend);	}	public function absichern($input)	{		$this->vari = strip_tags($input);		$this->vari = mysql_real_escape_string($this->vari);		return $this->vari;	}	public function gmachash_encode($input)	{		$this->hashv = strrev($input);		$this->hashv = base64_encode($this->hashv);		$this->hashv = strrev($this->hashv);		$this->hashv = base64_encode($this->hashv);		return htmlspecialchars($this->hashv);			}	public function gmachash_decode($input)	{		$this->hashv = htmlspecialchars_decode($input);				$this->hashv = base64_decode($this->hashv);		$this->hashv = strrev($this->hashv);		$this->hashv = base64_decode($this->hashv);		return strrev($this->hashv);			}}?>


    Möglichkeiten des Einsetzens:


    // Edit: der Code unten gibt übrigens folgendes aus:

    Code
    10
    PT1BUnA1MlppNDJj
    Ding"ns
    alert(\'BlaBlaBla\');
    1


    MfG

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Ein kleiner WCF Passwort-Encoder für Symfony2, falls es irgendwer braucht.



    Code
    parameters:
        password_encryption: sha1
        password_salt_position: before
        password_before_salting: ON
        password_salting: ON


    Code
    services:    
        wcf.password.encoder:
            class: Base\CoreBundle\Service\WCFPasswordEncoder
            arguments: [ %password_encryption%, %password_salt_position%, %password_before_salting%, %password_salting% ]


    Es ist möglich, den Encoder wie die Encryption im WCF anzupassen, das heißt ihr müsst euch keine Gedanken machen, falls ihr md5 statt sha1 oder keine Salts nutzt oder die Konfiguration dafür sonst wie angepasst habt (die Konfiguration dafür muss in der Service-Definition angegeben werden, natürlich kann man, wie im Beispiel angegeben, auch Parameter dafür verwenden). Das obige Beispiel bezieht sich auf die Standardkonfiguration.


    ENCRYPTION_ENABLE_SALTING entspricht $salting / password_salting
    ENCRYPTION_ENCRYPT_BEFORE_SALTING entspricht $beforeSalting / password_before_salting
    ENCRYPTION_METHOD entspricht $encryption / password_encryption
    ENCRYPTION_SALT_POSITION entspricht $position / password_salt_position


    Teile des Encoders sind aus dem WCF übernommen und angepasst.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

    Einmal editiert, zuletzt von dead () aus folgendem Grund: Codingstyle

  • So ich hab hier nun auch noch mals eine kleine Klasse für euch. Vorweg: Die Klasse so wird nur bis PHP Version 5.5.0 funktionieren! Da ab dieser PHP Version einige PHPFunktionen die in der Klasse genutzt werden veraltet sind.


    Und wie sollte es anders sein :D Natürlich ist es eine MySQL Klasse. Die Klasse ist stark verbessert sowie erweitert worden (im Gegensatz zu der 2 Posts über diesem hier).
    [WICHTIG!] Die Klasse gibt ihrer Errors selber aus(Ich habs mir so zur besseren Übersichtlichkeit in meinem momentanen Ausbildungsprojekt gemacht). Diese Errors sind vom Design her an Bootstrap 3.0 angepasst(Klick zu Bootstrap 3.0)[/WICHTIG]
    Vor jeder Funktion befindet sich eine kleine Dokumentation zur Funktion. Anwendungsbeispiele kommen dann etwas weiter drunter. Erstmal im folgenden Expander aber die Klasse selber:


    // Edit habe etwas wichtiges Vergessen! Siehe __construct->require_once

    PHP
    <?php#	MySQL Klasse(ohne die Läuft nix)#	03.09.2013# 	Copyright Lukas Kämmerling aka G-Mac_x3class sql{	protected $connection;	protected $connect;	private $host;	private $user;	private $password;	private $database;	private $lastquery;	private $errorgiv;	public $exception;	/*	#	_construct	#	Stellt Verbindung zur DB bei Objekterstellung her	#	@params MySQLHost 	MySQLuser 	MySQLpasswort	MySQLDatabase	#	@return 	*/	public function __construct(){		$mysqlhost = $mysqluser = $mysqlpassword = $mysqldatabase = '';		require_once("/config.php");//Hier gebt ihr die MySQL Daten in einer Datei an. Die Var Namen sollten = denen über dieser Zeile sein		$this->host = $mysqlhost;		$this->user = $mysqluser;		$this->password = $mysqlpassword;		$this->database = $mysqldatabase;		$this->errorgiv = FALSE;		$this->connect();	}	/*	#	__destruct	#	Beendet die Verbindung zur Datenbank bei Objektzerstörung	#	@params	#	@return	*/	public function __destruct(){		$this->close();	}	/*	# 	MySQL connect	#	Stellt Verbindung zur Datenbank her	#	@params	#	@return	*/	public function connect(){		$this->connect = mysql_connect($this->host,$this->user,$this->password);		if ($this->connect == false) {			$this->mysqlerror(mysql_error(),mysql_errno());					}else{			$this->connection = mysql_select_db($this->database,$this->connect);			if ($this->connection == false) {				$this->mysqlerror(mysql_error(),mysql_errno());			}		}	}	/*	#	Mysql query	#	@params MySQL Query (Ein MySQL Query)	#	@return resource Kennung	*/	public function query($query){		$this->lastquery = mysql_query($query);		if ($this->lastquery == false) {			$this->mysqlerror(mysql_error(),mysql_errno());		}else{			return ($this->lastquery);		}	}	/*	#	MySQL fetch	#	@params $art(Ob fetch_array,fetch_assoc oder fetch_object) $query(die ResourceKennung von query)	#	@return je nach fetch art	#	*/	public function fetch($art, $query){		switch($art) {			case "array":				return mysql_fetch_array($query);			case "assoc":				return mysql_fetch_assoc($query);			case "object":				return mysql_fetch_object($query);			case "field":				return mysql_fetch_field($query);			case "lengths":				return mysql_fetch_lengths($query);			case "row":				return mysql_fetch_row($query);			default: 				$this->mysqlerror("Angegebene Funktion wurde nicht gefunden",256);		}	}	/*	#	MySQL num	#	@params $art(ob num_rows oder num_fields)	#	@return je nach num Art die Anzahl der Rows oder Fields 	#	#*/	public function num($art, $query){		switch($art) {			case "rows":				return mysql_num_rows($query);			case "fields":				return mysql_num_fields($query);			default:				$this->mysqlerror("Angegebene Funktion wurde nicht gefunden",512);		}	}	/*	#	MySQL Close	#	@params	#	@return 	#	*/	public function close(){		$close = mysql_close($this->connect);	}	/*	#	Hashing	#	Funktion zum Hashen von z.b. Passwörtern oder sonstigen Sensiblen Datein	#	@params input -> das was gehasht werden soll; art -> Welche Verschlüsselungsart?(Standart MD5)	#	@return Hash von input	*/	public function hashing($input,$art = "whirlpool") {		$input = $this->cleaner($input);		switch($art) {			case "whirlpool":				return hash("whirlpool",$input);			case "sha512":				return hash("sha512",$input);			default:				return md5($input);		}	}	/*	#	Cleaner	#	Funktion zum Reinigen von Variablen (z.b. aus Inputs [gegen XSS])	#	@params input -> das was gereigt werden soll; grad: Sicherheitsgrad(zwischen LEICHT,MITTEL,SCHWER wählbar) Standart = SCHWER	#	@return sauberen input	*/	public function cleaner($input, $grad="SCHWER"){		switch($grad){			case "LEICHT":				return mysql_real_escape_string($input);			case "MITTEL":				return mysql_real_escape_string(htmlspecialchars($input));			case "SCHWER":				return mysql_real_escape_string(strip_tags($input));		}	}	/*	#	mysqlerror	#	#	@params error = Errornachricht; errorno = nummer des Errors	#	@return	*/	public function mysqlerror($error,$errorno){		if ($this->errorgiv == false) {			$message = '<div class="panel panel-danger">							<div class="panel-heading">	    						<h2 class="panel-title">MySQL Error: '.$errorno.'</h2>	    					</div>';			$message .= '<div class="panel-body"><strong>'.$error.'</strong><br />';			$message .= $errorfile." (".$errorline.")<br />";			$message .=	'Bitte melde diesen Fehler über unseren Bugtracker.<a href="?p=bugtracker&error=mysql&no='.mysql_insert_id().'" target="_blank">Bugtracker aufrufen</a></h4></div></div>';			$this->errorgiv = true;			die ($message);		}else{ }	}}?>


    Anwendungsbeispiel:

    PHP
    // Andere Funktion aus einer anderen Klasse aus dem selben Projekt.	/*	#	newGame	#	Erstellt ein neues Spiel	#	@params Spielerid1 Spielerid2	#	@return ID des Spieles	*/	public function newGame($user1, $user2) {		if ($this->db->query("INSERT INTO `game` (`spieler1` ,`spieler2` ,`istdran` ,`zuege`)VALUES ('".$user1."', '".$user2."', '".$user1."', '0')")) {			if ($this->db->query("UPDATE `user` SET `aktuellspiel` = '".mysql_insert_id()."' WHERE `id` = '".$user1."' OR `id` = '".$user2."'")) {				$return = $this->db->fetch("array",$this->db->query("SELECT * FROM `game` WHERE `spieler1` = '".$user1."' AND `spieler2` = '".$user2."' AND `zuege` = '0'"));				return $return['id'];			}else{				$this->gameerror("Spiel konnte User nicht zugewiesen werden!",98);			}		}else{			$this->gameerror("Das Spiel konnte nicht erstellt werden!",97);		}	}

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

    Einmal editiert, zuletzt von Developer ()


  • könntest du die Updaten?
    Bei mir funktioniert die nicht mehr :/

    PHP
    $configFile = $fFunctions->getServerConfigFile($Path.'\\Samp_'.$Port.'\\server.cfg');


    kommt immer nen leerer Text bei raus

    All in all it's just another brick in the wall

  • Beavis:


    Aus dem Kopf geschrieben, muss evtl bereinigt werden ;)

  • Verweis auf hier.


    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

    Einmal editiert, zuletzt von dead () aus folgendem Grund: lol, $posisition => $position

  • Hätte sicher einfacher gehen können, aber habe es mal (so gut ich konnte) geschrieben.
    Ich habe mir mal @dead:'s Code als Beispiel genommen und eine Kleine Klasse für ServerCFG's erstellt ;>
    Danke für den tollen Denkanstoß dead, da habe ich wieder viele gute Funktionen gelernt :3



    Benutzung:

  • Aus einem älteren Projekt:
    Dynamische Signatur mit Symfony2, Propel1 und Imageworkshop ("sybio/image-workshop": "dev-master").


    Controller


    SignatureInterface


    Beispiel-Handler


    Hintergründe und Fonts in Resources/signatures/background bzw. Resources/signatures/font.


    Sieht letztendlich so aus: Beispiel


    Der Code wird so nicht ohne Anpassungen lauffähig sein, da er eben auf dieses Projekt abgestimmt war, aber ich denke er dient als gute Grundlage für eine saubere Lösung dafür in Symfony2.



    ----------


    SampServerInstaller
    Eine kleine Klasse, mit der es möglich ist, Server im Handumdrehen herunterzuladen und/oder zu installieren (entpacken) - oder einfach nur um die aktuelle Version herauszufinden.


    Benutzung:

    PHP
    <?php
    $installer = new SampServerInstaller();
    
    
    echo "Aktuelle Version: {$installer->getLatestVersion()}, Download: {$installer->getLatestVersion(true)}<br>";
    echo "Version 0.3e-R2, Download: {$installer->getDownloadUrl("0.3e-R2")}<br>";
    // $installer->install(); // install latest server
    // $installer->download(); // download latest server
    // $installer->install(null, "0.3e-R2"); // install 0.3e-R2 server



    ----------


    SampConfig


    Anwendung:

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

    3 Mal editiert, zuletzt von dead ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • So ich habe auch noch ne kleine Klasse für euch, die ist allerdings ehr was für Leute, welche OOP nutzen.


    Ist eine Profil Klasse, welche die Daten für die View vorbereitet. Heißt soviel:
    Man übergibt der Klasse im Konstruktor ein Objekt (im BSP ist es ein User Object). Aus diesem Objekt raus, wird nun ein Array vorbereitet, welches das Profil beinhaltet. Die einzelnen Profilfelder müssen in einer Config Datei angelegt werden.


    PHP
    class Profil {        /**         * Profil Array - Beinhaltet das Array mit den Bereits aufgearbeiteten Profil Daten         */        private $profil_array;        /**         * Profil User - Beinhaltet das Nutzer Object von dem Nutzer, welcher Angezeigt werden soll         */        private $profil_data;        /**         * Constructor - Benötigt ein User Object als Parameter         */        public function __construct($data) {                $this -> profil_data = $data;                $this -> PrePareProfilArray();        }        /**         * Destruktor - Löscht die Werte in der Klasse         */        public function __destruct() {                $this -> DeleteProfilArray();                $this -> DeleteProfilData();        }         /**         * [Private] PrePareProfilArray - Bereitet ein Array für die direkte Anzeige im Profil vor.         */        private function PrePareProfilArray() {                global $CONFIG;                $data_array = array();                 $i = 0;                 foreach ($CONFIG['Profil'] as $key => $value) {                         if ($value["Active"] == true) {                                 $data_array[$i] = array();                                 $data_array[$i]['Name'] = $value['DisplayName'];                                 if(isset($this -> profil_data -> $key)){                                    $data_array[$i]['Value'] = $this -> profil_data -> $key;                                } else {                                    $data_array[$i]['Value'] = "$key was not found";                                }                                if (isset($value['AdminOnly'])) {                                        $data_array[$i]['AdminOnly'] = $value['AdminOnly'];                                }                                if (isset($value['AdditonalAfter'])) {                                        $after_value = $value['AdditonalAfter'];                                } else {                                        $after_value = Null;                                }                                if (isset($value['AdditonalBefore'])) {                                        $before_value = $value['AdditonalBefore'];                                } else {                                        $before_value = Null;                                }                                $data_array[$i]['Value'] = $before_value . $data_array[$i]['Value'] . $after_value;                                $i++;                        }                 }                 $this -> profil_array = $data_array;        }         /**         * Gibt das Profil Array zurück         */        public function GetProfilArray() {                return $this -> profil_array;        }        /**         * Löscht das Profil Array         */        private function DeleteProfilArray() {                $this->profil_array = null;                unset($this->profil_array);        }        /**         * Löscht den Profil Data         */        private function DeleteProfilData(){                $this->profil_data = null;                unset($this->profil_data);        } }


    Soweit die Klasse. Die Konfiguration des ganzen ist relativ einfach:
    (Da ich die Konfiguration selber in einem Array nutze ist es auch hier in einem Array)

    PHP
    global $CONFIG;$CONFIG['Profil']['username'] = array("Active" => true, "DisplayName" => "Nutzername");$CONFIG['Profil']['level'] = array("Active" => true, "DisplayName" => "Level");$CONFIG['Profil']['money'] = array("Active" => true, "DisplayName" => "Money", "AdditonalBefore" => "$&nbsp;");//$CONFIG['Profil'][Name der Eigenschaft im Gewünschten Object] = //array("Active" => /* Man kann ein Feld aktivieren => true; und deaktiven (es wird nicht angezeigt bzw verarbeitet) => false*/,//"DisplayName" =>/*Der Name der später angezeigt werden soll z.b. in einer Tabelle*/, //"AdditonalBefore" => /*[OPTIONAL]Soll ein Zeichen vor den Wert gesetzt werden? z.b. beim Geld: ohne das steht dort:123456 ;mit einem $&nbsp; als Additonal Before steht dort:$ 123456*///"AdditonalAfter" => /*[OPTIONAL]  Stellt ein Zeichen nach dem Wert an *///"AdminOnly"=>/*[OPTIONAL] Legt nur fest ob dieses Profilfeld von jedem oder nur von Admins gesehen werden darf, müsst ihr in der View nur eure Adminabfrage reinpacken */);


    Nun ja soviel zur Einrichtung. Nur wie nutzt man es? So: (Beispiel ist ein Nutzer Objekt)

    PHP
    <?phpclass User {        public $username;        public $email;        public $level;        public $money;        public function __construct() {                $this -> username = "Hans-Peter";                $this -> email = "bla@Bla.de";                $this -> level = round(514 / 63);                $this -> money = sprintf("%01.2f", 5000);        } }?> <?php/*-------------------------------- Die View -------------------------------*/// Instanziere ein neues Profil und gebe ihm einen Nutzer$profil_obj = new Profil((new User()));// Gebe Array mit Profilinformationen zurück$profil_data = $profil_obj->GetProfilArray();// Profilinformationen ausgeben?><table border='0'><?phpfor($i = 0; $i < count($profil_data); $i++){        if(empty($profil_data[$i]['AdminOnly']) == false){                ?>                <tr>                <td><?php echo $profil_data[$i]['Name']; ?>:</td>                <td><?php echo $profil_data[$i]['Value']; ?> [Only 4 Admins]</td>                </tr>                <?php                } else {        ?>        <tr>        <td><strong><?php echo $profil_data[$i]['Name']; ?>:</strong></td>        <td><?php echo $profil_data[$i]['Value']; ?></td>        </tr>        <?php        }        }?>


    Ist nichts großes, aber sollte denke ich einigen helfen können ;) Das System ist, mit kleineren Änderungen so auch aktiv im Einsatz im UCP von GermanCrimeTime

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Habe da auch mal meinen ersten schnipsel hier^^
    Es handelt sich um eine einfach SQLite Klasse, da ich mal selber danach gesucht habe und es nicht auf die reihe bekommen habe.


    Klasse:

    PHP
    <?php/*PDO SQLite KlasseFlorian Gerhardt02.10.2014*/class SQLite {	static protected $DB;	static protected $Result;	public function __construct($dbname)	{		$this->DB = new SQLite3($dbname.'.db');		if(!file_exists($dbname.'.db'))		{			die('[SQLite] Database is not Created');		}	}	public function __destruct()	{		$this->DB->close();	}	public function Query($Query)	{		$type = strpos($Query,'SELECT');		if($type === false) 		{			$this->Result = $this->DB->exec($Query);		} 		else		{			$type = strpos($Query,'SELECT * ');			if($type === false)			{				$this->Result = $this->DB->querySingle($Query);			}			else			{				$this->Result = $this->DB->query($Query);			}		}		return $this->Result;	}	public function RowCount($table)	{		$this->Result = $this->Query("SELECT COUNT(*) as count FROM ".$table);		return $this->Result;	}	public function LastInsertID()	{		return $this->DB->lastInsertRowID();	}	public function FetchArray($query)	{		if($query !== null)			$this->Query($query);		$res = $this->Result->fetchArray(SQLITE3_ASSOC);		return $res;	}	public function EscapeString($string)	{		return $this->DB->escapeString($string);	}	public function GetErrorCode()	{		return $this->DB->lastErrorCode();	}	public function GetErrorMessage()	{		return $this->DB->lastErrorMsg ();	}}?>


    Anwendung:

    PHP
    <?phprequire_once('sqlite.class.php');//Datenbank öffnen$sql = new SQLite('bar');//Query abschicken $sql->Query("INSERT INTO table (`count`) VALUES ('1')");//Werte aus der Datenbank auslesen$count = $sql->Query("SELECT count FROM table WHERE id=3");//wenn man nur einen Wert haben möchteecho $count;$count = $sql->FetchArray("SELECT * FROM table");//wenn man alles auslesen möchte echo $count['count']; //oder$sql->Query("SELECT * FROM table");$count = $sql->FetchArray();echo $count['count'];//Anzahl der Datensätzeecho $count = $sql->RowCount("table");//ID des letzten eingetragenen Datensatzesecho $sql->LastInsertID();//Einen wert "Escapen"$Escape = $sql->EscapeString("test");//Gibt den letzten Errorcode ausecho $sql->GetErrorCode();//Gibt den letzten Errortext ausecho $sql->GetErrorMessage();?>


    Vielleicht kann es ja jemand gebrauchen :)

  • Klasse "utils", welche einige nützliche Funktionen bietet.


    PHP
    <?	class utils{		const CHARS_NORMAL = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';		const CHARS_PASSWORD = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-.,;:_+#*\'()/&%$ยง=)!"';		public function __construct(){		}		public function randomString($length, $chars = self::CHARS_NORMAL){			$string = "";			for($i = 1; $i <= $length; $i++){				$string .= $chars[rand(0, strlen($chars)-1)];			}			return $string;		}		public function timestampToDate($timestamp = -1, $format = "d.m.y H:i:s"){			if($timestamp == -1) $timestamp = time();			return date($format, $timestamp);		}		public function byteToKB($byte){			return ($byte / 1000);		}		public function kbToByte($kb){			return ($kb * 1000);		}		public function validateMail($mail){			if(filter_var($mail, FILTER_VALIDATE_EMAIL)) return true;			return false;		}	}?>


    Anwendung:


    PHP
    require_once("utils.class.php");
    $utils = new utils();
    echo $utils->timestampToDate(); //Aktuelles Datum
  • Hallo zusammen,


    ich hatte heute einen sehr langen SQL-Query (weit mehr als 1000 Zeichen), da kam mir eine Idee. Einige von euch kennen sicher die großen PHP Frameworks ala Laravel, Symfony,Doctrine und co. Alle haben einen QueryBuilder dabei. Meist ist dieser aber tief im System drin, sodass man auch andere Teile nutzt als nur diesen Query Builder.
    Deshalb hab ich mir fix eine Klasse geschrieben, die genau das für mich tut, also Querys "builden".


    Beispiel:

    SQL
    SELECT b.bestellungID,b.bestellungDatum,p.p_name FROM `bestellungen` as b INNER JOIN `praemie` as p ON b.p_id = p.p_id WHERE b.bestellungID = :bid OR b.bestellungZeitraum > :timestampGestern


    (ja gut so lang ist der Query jetzt nicht ;) aber Programmierer sind ja faul) Wer blickt denn da auf einen Blick durch? Kaum einer.
    Deshalb sieht es bei mir so aus:

    PHP
    <?php
    $queryBuilderSELECT = new lkdevelopment\QueryBuilder();
    $queryBuilderSELECT->select("b.bestellungID", "b.bestellungDatum","p.p_name")
                        ->from("bestellungen", "b")
                        ->innerJoin("praemie", "p", "b.p_id = p.p_id")
                        ->where("b.bestellungID = :bid")
                        ->orWhere("b.bestellungZeitraum > :timestampGestern");
    ?>


    Ahh das sieht doch schon mal viel einfacher aus ;) Und wenn ich mir nun $queryBuilderSELECT ausgeben lasse (vollkommen egal wie), steht da:

    SQL
    SELECT b.bestellungID,b.bestellungDatum,p.p_name FROM `bestellungen` as b INNER JOIN `praemie` as p ON b.p_id = p.p_id WHERE b.bestellungID = :bid OR b.bestellungZeitraum > :timestampGestern


    Natürlich funktioniert das auch in der prepare Methode von mysqli oder PDO & in der mysql(i)_query Funktion.
    Eine genaue Beschreibung & Dokumentation, genauso wie den Github Link (zum Download) findet ihr HIER.


    Ich entwickle das ganze weiter, sodass es später einmal in der Lage ist direkt zu sagen ob die Spalte die angefordert wird überhaupt existiert und so weiter.


    Mit freundlichen Grüßen
    $this->getUser();

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern

  • Heyho,
    Da ich es immer wieder aufs neue nervig fand, das Laravel Framework mit den ganzen befehlen neu zu installieren, habe ich mal eben aus Langeweile ein Script geschrieben, was diese Arbeit abnimmt.
    Es ist mein erstes Shell Script und es ist auch nichts besonderes. Es nimmt lediglich Arbeit ab.


    Das Script

    Bash
    #!/bin/sh# Laravel Framework Installer by Slashclearif [ "$#" -eq  "0" ]	then	echo "================================================="	echo " Laravel Framework installer           		   "	echo " Es wird ein Parameter für den Projektnamen benötigt"	echo " ./laravel_installer.sh projektname    "	echo "================================================="	exitelse	echo "================================================="	echo " Die Aktuellste version vom Laravel Framework    "	echo " wird nun installiert, es kann einige Zeit in    "	echo " Brechen sie die installation nicht vorher ab	   "	echo "================================================="ficomposer global require "laravel/installer=~1.1"clearecho "========================================="echo " Composer wurde erfolgreich aktualisiert"      echo "========================================="sleep 0.3composer create-project laravel/laravel --prefer-distclearsleep 0.3mv laravel $1cd $1chmod -R guo+w storagechmod -R guo+w resourceschmod -R guo+w vendorecho "================================================="echo " Laravel Framework wurde erfolgreich installiert"echo " Projektordner:" $1                    echo "================================================="


    Installation

    Spoiler anzeigen
    Die Installation ist ebenfalls recht einfach, ihr kopiert euch den Quelltext und erstellt auf eurem Linux Server einfach eine Datei mit .sh Endung für Shell und fügt den Quelltext ein.
    Wenn ihr das Dokument gespeichert habt, muss es nur ausführbar gemacht werden,

    Code
    chmod +x installer.sh


    Verwendung
    Zur Verwendung gibt es nicht viel zu sagen, es wird lediglich ein Parameter für den Projektnamen benötigt.

    Code
    ./installer.sh projektname



    So, wie bereits gesagt, es ist nichts besonderes.
    Nur eine kleine Spielerei für faule Leute wie mich :p


    MfG,
    Slash™

    [Bedrohung für WestCoast... ]


    Meine Werke hier im Forum:
    Zu sehen in meinem Profil.

    Einmal editiert, zuletzt von Slash™ () aus folgendem Grund: Code Anpassung, rechte

  • Bessere Alterberechnung:




    Simples Login System:


    2 Mal editiert, zuletzt von MASYNO ()

  • Simples Login System:


    Ich rate von der Nutzung dieses Scriptes ab. Es beinhaltet massive SQL Injectionlücken und beinhaltet sogar noch Fehler (bzw unnötige schleifen). Ich schreib das ganze mal ordentlich um und editiere es hier rein.

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern