Vraag & Antwoord

Webprogrammeren & scripting

php vraag

18 antwoorden
  • Waarom wekt het zo wel goed en als ik er meer regels bij zet dan blockt hij ineens alles. if (strrpos($email,'hotmail') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>"; if (strrpos($email,'freemail') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>"; Wat kan de oorzaak zijn?
  • En wat zet je er dan nog meer bij? Moeten wij maar gaan gokken wat er mis kan zijn?
  • Ik bedoel dit zo werkt het goed if (strrpos($email,'hotmail') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>"; if (strrpos($email,'freemail') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>"; Maar zo niet want dan blockt hij alles ook wat er niet in staat. if (strrpos($email,'hotmail') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>"; if (strrpos($email,'freemail') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>"; if (strrpos($email,'yahoo') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>"; if (strrpos($email,'msn') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>";
  • [quote:6da08d9282="sony"] zo werkt het goed if (strrpos($email,'hotmail') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>"; if (strrpos($email,'freemail') > 0) $stop = "<center>".translate("ERROR: Sorry! Invalid email!")."</center>"; [/quote:6da08d9282] Werkt dit echt? Ik mis wat '{}'...
  • [quote:90d3cb6146="Remytje"]Werkt dit echt? Ik mis wat '{}'...[/quote:90d3cb6146]Zolang je één commando na een if (else etc ook natuurlijk) gebruikt, hoef je geen accolades te gebruiken. Sony: check de [url=http://www.php.net/manual/en/function.strrpos.php]manual[/url], volgens mij vergelijk jij verkeerd... [edit]Typo's...[/edit]
  • [quote:99cdd094ed="Bill Gates"]Zolang je één commando na een if (else etc ook natuurlijk) gebruikt, [b:99cdd094ed]hoe je geef [/b:99cdd094ed]accolades te gebruiken.[/quote:99cdd094ed] Bill, zo laat is het toch nog niet? :wink: Ik heb in ieder geval er weer wat bij geleerd :D
  • De functie strrpos volgens [url=http://www.php.net/strrpos]php.net[/url] :): [quote:4d1eb8ab5c]Returns the numeric position of the last occurrence of needle in the haystack string. Note that the needle in this case can only be a single character. If a string is passed as the needle, then only the first character of that string will be used.[/quote:4d1eb8ab5c]Oftewel: Zodra je een string meegeeft zal alleen het eerste 'teken' vergeleken worden. Dus als je als $email al de waarde "piro@himalayah.com" zou hebben, is de waarde al > 0 (5 in dit geval). Zowiezo kun je beter iets anders verzinnen, want als je email adres bijvoorbeeld al met "[b:4d1eb8ab5c]msn[/b:4d1eb8ab5c]atuurlijk@jp.nl" zou beginnen, wordt het ook al afgewezen :).
  • Je zou inderdaad beter kunnen checken op "@hotmail", dat zal beter werken...
  • Ja ik snap jullie wel maar ik ben maar een simpele beginner
  • [quote:105fc0748e="Bill Gates"]Je zou inderdaad beter kunnen checken op "@hotmail", dat zal beter werken...[/quote:105fc0748e] Klopt dat is dus de fout hij kijkt alleen naar de letters en niet alleen naar hele naam. shit iemand een idee hoe dat zo aan te passen is ? veder werkt hij erg goed alleen hij moet de helenaam pakken en niet alleen de letters.
  • Allereerst zou ik het emailadres controleren op geldigheid door het op te slaan in bijv. $adres en het te controleren met[code:1:07608d017b]if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $adres)){ ... // Adres is geldig. }[/code:1:07608d017b]Vervolgens wil je de code controleren op het bestaan van een string, dat kan je waarschijnlijk het berste doen met ereg(), of beter nog; met eregi(), aangezien deze geen rekening houdt met hoofdletters, wat in het geval van emailadressen ook niet interessant is. Op de plek waar boven staat "..." zou je dus het volgende kunnen plaatsen:[code:1:07608d017b] if (eregi("@hotmail.",$adres)){ ... // Stel een variabele in die jou vertelt dat het geblokkeerd moet worden } elseif (eregi("@freemail.",$adres)){ ... // Stel een variabele in die jou vertelt dat het geblokkeerd moet worden } // Enzovoorts...[/code:1:07608d017b]Ik heb deze code niet getest, maar met de handleiding van PHP.net ernaast moet je hiermee toch een heel eind komen. Succes ermee! - Basje.
  • Ik heb die code erin gegooit en hier en daar wat bij gewerkt en volgens mij werkt hij. Bas hartstikke Bedankt.
  • [quote:459ab9ca2f="BasHamar"]Allereerst zou ik het emailadres controleren op geldigheid door het op te slaan in bijv. $adres en het te controleren ...[/quote:459ab9ca2f] .info adressen slikt 'ie niet [quote:459ab9ca2f="BasHamar"]Vervolgens wil je de code controleren op het bestaan van een string, dat kan je waarschijnlijk het berste doen met ereg(), of beter nog; met eregi(), aangezien deze geen rekening houdt met hoofdletters, wat in het geval van emailadressen ook niet interessant is. [/quote:459ab9ca2f]Zijn strpos() en/of stristr() niet geschikter? Heb het nooit getest maar een simpele string search lijkt me sneller dan een regexp, als ik fout zit hoor ik het wel :)
  • [quote:dd17ff4894="Annie"].info adressen slikt 'ie niet[/quote:dd17ff4894]Sorry, mijn fout... Al die veranderingen op internet ook... ;) Het moet dus zijn:[code:1:dd17ff4894]if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $adres)){ ... // Adres is geldig. }[/code:1:dd17ff4894] [quote:dd17ff4894="Annie"]Zijn strpos() en/of stristr() niet geschikter? Heb het nooit getest maar een simpele string search lijkt me sneller dan een regexp, als ik fout zit hoor ik het wel :)[/quote:dd17ff4894]Hmmm... Misschien heb je wel gelijk, maar ik werk altijd graag met eregi(), weet eigenlijk ook niet waarom. Dussuh, sony: de code is voor verbetering vatbaar, aan jou om dat zelf uit te zoeken. :D - Basje.
  • Mooi en hoe kan je het omdraaien (als het nodig moet zijn) dus dat alleen de opgegeven mails toe gelaten worden. Veder werkt het script zeergoed moet ik zegen.
  • tuurlijk moet je hier strpos gebruiken, een regular expression voor een simpele string is nogal overkill. Misschien met heel veel adressen die je wil checken, maar dan nog... en als je dan toch regexps wilt gebruiken, dan kun je beter met de preg variant in php werken. De werking verschilt niet veel (behalve dat deze veel dichter tegen perl aanligt, waar ik persoonlijk bekender mee ben) maar is wel sneller dan de ereg methode.
  • Ok, ff een vraagje tussendoor aan Jurriaan R... Stel ik heb een pagina met daarop alleen 100 regexps zoals hierboven en ik vervang die door strpos, enig idee hoeveel sneller dat zou zijn? Ongeveer uiteraard, maar in welke orde moet ik dan denken? - Basje.
  • [quote:99d264d5fb="BasHamar"]Ok, ff een vraagje tussendoor aan Jurriaan R... Stel ik heb een pagina met daarop alleen 100 regexps zoals hierboven en ik vervang die door strpos, enig idee hoeveel sneller dat zou zijn? Ongeveer uiteraard, maar in welke orde moet ik dan denken? [/quote:99d264d5fb] kan je daarvoor geen testpaginaatje schrijven? 1. begintijd bepalen 2. stukje code tig keer uitvoeren 3. eindtijd bepalen 4. verschil is de verstreken tijd en dat kan je dan uitvoeren voor de regexp en de strpos (en evt. met verschillende strings: bjiv. lang/kort, veel/weinig matches)

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.