zu preg_quote()
innerhalb von regulären Ausdrücken haben bestimmte Zeichen eine gewisse Aufgabe zu erfüllen.
so ist das ? oder ein Punkt auch eine Anweisung an den REGEX PARSER.
Siehe Liste (erster Kommentar weiter unten) http://www.php.net/manual/en/functio...tch.php#105924
Wenn du also den Satz "wie alt bist du?" durch preg_match schickst sieht der Parser das ? nach dem u und interpretiert dieses als:
u darf einmal oder gar nicht vorkommen,
was in deinem pregmatch eine völlig andere Ausgabe erzeugen würde.
Um dem aus dem Weg zu gehen werden solche Zeichen ersetzt, d.h. maskiert(escape) in dem ein \ Zeichen vor das Fragezeichen gestellt wird.
Damit kann der REGEX PARSER nun den Satz korrekt verarbeiten.
Falscheingaben und Validierung
Wenn man ein Datum in einer Zeichenkette suchen will, dann muss man auch sicherstellen, dass ein Datum vorliegt.
In der EDV-Welt gibt es nur ein Datum und das ist genormt.nach ISO 8601.
Nun enthält deine Datei aber eine andere Schreibweise des Datums und dahin musst du dann erstmal konvertieren.
Also Datum prüfen, konvertieren, nachsehen.
Folgernder Code erledigt das alles für dich inklusive Ausgabe und Eingabeformular, diesmal ohne preg_match.
innerhalb von regulären Ausdrücken haben bestimmte Zeichen eine gewisse Aufgabe zu erfüllen.
so ist das ? oder ein Punkt auch eine Anweisung an den REGEX PARSER.
Siehe Liste (erster Kommentar weiter unten) http://www.php.net/manual/en/functio...tch.php#105924
Wenn du also den Satz "wie alt bist du?" durch preg_match schickst sieht der Parser das ? nach dem u und interpretiert dieses als:
u darf einmal oder gar nicht vorkommen,
was in deinem pregmatch eine völlig andere Ausgabe erzeugen würde.
Um dem aus dem Weg zu gehen werden solche Zeichen ersetzt, d.h. maskiert(escape) in dem ein \ Zeichen vor das Fragezeichen gestellt wird.
PHP-Code:
echo preg_quote("Wie alt bist du?"); // Wie alt bist du\?
Falscheingaben und Validierung
Wenn man ein Datum in einer Zeichenkette suchen will, dann muss man auch sicherstellen, dass ein Datum vorliegt.
In der EDV-Welt gibt es nur ein Datum und das ist genormt.nach ISO 8601.
Nun enthält deine Datei aber eine andere Schreibweise des Datums und dahin musst du dann erstmal konvertieren.
Also Datum prüfen, konvertieren, nachsehen.
Folgernder Code erledigt das alles für dich inklusive Ausgabe und Eingabeformular, diesmal ohne preg_match.
PHP-Code:
<?php
$html_out = null;
// Prüfen ob submit gedrückt wurde und Datum ausgefüllt
if ( isset($_GET['submit'], $_GET['date']) ) {
// Wird Datum als richtiges Format erkannt?
if( $dt = date_create($_GET['date']) ) {
$date = $dt->format('d.m.Y');
// erst jetzt Datei holen
$csvarray = file("protokoll.csv");
// Datei Zeilenweise nach Datum durchsuchen
foreach ( $csvarray as $line ) {
if ( strpos($line, $date) !== false ) {
$html_out .= $line;
// alternativ kann hier auch fgetcsv() angewendet
// werden um die einzelnen Felder zu erhalten
}else{
$html_out = "Keine Übereinstimmung gefunden.";
}
}
}else{
$html_out = "Ungültiges Datum bei der Eingabe!";
}
}
?>
<html>
<head>
<meta charset="UTF-8">
<title>Registrierkasse</title>
</head>
<body>
<h1>Auswertung der Protkolldaten</h1>
<form lang="de">
<label>Datum:
<input name="date" type="date" pattern="\d{2}\.\d{2}\.\d{4}" placeholder="10.12.2010" required>
</label>
<input name="submit" type="submit" value="anzeigen">
</form>
<h2>Ergebnis:</h2>
<textarea cols="75" rows="6"><?= $html_out; ?></textarea>
</body>
</html>
Kommentar