;~~ _MySQLPHP.au3 by Nikolas Werncke ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Von:			Nikolas Wernecke (kloklo www.autoit.de)
;Version:		0.1 (Notfall Update)
;Beschreibung:	Enthält Funktionen die eine .php Datei aufrufen, die MySQl Funktionen ausführt.
;Benötigt:		Benötigt die .php Datein der Aktuellen Version.
;Hinweis:		MySQL Server, Datenbank, Benutzer sind vom Web Server aus gegeben ("conf.ini")
;				"conf.ini" und "_MySQLviaPHP.au3" müssen angepasst werden.
;				Als erstes muss _MySQLPHP_SetServer ausgeführt werden
;Funktionen:	_MySQLPHP_SetServer
;				_MySQLPHP_Insert
;				_MySQLPHP_Delete
;				_MySQLPHP_Update
;				_MySQLPHP_Select
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include <array.au3>	;Nur für das Beispiel _MySQLPHP_Select benötigt
#include <INet.au3>

;~~ Konfigurationsbereich ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Global Const $MySQLPHP_Insert = "insert.php"
Global Const $MySQLPHP_Delete = "delete.php"
Global Const $MySQLPHP_Update = "update.php"
Global Const $MySQLPHP_Select = "select.php"
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

;~~ _MySQLPHP_SetServer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Aktion:	Setzt die Web Server Adresse (Pfad zum Verzeichnis wo sie .php Datein liegen)
;Parameter:	$sIP		= String mit IP Adresse
;Return:	Erfolgreich:	1
;			Error:			-1
;				Error Code:	1 - Parameter Arten sind falsch
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Func _MySQLPHP_SetServer($sIP)
	If Not IsString($sIP) Then Return SetError(1,0,-1)
	$MySQLPHP_ServerURL = $sIP
EndFunc

;~~ _MySQLPHP_Insert ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Aktion:	Fügt einen Wert in eine MySQL Tabelle hinzu
;Parameter:	$sTable		= String mit Tabellenname
;			$aCols		= Array mit den Spalten
;			$aVals		= Array mit den Werten
;			(Zu $aCols[n] wird $aVals[n] zugeordnet)
;Return:	Erfolgreich:	Anzahl der Betroffenden Zeilen (1)
;			Error:			-1
;				Error Code:	1 - Parameter Arten sind falsch
;							2 - Spalten und Werte Anzahl sind ungleich
;							3 - PHP Server nicht erreichbar
;							4 - PHP: keine Variablen (per $_Get) erhalten
;							5 - PHP: MySQL INSERT fehlgeschlagen
;							6 - PHP: Nicht aufgelisteter Error (evnt. MySQL Server off)
;							7 - Darf es nicht geben -> Funktion nich in Ordnung
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Func _MySQLPHP_Insert($sTable, $aCols, $aVals)
	If Not IsString($sTable) Or Not IsArray($aCols) Or Not IsArray($aVals) Then Return SetError(1,0,-1)
	If UBound($aCols) <> UBound($aVals) Then Return SetError(2,0,-1)

	Local $sCols, $sVals, $sURL, $sWebSite

	For $a = 0 To UBound($aCols) - 1 Step + 1
		$sCols &= $aCols[$a] & ","
	Next
	$sCols = StringTrimRight($sCols, 1)

	For $a = 0 To UBound($aVals) - 1 Step + 1
		$sVals &= "'" & $aVals[$a] & "',"
	Next
	$sVals = StringTrimRight($sVals, 1)

	$sURL = $MySQLPHP_ServerURL & $MySQLPHP_Insert & "?table=" & $sTable & "&cols=" & $sCols & "&vals=" & $sVals
	$sWebSite = _INetGetSource($sURL)

	Switch $sWebSite
		Case "0"
			Return SetError(3,0,-1)
		Case "_-1"
			Return SetError(4,0,-1)
		Case "_-2"
			Return SetError(5,0,-1)
	EndSwitch

	If Int(StringTrimLeft($sWebSite, 1)) <> 0 Then
		Return StringTrimLeft($sWebSite, 1)
	Else
		Return SetError(6,0,-1)
	EndIf

	Return SetError(7,0,-1)

EndFunc

;~~ _MySQLPHP_Delete ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Aktion:	Löscht einen Wert aus einer MySQL Tabelle
;Parameter:	$sTable		= String mit Tabellenname
;			$sWhere		= String mit WHERE Bedingungen (MySQL Syntax) (Optional)
;			$sOrderBy	= String mit ORDERE BY Bedingungen (MySQL Syntax) (Optional)
;			$sLimit		= String mit LIMIT Bedingungen (MySQL Syntax) (Optional)
;Return:	Erfolgreich:	Anzahl der Betroffenden Zeilen
;			Error:			-1
;				Error Code:	1 - Parameter Arten sind falsch
;							3 - PHP Server nicht erreichbar
;							4 - PHP: keine Variablen (per $_Get) erhalten
;							5 - PHP: MySQL DELTET fehlgeschlagen
;							6 - PHP: Nicht aufgelisteter Error (evnt. MySQL Server off)
;							7 - Darf es nicht geben -> Funktion nich in Ordnung
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Func _MySQLPHP_Delete($sTable, $sWhere = "", $sOrderBy = "", $sLimit = "")
	If Not IsString($sTable) Or Not IsString($sWhere) Or Not IsString($sOrderBy) Or Not IsString($sLimit) Then Return SetError(1,0,-1)

	Local $sURL, $sWebSite

	$sURL = $MySQLPHP_ServerURL & $MySQLPHP_Delete & "?table=" & $sTable
	If $sWhere <> "" Then $sURL &= "&where=" & $sWhere
	If $sOrderBy <> "" Then $sURL &= "&orderby=" & $sOrderBy
	If $sLimit <> "" Then $sURL &= "&limit=" & $sLimit
	$sWebSite = _INetGetSource($sURL)

	Switch $sWebSite
		Case "0"
			Return SetError(3,0,-1)
		Case "_-1"
			Return SetError(4,0,-1)
		Case "_-2"
			Return SetError(5,0,-1)
	EndSwitch

	If Int(StringTrimLeft($sWebSite, 1)) <> 0 Then
		Return StringTrimLeft($sWebSite, 1)
	Else
		Return SetError(6,0,-1)
	EndIf

	Return SetError(7,0,-1)

EndFunc

;~~ _MySQLPHP_Update ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Aktion:	Ändert einen Wert in einer MySQL Tabelle
;Parameter:	$sTable		= String mit Tabellenname
;			$aCols		= Array mit den Spalten
;			$aVals		= Array mit den Werten
;			$sWhere		= String mit WHERE Bedingungen (MySQL Syntax) (Optional)
;			$sOrderBy	= String mit ORDERE BY Bedingungen (MySQL Syntax) (Optional)
;			$sLimit		= String mit LIMIT Bedingungen (MySQL Syntax) (Optional)
;Return:	Erfolgreich:	Anzahl der Betroffenden Zeilen
;			Error:			-1
;				Error Code:	1 - Parameter Arten sind falsch
;							2 - Spalten und Werte Anzahl sind ungleich
;							3 - PHP Server nicht erreichbar
;							4 - PHP: keine Variablen (per $_Get) erhalten
;							5 - PHP: MySQL DELTET fehlgeschlagen
;							6 - PHP: Nicht aufgelisteter Error (evnt. MySQL Server off)
;							7 - Darf es nicht geben -> Funktion nich in Ordnung
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Func _MySQLPHP_Update($sTable, $aCols, $aVals, $sWhere = "", $sOrderBy = "", $sLimit = "")
	If Not IsString($sTable) Or Not IsArray($aCols) Or Not IsArray($aVals) Or Not IsString($sWhere) Or Not IsString($sOrderBy) Or Not IsString($sLimit) Then Return SetError(1,0,-1)
	If UBound($aCols) <> UBound($aVals) Then Return SetError(2,0,-1)

	Local $sData, $sURL, $sWebSite

	For $a = 0 To UBound($aCols) - 1 Step + 1
		$sData &= $aCols[$a] & "='" & $aVals[$a] & "',"
	Next
	$sData = StringTrimRight($sData, 1)

	$sURL = $MySQLPHP_ServerURL & $MySQLPHP_Update & "?table=" & $sTable & "&data=" & $sData

	If $sWhere <> "" Then $sURL &= "&where=" & $sWhere
	If $sOrderBy <> "" Then $sURL &= "&orderby=" & $sOrderBy
	If $sLimit <> "" Then $sURL &= "&limit=" & $sLimit
	$sWebSite = _INetGetSource($sURL)

	Switch $sWebSite
		Case "0"
			Return SetError(3,0,-1)
		Case "_-1"
			Return SetError(4,0,-1)
		Case "_-2"
			Return SetError(5,0,-1)
	EndSwitch

	If Int(StringTrimLeft($sWebSite, 1)) <> 0 Then
		Return StringTrimLeft($sWebSite, 1)
	Else
		Return SetError(6,0,-1)
	EndIf

	Return SetError(7,0,-1)

EndFunc

;~~ _MySQLPHP_Select ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Aktion:	Fragt Werte in einer Tabelle ab
;Parameter:	$sTable		= String mit Tabellenname
;			$aCols		= Array mit Spalten (Oder String mit  *  (Alle Spalten in der Tabelle))
;			$sWhere		= String mit WHERE Bedingungen (MySQL Syntax) (Optional)
;			$sOrderBy	= String mit ORDERE BY Bedingungen (MySQL Syntax) (Optional)
;			$sLimit		= String mit LIMIT Bedingungen (MySQL Syntax) (Optional)
;Return:	Erfolgreich:	$aData[n][n] - Einen 2D Array
;								$aData[0][n] - Spaltennamen
;								1. Dimension - Zeilen
;								2. Dimension - Spalten
;			Error:			-1
;				Error Code:	1 - Parameter Arten sind falsch
;							3 - PHP Server nicht erreichbar
;							4 - PHP: keine Variablen (per $_Get) erhalten
;							5 - PHP: MySQL DELTET fehlgeschlagen
;							6 - PHP: Nicht aufgelisteter Error (evnt. MySQL Server off)
;							7 - Darf es nicht geben -> Funktion nich in Ordnung
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Func _MySQLPHP_Select($sTable, $aCols, $sWhere = "", $sOrderBy = "", $sLimit = "")
	If Not IsString($sTable) Or (Not IsArray($aCols) And $aCols <> "*") Or Not IsString($sWhere) Or Not IsString($sOrderBy) Or Not IsString($sLimit) Then Return SetError(1,0,-1)

	Local $sCols, $sURL, $sWebSite

	If IsArray($aCols) Then
		For $a = 0 To UBound($aCols) - 1 Step + 1
			$sCols &= $aCols[$a] & ","
		Next
		$sCols = StringTrimRight($sCols, 1)
	ElseIf $aCols = "*" Then
		$sCols = "*"
	EndIf

	$sURL = $MySQLPHP_ServerURL & $MySQLPHP_Select & "?table=" & $sTable & "&cols=" & $sCols
	If $sWhere <> "" Then $sURL &= "&where=" & $sWhere
	If $sOrderBy <> "" Then $sURL &= "&orderby=" & $sOrderBy
	If $sLimit <> "" Then $sURL &= "&limit=" & $sLimit
	$sWebSite = _INetGetSource($sURL)

	Switch $sWebSite
		Case "0"
			Return SetError(3,0,-1)
		Case "_-1"
			Return SetError(4,0,-1)
		Case "_-2"
			Return SetError(5,0,-1)
	EndSwitch

	If Int(StringMid($sWebSite, 2, 1)) = 1 Then
		$sWebSite = StringTrimLeft(StringTrimRight($sWebSite, 1), 3)
		$aRows = StringSplit($sWebSite, "'||'", 3)
		$aCols = StringSplit($aRows[0], "'|'", 3)
		Local $aData[UBound($aRows)][UBound($aCols)]
		For $r = 0 To UBound($aRows) - 1 Step + 1
			$aCols = StringSplit($aRows[$r], "'|'", 3)
			For $c = 0 To UBound($aCols) - 1 Step + 1
				$aData[$r][$c] = $aCols[$c]
			Next
		Next
		Return $aData
	Else
		Return SetError(6,0,-1)
	EndIf

	Return SetError(7,0,-1)

EndFunc

;~~ Beispiele ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

;_MySQLPHP_Insert
;~ $Table = "test"
;~ Local $Cols[1], $Vals[1]
;~ $Cols[0] = "test"
;~ $Vals[0] = "by AutoIt"
;~ $Return = _MySQLPHP_Insert($Table,$Cols,$Vals)
;~ If $Return = -1 Then $Return = "Error: " & @error
;~ MsgBox(0,"Return",$Return)

;_MySQLPHP_Deltet
;~ $Table = "test"
;~ $Where = "test = 'by AutoIt'"
;~ $Return = _MySQLPHP_Delete($Table,$Where)
;~ If $Return = -1 Then $Return = "Error: " & @error
;~ MsgBox(0,"Return",$Return)

;_MySQLPHP_Update
;~ $Table = "test"
;~ Local $Cols[1], $Vals[1]
;~ $Cols[0] = "test"
;~ $Vals[0] = "change by Autoit"
;~ $Where = "test = 'by AutoIt'"
;~ $Return = _MySQLPHP_Update($Table,$Cols,$Vals,$Where)
;~ If $Return = -1 Then $Return = "Error: " & @error
;~ MsgBox(0,"Return",$Return)

;_MySQLPHP_Select
;~ $Table = "test"
;~ $Cols = "*"
;~ $Return = _MySQLPHP_Select($Table,$Cols)
;~ If $Return = -1 Then
;~ 	MsgBox(0,"Return", "Error: " & @error)
;~ Else
;~ 	_ArrayDisplay($Return)
;~ EndIf

