Hur filtrerar jag inputs mot domännamn?

Permalänk
Medlem

Hur filtrerar jag inputs mot domännamn?

Har fastnat med min testsida i php.
Jag har googlat och testat olika exempel men får det inte att fungera. Det jag vill göra är att filtrera så att användare enbart kan posta länkar till databasen till tex google

Något filter som enbart accepterar http://google.com/* för denna rad

<input type="link" name="link" placeholder="Din länk" required />

Permalänk
Medlem
Skrivet av Cudage:

Något filter som enbart accepterar http://google.com/* för denna rad

Typ :

<input type="text" name="link" placeholder="Din länk" required pattern="https?:\/\/google.com\/.*?"/>

Men du behöver ju verifiera det på serversidan också.

Permalänk
Medlem

Det är ju något du får göra i backend eller javascript (men det kan ju användaren gå runt eftersom han har access till js koden)

Permalänk
Medlem
Skrivet av iXam:

Typ :

<input type="text" name="link" placeholder="Din länk" required pattern="https?:\/\/google.com\/.*?"/>

Men du behöver ju verifiera det på serversidan också.

Tack så mycket Känner mig som en tysk som pratar med en franskman när jag ger mig på php/sql
Nu när detta är ordnat på frontend hur gör jag då på databasen för att verifiera att användaren inte har gått runt detta?

Permalänk
Medlem
Skrivet av Cudage:

Tack så mycket Känner mig som en tysk som pratar med en franskman när jag ger mig på php/sql
Nu när detta är ordnat på frontend hur gör jag då på databasen för att verifiera att användaren inte har gått runt detta?

Det gör du inte i databasen utan i php.
Använd funktionen strpos (http://php.net/manual/en/function.strpos.php) eller regexp (https://en.wikipedia.org/wiki/Regular_expression).

Permalänk
Medlem
Skrivet av iXam:

Det gör du inte i databasen utan i php.
Använd funktionen strpos (http://php.net/manual/en/function.strpos.php) eller regexp (https://en.wikipedia.org/wiki/Regular_expression).

Är jag helt ute och cyklar nu med det jag lagt in? Vet inte hur jag ska skriva if satsen så att den kör strpos tillsammans med my_sql queryn så den postar till databasen om linken stämmer överens

if(isset($_POST['btn-submit'])) { $title = mysql_real_escape_string($_POST['title']); $link = mysql_real_escape_string($_POST['link']); $verifylink = 'https?:\/\/google.com\/.*?'; $postverify = strpos($link, $verifylink); if(mysql_query("INSERT INTO testdatabase(title,link) VALUES('$title','$link')")) { ?> <script>alert('Your link has been added ');</script> <?php } else { ?> <script>alert('Failed adding');</script> <?php } }

Permalänk
Medlem

@Cudage:

Ja det är inte mycket rätt där. Du blandar min regex-snutt från HTML-inputtaggen med en strpos.
Du kan läsa på hur strpos fungerar på länken jag skickade i förra inlägget, det finns exempelkod där.
Nu spelar du bara "kodbingo" och hoppas att det förr eller senare ska bli rätt.
Att ge dig rätt kod kommer visserligen göra att du kommer vidare men du har då inte lärt dig hur du ska lära dig saker framöver. Vilket bara kommer betyda att vi i forumet här kommer ha skrivit all kod åt dig i slutändan och du fortfarande står och stampar på ruta ett.

Så bege dig till manualsidan för strpos och läs på, lek/testa tills det blir rätt. Och gör det med så lite av den andra koden som möjligt för att minimera att det är fel någon annanstans.

Permalänk
Medlem
Skrivet av iXam:

@Cudage:

Ja det är inte mycket rätt där. Du blandar min regex-snutt från HTML-inputtaggen med en strpos.
Du kan läsa på hur strpos fungerar på länken jag skickade i förra inlägget, det finns exempelkod där.
Nu spelar du bara "kodbingo" och hoppas att det förr eller senare ska bli rätt.
Att ge dig rätt kod kommer visserligen göra att du kommer vidare men du har då inte lärt dig hur du ska lära dig saker framöver. Vilket bara kommer betyda att vi i forumet här kommer ha skrivit all kod åt dig i slutändan och du fortfarande står och stampar på ruta ett.

Så bege dig till manualsidan för strpos och läs på, lek/testa tills det blir rätt. Och gör det med så lite av den andra koden som möjligt för att minimera att det är fel någon annan stans.

Ja, du har rätt angående kodbingon men jag har läst om och om igen men inte blivit klokare av det tyvärr. Tror att det är min brist på kunskap för php som åter igen ställer till det.

Så otroligt krångligt att skriva kod med enbart vänster hand hehe, alla dessa specialtecken blir så krångliga att nå så det blir mest att man läser och försöker med kodbingo alá copy & paste när man läst samma rader om och om igen och inte blivit något klokare

Permalänk
Medlem
Skrivet av Cudage:

Ja, du har rätt angående kodbingon men jag har läst om och om igen men inte blivit klokare av det tyvärr. Tror att det är min brist på kunskap för php som åter igen ställer till det.

Så otroligt krångligt att skriva kod med enbart vänster hand hehe, alla dessa specialtecken blir så krångliga att nå så det blir mest att man läser och försöker med kodbingo alá copy & paste när man läst samma rader om och om igen och inte blivit något klokare

På manualsidan för strpos har du exempel på hur du kollar vilken position "a" är i en annan sträng.
Det du ska göra är att med strpos kolla om strängen "http://google.com/" är position 0 i en annan sträng. Om den inte är det (dvs ger annat värde än 0) så börjar ju inte strängen med "http://google.com/", eller hur?

Permalänk
Medlem
Skrivet av iXam:

På manualsidan för strpos har du exempel på hur du kollar vilken position "a" är i en annan sträng.
Det du ska göra är att med strpos kolla om strängen "http://google.com/" är position 0 i en annan sträng. Om den inte är det (dvs ger annat värde än 0) så börjar ju inte strängen med "http://google.com/", eller hur?

Känner mig otroligt korkad just nu. Jag har testat de olika exempel som visas i manualsidan, fungerar precis som du säger och jag testade kontrollera så att tex "http://google.com" fanns i strängen "http://google.com/test". Den echo:ar då att den finns efter position 0. Hänger jag med än så länge?

Det jag nu ville göra med koden är att köra en mysql_query för att lägga in i databasen när den återfinner "google.com" och att den echo:ar en error om den inte återfinner google.com i länken som hämtas från input rutan. Men jag kan ha skapat min egen förvirring med brist på kunskap.

<?php $mystring = 'http://google.com/test'; $findme = 'http://google.com'; $pos = strpos($mystring, $findme); if ($pos === false) { echo "The string '$findme' was not found in the string '$mystring'"; } else { Det är alltså här jag får för mig att jag kan köra en mysql_query för att lägga in tex $mystring i databasen } ?>

Permalänk
Medlem

@Cudage:

Förutom att du kollar att strpos inte returnerar false måste du ju även kolla om den returnerar rätt värde.
strpos("http://google.com/blablablabla","http://google.com/") returnerar ju 0 vilket är precis det vi är ute efter.
Så mao ska du antingen få in det i din befintliga if-sats eller ha en till (elseif kanske).

Sen när du fått allt detta att fungera så kanske du vill kunna kolla om länken är en https, så det inte blir fel om man skickar in en sådan.

Permalänk
Medlem
Skrivet av iXam:

@Cudage:

Förutom att du kollar att strpos inte returnerar false måste du ju även kolla om den returnerar rätt värde.
strpos("http://google.com/blablablabla","http://google.com/") returnerar ju 0 vilket är precis det vi är ute efter.
Så mao ska du antingen få in det i din befintliga if-sats eller ha en till (elseif kanske).

Sen när du fått allt detta att fungera så kanske du vill kunna kolla om länken är en https, så det inte blir fel om man skickar in en sådan.

Nu har jag fått till det så att inget läggs in i databasen när fel domän skrivs in! /victorydance
Har dock klantat mig och skrivit ihop så att jag visar båda alertsen när jag testar att kringgå pattern biten i inputen men det är inget som gör något ...ett problem för morgondagen:)

TACK SÅ MYCKET iXam! Du har varit till stor hjälp , blev ett ex antal timmar för att ordna enbart dessa rader men känns skönt att det fungerar

if(isset($_POST['btn-submit'])) { $title = mysql_real_escape_string($_POST['title']); $link = mysql_real_escape_string($_POST['link']); $findme = 'http://google.com'; $pos = strpos($link, $findme); if ($pos === false) { ?> <script>alert('Not a valid link');</script> <?php } else ( mysql_query("INSERT INTO testdatabase(title,link) VALUES('$title','$link')") ) ?> <script>alert('Your link has been added ');</script> <?php } ?>

Permalänk
Medlem

En fråga bara: Vilka guider på nätet idag använder fortfarande mysql_query? Blir förvånad när man ser folk som använder den. Kan förstå om någon gammal räv som höll på med PHP för länge sedan använder den av ren vana, men en som lär sig nytt?

Står tydligt att den är deprecated: http://php.net/manual/en/function.mysql-query.php

Permalänk
Medlem
Skrivet av trexake:

En fråga bara: Vilka guider på nätet idag använder fortfarande mysql_query? Blir förvånad när man ser folk som använder den. Kan förstå om någon gammal räv som höll på med PHP för länge sedan använder den av ren vana, men en som lär sig nytt?

Står tydligt att den är deprecated: http://php.net/manual/en/function.mysql-query.php

Det är en lämplig fråga Det var jag som letade reda på en gammal sida som hade en guide på olika funktioner jag tänkt testa mig på för något år sen men aldrig fått tid och sedan fortsatte jag lite med att försöka lägga in extra funktioner

Kanske helt onödigt i sig men nybörjare som man är så tänkte jag att jag bara kunde justera de rader med mysql till mysqli då det bara var en single page sida jag testat mig fram på, men dessa två kanske skiljer sig alldeles för mycket åt?

Permalänk
Medlem

Har inte använt mysqli, jag brukar använda PDO. I ditt fall skulle det kunna bli:

// Anslut try { $dbh = new PDO('mysql:dbname='.DBNAME.';host='.DBHOST, DBUSER, DBPASS); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die($this->response('Database error: '.$e->getMessage())); } // Kontrollera giltig länk här // Stoppa in $sql = "INSERT INTO testdatabase(title, link) VALUES(:title, :link)"; $stmt = $this->db->prepare($sql); $stmt->execute(array( 'title' => $_POST['title'], 'link' => $_POST['link'] )); if ($stmt->rowCount() > 0) { echo "<script>alert('Your link has been added ');</script>"; }

Här kan du se lite exempel också, där de använder mysqli också:
http://www.w3schools.com/php/php_mysql_prepared_statements.as...