Raketenheini: PHP: Session array erweitern -> Sortierfunktion im Index

Beitrag lesen

Ich habe, weil ich gerade ein wenig Zeit hatte und die Möglichkeit für eine Finger- und Hirnübung sah, das von mir verstandene kurzerhand und sicher schlampig in ein Skript für die Konsole verpackt ($_GET und $_SESSION werden simuliert).

Je nach Plan ist es womöglich fast perfekt aber wahrscheinlich nicht... Vielleicht liefert Dir das ja Ansätze.

<?php

## Session für CLI simulieren:
#/*
if (is_readable('session.json') ) {
    $_SESSION = json_decode( 
       file_get_contents( 'session.json' ),
       JSON_OBJECT_AS_ARRAY
    );
} else {
  	$_SESSION = [];
  	file_put_contents(
		'session.json',
		json_encode( [] )
	);
}
#*/

## $_GET für CLI simulieren:
#/*
$_GET['showFoo']=1; 
$_GET['showBar']=0;
$_GET['showBaz']=0;
$_GET['showTok']=1;

$_GET['sortFoo']=1; 
$_GET['sortBar']=0;
$_GET['sortBaz']=0;
$_GET['sortTok']=-1;

$_GET['sortOrder']='Foo,Tok';
#*/

## Simulation: 
## In der Realität die Spalten aus der Datenbank holen: 
## "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$schema' AND TABLE_NAME = '$table';"
 
$arColumns = ['Foo', 'Bar', 'Baz', 'Tok'];


## Programm ##################


if ( isset( $_SESSION['ShowColumns'] ) ) {
    $arShowColumns = array_keys( $_SESSION['ShowColumns'] );
} else {
    $arShowColumns = [];
}

$allowed = [1,0,-1];
foreach ( $arColumns as $column ) {
	if ( isset( $_GET['show'.$column ] ) ) {
		if ( ! in_array( $_GET['show'.$column], $allowed ) ) {
			trigger_error(
			    'Wert '.$_GET['show'.$column].' in $_GET["show'.$column.'] ist nicht erlaubt.',
			    E_USER_ERROR
			);
		} 
		if ( 1 == $_GET['show'.$column ] ) {
             $_SESSION['ShowColumns'][$column] = true;
		} elseif ( 0 == $_GET['show'.$column ] ) {
		     unset( $_SESSION['ShowColumns'][$column] );
		}
	}
	if ( isset( $_GET['sort'.$column ] ) ) {
		if ( ! in_array( $_GET['sort'.$column], $allowed ) ) {
			trigger_error(
			    'Wert '.$_GET['sort'.$column].' in $_GET["show'.$column.'] ist nicht erlaubt.',
			    E_USER_ERROR
			);
		} 
		if ( 1 == $_GET['sort'.$column ] ) {
             $_SESSION['SortColumns'][$column] = 'ASC';
		} elseif ( -1 == $_GET['sort'.$column ] ) {
			$_SESSION['SortColumns'][$column] = 'DESC';
		} else {
		     unset( $_SESSION['SortColumns'][$column] );
		}
	}	
}

if ( isset($_GET['sortOrder'] ) ) {
	$_SESSION['SortOrder']=[];
	$sortOrder = explode( ',', $_GET['sortOrder'] );
	foreach ($sortOrder as $item ) {
		if (in_array( $item, $arColumns ) ) {
			$_SESSION['SortOrder'][] = $item;
		} else {
			trigger_error(
			    'Wert '.$_GET['sort'.$column].' in $_GET["sortOrder."] ist nicht erlaubt.',
			    E_USER_ERROR
			);			
		}
	}
} 

if ( ! isset( $_SESSION['SortOrder'] ) ) {
	trigger_error(
		'Wenn sortiert werden soll muss die sortOrder angegeeben werden',
		E_USER_ERROR
	);		
}

file_put_contents(
	'session.json',
	json_encode( $_SESSION, JSON_PRETTY_PRINT )
);

echo file_get_contents('session.json');

# Welche Spalten sollen gezeigt werden?

$selects = [];
foreach ( array_keys( $_SESSION['ShowColumns'] ) as $key ) {
	if ( $_SESSION['ShowColumns'][$key]) {
		$selects[] = '`' . $key . '`';
	}
}

# wie soll sortiert werden?

$sortOrders = array();

foreach(  $_SESSION['SortOrder'] as $item ) {
	if ( $_SESSION['SortColumns'][$item] == 'DESC' ) {
	   $sortOrders[] = '`' . $item . '` DESC' ; 	
	} else {
	   $sortOrders[] = '`' . $item . '`' ; 	
	}
}

if ( count( $sortOrders ) ) {
	$orders = ' ORDER BY ' . implode( ', ', $sortOrders );
} else {
	$orders = '';
}

$sql = 'SELECT ' . implode( ', ' , $selects ) . ' from `Tabelle`' . $orders;

echo PHP_EOL, $sql, PHP_EOL;
0 47

PHP: Session array erweitern -> Sortierfunktion im Index

PHP-Neuling
  • datenbank
  • html
  • php
  1. 1
    localhorst
    • datenbank
    • javascript
    • php
    1. 0
      PHP-Neuling
    2. 0
      dedlfix
      1. 0
        localhorst
        1. 0
          1unitedpower
          1. 0
            localhorst
            • php
            • speicher
            1. 0
              1unitedpower
  2. 0
    dedlfix
    1. 0
      PHP-Neuling
      1. 0
        dedlfix
      2. 1

        Wichtig: Zuerst den Plan!

        Raketendiagnistiker
      3. 2
        TS
        • datenbank
        • https
        • php
  3. 0
    Rakketendiagnostiker
    1. 0
      dedlfix
      1. 0
        Raketendiagnostiker
    2. 0
      PHP-Neuling
      1. 0
        PHP-Neuling
      2. 1
        dedlfix
        1. 0
          PHP-Neuling
          1. 0
            dedlfix
            1. 0
              PHP-Neuling
              1. 0
                dedlfix
              2. 1
                localhorst
                • html
                • kontextwechsel
                • php
          2. 0
            Rolf B
            1. -1
              dedlfix
              1. 0
                Rolf B
              2. 1
                localhorst
                • datenbank
                • https
                • php
  4. 0
    vapita
    1. 0
      Matthias Apsel
  5. 0
    PHP-Neuling
  6. 0
    Felix Riesterer
    1. 0
      Raketenwilli
  7. 0
    Raketenheini
    1. 0
      PHP-Neuling
      1. 0
        localhorst
      2. -1
        Raketenheini
        1. 0
          localhorst
          • datenbank
          • https
          • php
        2. 0
          PHP-Neuling
          1. 0
            Felix Riesterer
            1. 0
              PHP-Neuling
              1. 0
                Felix Riesterer
                1. 0
                  PHP-Neuling
          2. 0
            vapita
            1. 0
              PHP-Neuling
      3. 0
        dedlfix
        1. 0
          Rolf B