php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.04.2008, 09:36  
Neuer Benutzer
 
Registriert seit: 21.04.2008
Beiträge: 28
Gomilli befindet sich auf einem aufstrebenden Ast
Standard Problem mit strpos()

Hallo, bin neu hier und habe gleich ein Problem mit "strpos()":

Ich möchte aus einer Variablen, die einen String enthält prüfen, ob "AHC" darin vorkommt. Und wenn ja, dann soll er diesen String in eine andere Variable kopieren. Funktioniert mit strpos soweit auch gut, außer wenn AHC gleich ganz am Anfang steht.

Sobald ein anderes Zeichen davor steht, funktioniert es wieder.

Ich kanns mir nicht erklären. Ich hoffe das Problem ist verständlich...Weiß jemand einen Rat?

Grüße,
Roman
Gomilli ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.04.2008, 09:40  
Erfahrener Benutzer
 
Benutzerbild von Montellese
 
Registriert seit: 30.07.2007
Beiträge: 541
Montellese befindet sich auf einem aufstrebenden Ast
Montellese eine Nachricht über MSN schicken
Standard

Das liegt wohl an deiner Überprüfung des Rückgabewertes von strpos(). Das Problem liegt darin, dass bei einer Überprüfung Ã* la
PHP-Code:
if(strpos($string,'AHC')==false) { ... } 
der Rückgabewert 0 (der aussagt, dass der gesuchte Teilstring genau am Anfang steht) von PHP als false interpretiert wird. Deshalb muss man === (identisch, sprich nicht nur der Wert sondern auch der Variablentyp) verwenden.
Montellese ist offline  
Alt 21.04.2008, 09:49  
Neuer Benutzer
 
Registriert seit: 21.04.2008
Beiträge: 28
Gomilli befindet sich auf einem aufstrebenden Ast
Standard

Hm, versteh ich noch nicht ganz...

Beispiel:
PHP-Code:
$buchung "ahc-789008";
 if ((
strpos($buchung"AHC") === true) || (strpos($buchung"ahc") === true))
 {
 
$oID $buchung;
$buchung NULL;
 }
                  
 if (
$oID != "")
 {
 
$fontcolor "green";
 } 
So schreibt der mir jetzt in $oID gar nichts mehr rein (oder löscht es sofort wieder!?).

Mit zwei "==" schreibt er mir zumindest die richtigen rein, wenn ahc nicht an erster Position anfängt.

Schwierig zu erklären...habe ich irgendwo einen Denkfehler?
Gomilli ist offline  
Alt 21.04.2008, 09:53  
Erfahrener Benutzer
 
Benutzerbild von Montellese
 
Registriert seit: 30.07.2007
Beiträge: 541
Montellese befindet sich auf einem aufstrebenden Ast
Montellese eine Nachricht über MSN schicken
Standard

Wieso vergleichst du mit "true"? strpos gibt dir niemals true zurück, sondern entweder false oder die Position, wo der String zu finden ist als Integer. Damit macht der Vergleich mit true definitiv keinen Sinn. Du kannst entweder mit
PHP-Code:
 !(strpos(....)===false
(ich bin mir nie sicher, ob es "!==" als "ungleich identisch" gibt), oder du überprüfst es mit der Funktion is_int().

EDIT: Hab grade nochmals nachgeschaut !== existiert => ich würde folgendes verwenden:
PHP-Code:
if(strpos(....) !== false || ....) 
Montellese ist offline  
Alt 21.04.2008, 10:03  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Du hast es ja auch mit true gemacht...

eigentlich ganz Simpel. Wenn du eine === true Abfrage machst und strpos gibt dir Position x zurück, dann ist das eben durch === nicht mehr das gleiche wie true.

Du kannst in deinem Fall auch if(is_numeric(strpos... benutzen, der liefert dir das was du haben willst
cycap ist offline  
Alt 21.04.2008, 10:10  
Neuer Benutzer
 
Registriert seit: 21.04.2008
Beiträge: 28
Gomilli befindet sich auf einem aufstrebenden Ast
Standard

Habe es jetzt mit Eurer hilfe hinbekommen. Danke Euch beiden!!

Ich meld mich sicher heute nochmal

tschöö
Gomilli ist offline  
Alt 21.04.2008, 10:10  
Erfahrener Benutzer
 
Registriert seit: 28.03.2008
Beiträge: 1.847
HPR1974 wird schon bald berühmt werden
Standard

Also ich würde das nicht mit strpos lösen sondern per regülären ausdruck und preg_match() ...
strpos ist m.E. nicht die richtige Funktion, auch wenn der Ansatz funktioniert, wobei man ja die probleme hier im thread schon sieht.
HPR1974 ist offline  
Alt 21.04.2008, 11:32  
Erfahrener Benutzer
 
Benutzerbild von Montellese
 
Registriert seit: 30.07.2007
Beiträge: 541
Montellese befindet sich auf einem aufstrebenden Ast
Montellese eine Nachricht über MSN schicken
Standard

Ich finde, dass nichts gegen strpos einzuwenden ist. Natürlich ist es nicht genau die richtige Funktion, aber wofür reguläre Ausdrücke verwenden, wenn man den exakten String kennt?

Diese Aussage ist jetzt reine Spekulation, aber ich kann mir vorstellen, dass strpos schneller ist als ereg(i) oder preg_match (obwohl die preg-Funktionen schon ziemlich mächtig sind). Doof an strpos ist nur, dass es nicht case insensitive verwendet werden kann. Die beiden Aufrufe könnten natürlich wieder langsamer sein....

Aber die meisten "Anfänger" sind durch reguläre Ausdrücke viel mehr verwirrt, als dass sie sie weiterbringen würden. Ich habe strpos auch schon für solche Zwecke eingesetzt und es hat definitiv keine Nachteile, sofern man mit der Rückgabe zurecht kommt
Montellese ist offline  
Alt 21.04.2008, 11:47  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Zitat von Montellese Beitrag anzeigen
Doof an strpos ist nur, dass es nicht case insensitive verwendet werden kann. Die beiden Aufrufe könnten natürlich wieder langsamer sein....
dafür gibts stripos()
cycap ist offline  
Alt 21.04.2008, 12:23  
Erfahrener Benutzer
 
Registriert seit: 28.03.2008
Beiträge: 1.847
HPR1974 wird schon bald berühmt werden
Standard

Sorry, aber ich finde eben, dass hier verschiedene Funktionen irgendwie zusammengezimmert werden um ein Ergebnis zu erzielen, das ein einfacher regulärer Ausdruck mit preg_match() sofort und vorallem transparent und korrekt liefert.

Vorschläge wie if(is_numeric(strpos... zeigen doch niemandem wie man zielgerichtet Problemlösungen herbeiführt sondern wie man sich irgendwie über Umwege eine Lösung herbeiführen kann, die auch funktioniert keine Frage, aber doch mehrere Probleme birgt.

Das grösste Problem sehe ich hier, dass man einen code erstellt, von dem nicht ersichtlich wird was er genau macht. Die Position eines Strings finden, um damit festzustellen ob der String vorhanden ist ist nunmal durch die Brust ins Knie.
HPR1974 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
Sessions Problem StephenKing PHP Tipps 2008 3 16.10.2007 08:30
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
PHP / MySQL | Counter IP strpos Problem ... EoD PHP Tipps 2006 2 29.03.2006 14:27
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
Problem beim Vergleich ausgelesenen Daten(XML) mit strpos() PHP Tipps 2006 9 25.01.2006 10:16
Problem beim Vergleich ausgelesenen Daten(XML) mit strpos() PHP-Fortgeschrittene 2 25.01.2006 09:11
[Erledigt] Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Problem mit Weiterleitung PHP Tipps 2004-2 16 22.12.2004 17:49
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
smarty strpos, php strpos umlaute, strpos sonderzeichen, strpos funktioniert nicht, strpos smarty, strpos umlaute, php strpos sonderzeichen, strpos mehrere, javascript strpos, strpos problem, php strpos rückgabe, strpos php problem, strpos geht nicht, strpos reguläre, strpos javascript, php strpos umlaut, php strpos ungleich, php strpos funktioniert nicht, problem mit strpos, php strpos true

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:31 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum