Variable Variablennamen in PHP

Gerade beim Thema "Web Development" bekommt man es ja glücklicherweise immer wieder mit neuen Problemstellungen zu tun. "Variety is the spice of life", wie mein Englisch-Lehrer immer zu sagen pflegte.

Egal. Neulich stand ich vor dem Problem, dass ich ein Formular mit einer variablen Anzahl von Feldern erzeugen, abfragen und verarbeiten musste. Somit musste auch eine theoretisch beliebige Anzahl von Variablen zur Verfügung stehen, die abgefragt und weiterverarbeitet werden können. Kniffelig - vor allem weil mir nicht klar war, wie ich variable Variablennamen erzeugen sollte. Hatte ich bislang auch noch nicht oft gebraucht. Und wenn, dann hatte ich mir Hilfskonstruktionen ausgedacht, die mir angesichts der hier vorgestellten Lösung ziemlich peinlich sind.

Denn in PHP sind dynamische Variablennamen kein Problem. Bei dem folgenden Beispiel werden die drei Variablen $name_1, $name_2, $name_3 erzeugt und mit Inhalt gefüllt.

<?php
for ($i = 1; $i <= 3; $i++)
{
${name_.$i} = "neuer inhalt $i";
}
?>

Wie schön, dass ich das jetzt weiß ...

Zurzeit sind 2 Kommentare zu diesem Thema vorhanden. Kommentar schreiben?

Datei-Download mit PHP erzwingen

Das Problem dürfte bekannt sein: verlinkte PDF-Dateien werden direkt vom Browser geöffnet oder verlinkte JPGs werden angezeigt sollen aber zum Download angeboten werden.

Dem User jedesmal den Hinweis "Rechte Maustaste / Speichern unter ..." mit auf den Weg zu geben ist so lästig wie uneffektiv, daher wäre es doch schön, den Download erzwingen zu können. Bei mir trat das Problem auf, als eine 3D-Zeichnung in Form einer .stp-Datei zum Download angeboten werden sollte und ständig als Textdatei dargestellt wurde. Das folgende Script schafft Abhilfe. Es sollte aber nicht so eingesetzt werden, dass die zum Download angebotene Datei über den GET-String angegeben werden kann. Sonst steht möglichen Angreifern zum Beispiel evtl. auch der Download einer .htpasswd-Datei zur Verfügung. Also: Am besten im Zusammenhang mit einer Datenbank-Abfrage einsetzen.

<? 
$datei = "download_verzeichnis/download_datei.abc";
$dateiname = basename($datei);
$groesse = filesize($datei);
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$dateiname);
header("Content-Length:".$groesse);
readfile($datei);
?>
Zurzeit sind 5 Kommentare zu diesem Thema vorhanden. Kommentar schreiben?

Valide XHTML-Formulare mit Session-Variable

Meine Formulare auf dieser Seite wollten einfach nicht validieren.  Ich bekam permanent die folgende Fehlermeldung:

document type does not allow element "input" here; missing one of "ins", "del", "h1", "h2", "h3", "h4", "h5", "h6", "p", "div", "address", "fieldset" start-tag

Nach einigem Suchen habe ich dann herausgefunden, dass die Session-Variable von PHP als "input type=hidden" ins Formular eingefügt wird. Und zwar direkt hinter dem "form"-Tag. Das ist laut XHTML 1.1 Strict aber nicht zulässig, da das Block-Level-Element "input" nicht direkt im "form"-tag stehen darf. Wird im Query-String außer der Session-ID noch eine weitere Variable übertragen, kann es auch wegen des nicht maskierten "&" zum Fehler beim Validieren kommen. Dafür verantwortlich sind Einträge in der php.ini. Ob es daran liegt, lässt sich am besten mit folgenden Angaben in Eurem php-Script testen:

 ini_set (
'arg_separator.output' , '&amp;' );
ini_set (
'url_rewriter.tags' ,
'a=href,area=href,frame=src,input=src,fieldset=' );

Weitere Infos dazu gibt es hier: http://validome.org/forum

Zurzeit sind 0 Kommentare zu diesem Thema vorhanden. Kommentar schreiben?

Function tags2lower - Alle HTML-Tags in Kleinbuchstaben

Manchmal braucht man je seltsame Funktionen. Hiermit werden alle HTML-Tags in Kleinbuchstaben umgewandelt:

function tags2lower($value)
{
$value = preg_replace(',<(/?)([a-zA-Z]+)([^>]+)?(/?)>,ie',
'"<\1".strtolower("\2")."\3\4>"', $value);
$value = str_replace("\'","'",$value);
return $value;
}
Zurzeit sind 3 Kommentare zu diesem Thema vorhanden. Kommentar schreiben?

Zusammengefasstes Ergebnis aus zwei MySQL-Spalten

Ich habe eine MySQL-Tabelle, die etwa so aussieht.
|--------------------|
|-------table1-------|
|--------------------|
|-id-|-wert1-|-wert2-|
|--------------------|
|--1-|---a---|---d---|
|--2-|---d---|---e---|
|--3-|---b---|---f---|
|--4-|---c---|---a---|
|--------------------|

Jetzt möchte ich, dass alle "wert1"- und "wert2"-Angaben zusammengefasst und sortiert werden, aber jeder Wert nur einmal vorkommt. Also folgende Ausgabe soll heraukommen: "a" "b" "c" "d" "e" "f"

Als reine MySQL-Anweisung wäre das eventuell mit dem Befehl
UNION hinzubekommen, aber der läuft irgendwie bei meiner
MySQL-Version noch nicht. Eine andere Möglichkeit ist, die beiden
Spalten in einer temporären Tabellen zu einer Spalte
zusammenzufügen und dann mit DISTINCT auszulesen. Finde ich
aber zu aufwändig. Daher hier eine PHP-Variante:

$result1 = mysql_query ("SELECT wert1 FROM table1 GROUP BY wert1");
$result2 = mysql_query ("SELECT wert2 FROM table2 GROUP BY wert2");
$data_base = array ();
while ($daten1 = mysql_fetch_array($result1))
{array_push($data_base, "$daten1[wert1]");}
while ($daten2 = mysql_fetch_array($result2))
{array_push($data_base, "$daten2[wert2]");}
sort($data_base);
$daten_values = array_count_values($data_base);
while (list ($key,$val) = each($daten_values))
{echo $key; }
Zurzeit sind 0 Kommentare zu diesem Thema vorhanden. Kommentar schreiben?