Request.QueryString – Parameter entfernen
Neulich stand ich vor einem Problem. Ich musste die Request.QueryString Collection auswerten und brauche einen bestimmten Schlüssel nicht. Request.QueryString ist aber ReadOnly und kann nur mit einem neuen Response weiter verarbeitet werden.
// NameValueCollection coll = Request.QueryString; // remove if (!String.IsNullOrEmpty(coll["gridAction"]) && coll["gridAction"] == "batchAction") { // SCHLÄGT FEHL!!!! => Exception, weil ReadOnly coll.Remove("gridAction"); }
Statt in einer Schleife die Collection auszulesen, bin ich auf die statische Methode ParseQueryString aus dem Objekt HttpUtility gestoßen:
public static NameValueCollection ParseQueryString( string query ) public static NameValueCollection ParseQueryString( string query, Encoding encoding )
liefert auch eine Collection zurück, die aber nicht ReadOnly ist.
Beispiel:
// NameValueCollection coll = HttpUtility.ParseQueryString(Request.QueryString.ToString()); // remove if (!String.IsNullOrEmpty(coll["gridAction"]) && coll["gridAction"] == "batchAction") { coll.Remove("gridAction"); }
Habt Ihr noch andere Anregungen, Ideen, Lösungsvorschläge?
In diesem Sinne
Related Posts:
ifmember.exe Alternative für Windows 7
In Windows VISTA / 7 funktioniert das ifmember.exe nicht mehr, wegen der UCA. Dieses Tool wird benutzt, um bei einer Domänenanmldung anhand der Gruppen Aktionen auszuführen.
Bsp:
ifmember Entwicklung
if errorlevel = 1 (
net use q: \\SERVER\%username% /persistent:no
)Eine Lösung, die auf jedem Windows Client funktioniert und mit Boardmitteln funktioniert, ist net user in Kombination mit find. Ist zwar etwas langsamer, funktioniert aber mit den Windows Versionen, die wir in der Firma haben (2000, 2003, XP, VISTA, 7)
net user /DOMAIN %username% | find "Entwicklung" if not errorlevel = 1 ( net use q: \\SERVER\%username% /persistent:no )
Related Posts:
Linux – grep mit ODER Verknüpfung – egrep
Oft benutzt und mal für das Archiv.
Wenn man mehrere Bedingen ODER verknüpft bei dem Programm grep haben möchte, geht das nur über egrep:
egrep# Bsp für eine Oder Verknüpfung (PIPE-Symbol) egrep "2010:13:59|2010:13:57" *.log
Related Posts:
Zend Studio 7.2 – Autovervollständigung geht nicht mehr
Zend Studio 7.2 ist die kostenpflichtige IDE, wenn es um PHP-Entwicklung geht. Aus einem unbekannten Grund funktionierte meine Autovervollständigung nicht mehr.
Die Lösung habe ich in diesem Blog und dadurch auch in diesem Forum gefunden.
Man geht in seinen Workspace
# Bsp: windows 7, Standardworkspace C:\Users\<EUER_USER>\Zend\workspaces\DefaultWorkspace7\.metadata\.plugins\org.eclipse.core.runtime\.settings
und löscht die Datei
org.eclipse.dltk.ui.prefs
Danach Zend Studio neu starten, und die Autovervollständigung funktioniert wieder.
Related Posts:
ZendFramework – Zend_Auth mit aktiven und inaktivem Nutzer
In meinem vorherigen Post habe ich geschrieben, wie man mit dem ZendFramework eine Spalte auf Eindeutigkeit prüft. Nun habe ich mit Zend_Auth herumgespielt. Diese Klasse ist für das Anmelden gegen eine definierte Datenquelle über einen Provider zuständig. Nun war meine pers. Anforderung, über Zend_Auth einen Login zu realisieren, welches auch aktive und inaktive User berücksichtigt. Ich habe dies in einem Modul integriert namens User.
Tabelle (gekürzt)
-- -- Tabellenstruktur für Tabelle `user` -- CREATE TABLE IF NOT EXISTS `user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `username` VARCHAR(45) NOT NULL, `password` VARCHAR(45) NOT NULL, `firstname` VARCHAR(45) NOT NULL, `lastname` VARCHAR(45) NOT NULL, `email` VARCHAR(45) NOT NULL, `active` tinyint(4) DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), ) ENGINE=InnoDB DEFAULT CHARSET=utf-8;
Das Formular (vereinfacht):
// application/modules/user/form/Login.php class User_Form_Login extends Zend_Form { public function init() { // diese Felder kann man auch über Zend_Config realisieren $this->setAction('/user/authentication/login'); $this->setName('loginform'); $this->setMethod('post'); $username = new Zend_Form_Element_Text('username'); $username->setLabel('Benutzername'); $username->setRequired(); $password = new Zend_Form_Element_Password('password'); $password->setLabel('Passwort'); $password->setRequired(); $submit = new Zend_Form_Element_Submit('submit'); $submit->setLabel('Anmelden'); $this->addElements(array($username, $password, $submit)); } }
Im View (gekürzt):
<?php // application/modules/user/views/scripts/authentication/login.phtml ?> <h1>Login</h1> <?= $this->form->render(); ?>
Der Authentifizierungscontroller:
// application/modules/user/controller/Authentication.php class User_AuthenticationController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { // action body } public function loginAction() { // schon eingeloggt? if (Zend_Auth::getInstance()->hasIdentity()) { $this->_redirect('/'); } $form = new User_Form_Login(); $this->view->form = $form; if ($this->getRequest()->isPost()) { $formData = $this->getRequest()->getPost(); if ($form->isValid($formData)) { $authAdapter = $this->getAuthAdapter(); $authAdapter->setIdentity($form->getValue('username')); $authAdapter->setCredential($form->getValue('password')); $auth = Zend_Auth::getInstance(); $res = $auth->authenticate($authAdapter); if ($res->isValid()) { $identity = $authAdapter->getResultRowObject(); $authStorage = $auth->getStorage(); $authStorage->write($identity); // ... } else { // ... } } else { $form->populate($formData); } } } public function logoutAction() { // action body Zend_Auth::getInstance()->clearIdentity(); $this->_redirect('/'); } /** * Liefert den AuthAdapter * * @return Zend_Auth_Adapter_DbTable */ private function getAuthAdapter() { return new Zend_Auth_Adapter_DbTable( Zend_Db_Table::getDefaultAdapter(), 'user', 'username', 'password' ); } }
In meiner persönlichen Anforderung wollte ich aber, das man auch einen Aktivstatus realisiert. Wenn ein User sich also registriert, soll er erstmal inaktiv sein und sich entweder durch eine E-Mail oder den Admin aktiviert werden. Solange darf er sich natürlich nicht anmelden können. Dazu ist nur ein Parameter mehr erforderlich
/** * Liefert den AuthAdapter * * @return Zend_Auth_Adapter_DbTable */ private function getAuthAdapter() { return new Zend_Auth_Adapter_DbTable( Zend_Db_Table::getDefaultAdapter(), 'user', 'username', 'password', 'SHA1(?) AND active=1' // hier kann man den credentialColumn-Parameter anpassen ); }
Vielleicht habt ihr ja noch weitere Möglichkeiten, den Loginprozess zu optimieren. Ich bin auf jeden Kommentar gespannt ![]()
Related Posts:
Typo3 – 4.3 / Frontendediting aktivieren
Mit der aktuellen Version 4.3.x ist das neue Frontendediting gekommen. Um in den Genuss zu kommen, muss man dies erst aktivieren.
Folgende Schritte sind dafür notwendig:
Installieren und aktivieren der Extension feeditadvanced
Aktivieren des Plugins über die TSConfig:
admPanel { enable.edit=1 module.edit.forceDisplayFieldIcons=1 hide=1 }
Related Posts:
ZendFramework – Eindeutigen Datensatz prüfen
Das Zend Framework bietet mit seinen Validatoren sehr schöne Möglichkeiten, die Daten des Benutzers zu prüfen. Bisher habe ich immer im Controller geprüft, ob es einen Datensatz schon einmal gibt, wie z.B.: E-Mail Adresse, oder Benutzername. Doch es geht noch viel einfacher. Das ZendFramework bietet dafür die Klasse Zend_Validate_Db_NoRecordExists an. Diese erbt von der abstrakten Klasse Zend_Validate_Db_Abstract. Als Parameter gibt man in diesem Beispiel die Tabelle und die zu prüfende Spalte an.
Hier ein Beispiel der Benutzung in der Formklasse eureres Moduls
class User_Form_Register extends Zend_Form { /** * Init the Registerform * * @return void */ public function init() { $this->setAttrib('id', 'registerform'); $this->setAction('/user/index/create'); // ... // username $dbValUnique = new Zend_Validate_Db_NoRecordExists('user', 'username'); // Das DB ValidatorObjekt $username = new Zend_Form_Element_Text('username'); $username->setLabel('Benutzername'); $username->setRequired(); $username->addValidator('regex', true, array('/^[a-z]/i')); $username->addValidator($dbValUnique); // Hinzufügen zum Element $this->addElement($username); // ... // e-mail $dbValUnique = new Zend_Validate_Db_NoRecordExists('user', 'email'); // Das DB ValidatorObjekt $email = new Zend_Form_Element_Text('email'); $email->setLabel('E-Mail'); $email->setRequired(); $email->addValidator(new Zend_Validate_EmailAddress()); $email->addValidator($dbValUnique); // Hinzufügen zum Element $this->addElement($email); // ... } }
Related Posts:
WordPress Lightword Theme 1.9.8
Das Theme, was ich hier bei WordPress nutze, heißt LightWord. Es gibt wieder einige Updates und kompatibiltätspatches für WordPress 2.8. Eine Vorschau auf einige neue Features könnt ihr auf der Website betrachten.
Die aktuelle Version ist 1.9.8 und ist vom 27.01.2010.
Eine Hauptänderung, die ich jetzt nutze ist die Option, das Layout auf wide einzustellen.
Zu finden ist diese Option Plugins => LightWord Settings => Layout settings => Auf Wider stellen.

















