ze5400 Skrevet 7. oktober 2008 Del Skrevet 7. oktober 2008 (endret) det 'mest korrekte' blir vel å bruke konstanten DIRECTORY_SEPERATOR som der definert i php til \ på windows og / på *nix Tusen takk! Endelig kan jeg kaste funksjonen min som sjekker etter hvordan O/S serveren kjører for å bestemme hvorvidt den skal bruke \ eller /. Irriterer meg sykt at jeg ikke har tenkt over at det antakelig er en konstant for det ja ... Må si mæ uenig i at selvlært ikke alltid er vellært. Ærlig talt. Selvlært er ikke alltid vellært. Såklart gir skole mer kompetanse da man faktisk har ett pensum man må igjennom. Jeg, som hobbybruker av php, har ingen problemer med å innse at jeg hadde SLETET om noen ba meg forklare datasortering av diverse ymse typer. (For genial film, se her: http://www.youtube.com/watch?v=F3oKjPT5Khg ) Med mindre man har litt disiplin kommer ikke programmeringstankegangen av seg selv, og igjennom en skole blir man gjerne tvunget til å holde på med elementære ting lenge nok til at man faktisk får det inn i fingrene og vel så det. Det selvlærte folk typisk gjør er å haste seg frem så de kan lage noe spennende og stort, dette være seg CMS, mafiaspill, script for nyhetspublisering e.l. Disiplin? Det trengs da ærlig talt ikke noe annet enn ørlite granne selvinnsikt. Jeg skal tilstå at jeg ikke var bedre enn mange her da jeg begynte. Ser tilbake til mine første poster i VB delen av forumet med gru! Men virkeligheten innhentet meg etter hvert, og jeg så at etter hvert at den eneste måten å lære riktig tankegang er ved å ta ett skritt av gangen. Og heldigvis har jeg MYYYYYE igjen å lære enda. Å lære er noe av det morsomste med dette. Endret 7. oktober 2008 av ze5400 Lenke til kommentar
AlecTBM Skrevet 22. oktober 2008 Del Skrevet 22. oktober 2008 (endret) Har en email viser (viser en email i et bilde) som jeg lagde til et prosjekt Klikk for å se/fjerne innholdet nedenfor <?phpheader('content-type: image/png'); //hente info$id = htmlspecialchars($_GET['id']);$admin = htmlspecialchars($_GET['admin']); if(!empty($id)) { //sql spørring er, ork ikke å koble til db og sånt nå $text = $id;} else { $text = 'Fant ikke bruker';} $length = strlen($text); if($admin == true) { $admin_add = 16; $icon = imagecreatefrompng('admin.png');} else { $admin_add = 0;}$font = 2;$font_height = imagefontheight($font);$img_length = $length * 6; //antall pixler per bokstav$img_length += 20 + $admin_add; //antall pixler på sidene$font_height = imagefontheight($font);$img_height = $font_height + 11; $im = @imagecreate($img_length, $img_height);$bg = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0);$white = imagecolorallocate($im, 255, 255, 255);imagecolorset($im, $white, 0, 0, 0); if($admin) { imagecopymerge($im,$icon,1,5,0,0,16,16,100); } imagestring($im, $font, 5 + $admin_add, 5, $text, $black); imagepng($im);imagedestroy($im);imagedestroy($icon);?>[/codeGrunnen til at det er støtte for et admin bilde (admin.png) er fordi dette er til et nettsamfunnForslag til forbedringer mottas med takk Demo http://alexander.no-ip.org/email_viser.php EDIT:Skal forbedre et opplastnings script jeg har og trenger et script som finner skadlige filer.kan alltids finne på noe sjøl, men orker ikke xD Endret 22. oktober 2008 av AlecTBM Lenke til kommentar
frisyre Skrevet 23. oktober 2008 Del Skrevet 23. oktober 2008 Kode som regner ut hvor lenge det er til lønning =) Herlig <3 Laget dette nettopp ;p <?php if(isset($_GET["submit"])) { $lonningsdag = $_GET["lonningsdato"]; $dagerimnd = date("t"); $dagnummer = date("d"); $dagerigjen = (($dagerimnd-$dagnummer)+$lonningsdag); echo "Det er ".$dagerigjen.($dagerigjen==1?" dag til lønning OMFG!":" dager til lønning!"); } else { echo '<h1>Hvilken dato får du lønning?</h1> <form action="" method="get"> <select name="lonningsdato"> <option value ="1">1</option> <option value ="2">2</option> <option value ="3">3</option> <option value ="4">4</option> <option value ="5">5</option> <option value ="6">6</option> <option value ="7">7</option> <option value ="8">8</option> <option value ="9">9</option> <option value ="10">10</option> <option value ="11">11</option> <option value ="12">12</option> <option value ="13">13</option> <option value ="14">14</option> <option value ="15">15</option> <option value ="16">16</option> <option value ="17">17</option> <option value ="18">18</option> <option value ="19">19</option> <option value ="20">20</option> <option value ="21">21</option> <option value ="22">22</option> <option value ="23">23</option> <option value ="24">24</option> <option value ="25">25</option> <option value ="26">26</option> <option value ="27">27</option> <option value ="28">28</option> <option value ="29">29</option> <option value ="30">30</option> <option value ="31">31</option> </select> <input type="submit" name="submit" value="OK"/> </form>'; } ?> Lenke til kommentar
Gjest Slettet+6132 Skrevet 23. oktober 2008 Del Skrevet 23. oktober 2008 (endret) Hva om jeg får lønn hver 14. dag? Hva skjer om jeg skriver inn den 31. februar? Koden er nok et eksempel på hva som ikke hører hjemme her i tråden. Du kunne da i det minste brukt date('t') sammen med en loop for å ikke skrive ut flere dager enn det faktisk er i måneden. <?php if(){} else { ?> <h1>blabla</h1> <form> <select> <?php for($i = 1;$i<=$dagerimnd;$i++) { echo "<option value=\"{$i}\">{$i}</option>\n"; } ?> </select> </form> <?php } ?> Og dessuten funker ikke koden din. I dag er det den 23., om jeg får lønn den 24. er det i følge ditt script 32 dager (((31-23)+24) = 32) til jeg får lønn. Se litt her heller Endret 23. oktober 2008 av Slettet+6132 Lenke til kommentar
Peter Skrevet 24. oktober 2008 Del Skrevet 24. oktober 2008 (endret) Synes denne tråden er moden for å få et nytt navn: Stort sett crappy kode du ikke burde se Vranglærtes kodeeksempler (dessverre vil denne ramme de få gode kodesnuttene her) How-not-to Kodespøkelser for sarte programmeringssjeler osv. Endret 24. oktober 2008 av Peter 1 Lenke til kommentar
AlecTBM Skrevet 24. oktober 2008 Del Skrevet 24. oktober 2008 Holder på å lage et nytt system til det https://www.diskusjon.no/index.php?showtopic=1017268&hl= Lenke til kommentar
tickinghd Skrevet 24. oktober 2008 Del Skrevet 24. oktober 2008 [........] do { if (($char = $allowed_chars[mt_rand(0, strlen($allowed_chars) - 1)]) !== false && ($unique ? strpos($ret, $char) === false : true)) { $ret .= $char; } } while (strlen($ret) < $len); [.........] } Jeg får følelse av at den if'en ikke var ment å vises til andre? Jeg synes iallefall at den var litt vel vanskelig å dekode. Lenke til kommentar
helbom Skrevet 30. mars 2009 Del Skrevet 30. mars 2009 (endret) her er en liten bbcode som jeg og en kompis laga for et par dager siden... bruksmåten er veldig enkel. bare skriv [tinyurl]http://en-lang-link-her.no[/tinyurl] så får du tilbake en tinyurl versjon av linken kanskje ikke så suuuper nyttig, men litt fancy er den jo function bbcode($data) { if (strstr($data,"[tinyurl]")) { preg_match("/\[tinyurl\](.*)\[\/tinyurl\]/isU",$data,$url); if (!eregi("http://",$url['1'])) { $href = "http://" .$url['1']; } else { $href = $url['1']; } $service_port = getservbyname('www', 'tcp'); $address = gethostbyname('turl.no'); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $field = "url"; $value = $href; $final = urlencode($field)."=".urlencode($value); socket_connect($socket, $address, $service_port); $in = "GET /index.php?save=y&url=".urlencode($value)."&robourlaction=Forkort HTTP/1.1\r\n"; $in .= "Host: turl.no\r\n"; $in .= "Content-type: application/x-www-form-urlencoded\r\n"; $in .= "Content-length: ".strlen($final)."\r\n\r\n"; $in .= "Connection: close\r\n\r\n"; $in .= $final."\r\n\r\n"; $out = ''; socket_write($socket, $in, strlen($in)); while ($out = socket_read($socket, 2048)) { $pattern = "/http:\/\/turl.no\/index.php\/(?:[a-zA-Z0-9])+/i"; if (preg_match($pattern,$out,$turl)) { $turl[0] = str_replace("index.php/","",$turl[0]); $data = preg_replace("/\[tinyurl\](.*)\[\/tinyurl\]/isU","<a href=\"".$turl[0]."\" target=\"_blank\">".$turl[0]."</a>",$data); } } } } en annen som er litt mer nyttig er denne.. nå er jeg ganske ny i det her sql injection greiene.. bare brukt mysql_real_escape_string() og htmlspecialchars() hittil.. så forbedringer på den blir veldig godt mottatt bruksmåte: legg $safeget = safe_get(); øverst i dokumentet og bruk så $safeget hva du vil. min bruk er slik: (brukeren får opp en helt blank side uten noe html) <?php (safe_get()) ? exit() : false; ?> --- function safe_get() { if ($_GET && !empty($_GET)) { foreach($_GET as $check) { $pattern = '/(DELETE|ALTER|SELECT|INSERT|UNION|CHAR|CONSTCHAR|INTO OUTFILE|DROP|TRUNCATE(.*))+/'; if (!preg_match($pattern,$check)) { $result = false; } else { $result = true; break; } } return $result; } } Endret 30. mars 2009 av helbom Lenke til kommentar
itsmebth Skrevet 3. april 2009 Del Skrevet 3. april 2009 safe_get er helt feil måte å takle SQL-Injection på. Den kan blokkere "lovlig" bruk, og vil ikke nødvendigvis blokkere SQL-Injection. Bruk mysql_real_escape_string, eller, enda bedre, prepared statements. Lenke til kommentar
Yawa Skrevet 25. august 2010 Del Skrevet 25. august 2010 (endret) [ ser at tråden er gammel, men prøver alikevel ] så, hvordan henter jeg informasjon fra databasen med prepared statements? Her er et kjappt og strippa eksempel med mysql_real_escape_string();: <?php $var_fld = mysql_real_escape_string($_POST['helloWorld']); $qry = sprintf('SELECT * FROM tbl WHERE fld = \'%s\'',$var_fld); $res = mysql_query($qry); if (mysql_num_rows($res) < 1) { return false; } else { $get = mysql_fetch_assoc($res); } ?> Dette eksempelet er hentet fra php.net, men klarte ikke helt å skjønne oppsettet... <?php $stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?"); if ($stmt->execute(array($_GET['name']))) { while ($row = $stmt->fetch()) { print_r($row); } } ?> Endret 25. august 2010 av Yawa Lenke til kommentar
xibriz Skrevet 25. august 2010 Del Skrevet 25. august 2010 Yawa: her ser du ett eksempel på de vanligste funksjonene: $id = "hehe, dette er SQL-injection"; $navn = "Fant ikke navn"; $conn = new mysqli("localhost", "brukernavn", "passord", "databasenavn"); $stmt = $conn->prepare("SELECT navn FROM navnetabell WHERE id = ? LIMIT 1"); $stmt->bind_param("i", $id); //Setter ID inn i spørringen, i = integer (finnes også s(tring) d(ouble) + noen jeg ikke husker i farten) $stmt->execute(); //utfører spørringen $stmt->store_result(); //Lagrer resultatet if ($stmt->num_rows() == 1) { //Jeg vil bare ha ett navn $stmt->bind_result($navn); //Binder resultatet til en variabel; $stmt->fetch(); //Henter utfører "bindingen", kan brukes i en while hvis du forventer flere resultater } $stmt->free_result(); return $navn; Eller prepare statements uten å binde opp noen variabler til spørringen: $navnArray = array(); $conn = new mysqli("localhost", "brukernavn", "passord", "databasenavn"); $stmt = $conn->query("SELECT * FROM navnetabell ORDER BY navn"); while ($row = $stmt->fetch_array()) { $navnArray[] = $row; } $stmt->free_result(); return $navnArray; Så finnes det masse fine funksjoner som å deaktivere autocommit, prepare flere spørringer også comitte eller rulle tilbake Tar forbehold om syntaxfeil Lenke til kommentar
Alex Moran Skrevet 25. august 2010 Del Skrevet 25. august 2010 (endret) Bruk heller PDO. Et par eksempler på bruk av PDO: Koble til: <?php $connection = new PDO('mysql:host=localhost;dbname=db_name', 'root', 'root'); Hente flere rader: <?php $statement = $connection->prepare("SELECT title, description FROM products WHERE type = ?"); $statement->execute(array($_GET['type'])); $products = $statement->fetchAll(PDO::FETCH_OBJ); foreach ($products as $product) { echo $product->title; } var_dump($products); Hente én rad: <?php $statement->prepare("SELECT * FROM products WHERE id = ?"); $statement->execute(array($_GET['id'])); $product = $statement->fetchObject(); var_dump($product); Legge til en rad: <?php $statement->prepare("INSERT INTO products (title, description) VALUES(?, ?)"); $statement->execute(array($_POST['title'], $_POST['description'])); echo $connection->lastInsertId(); Du har også en rekke andre metoder, men de finnes i manualen. Legg merke til at du også kan navngi parameterene når de bindes, men selv foretrekker jeg bruk av ?. Om du vil gå enda et skritt videre, kan du lese litt om ORMer som Doctrine. Doctrine har også et database abstraction layer bygget på toppen av PDO. Endret 25. august 2010 av Josh Homme Lenke til kommentar
Yawa Skrevet 25. august 2010 Del Skrevet 25. august 2010 vil dere si at dette er MYE bedre? og i hvilke tilfeller kan PDO, prepared statements og "ordinær" mysql_real_escape_string være fordelaktig? Det hele ligger vel i sikkerhet. Som eks. å hente ut en artikkel har ikke samme krav som å la en bruker publisere noe i en gjestebok. Lenke til kommentar
Jonas Skrevet 25. august 2010 Del Skrevet 25. august 2010 Å hente ut en artikkel kan også være risikabelt. Kanskje ikke alle har tilgang til alle artikler og vips - så har noen lurt inn en «' OR true #» og likevel fått hentet alle. Det er uansett en god ting å tilegne seg ordentlige vaner, enten sikkerhet er viktig eller ei. Lenke til kommentar
Thomas. Skrevet 17. februar 2011 Del Skrevet 17. februar 2011 Kode for å validere hele tall. Blokkerer ugyldige tall som +999+, -999 osv. public static function ValiderTall($val) { if(preg_match('/^\d+$/', $val)) { if(substr_count('+', $val) === 0) { return true; } else { return false; } } else { return false; } } Forslag til forberinger? Er det andre ugyldige type tall som kan komme igjennom funksjonen min? Lenke til kommentar
Jonas Skrevet 17. februar 2011 Del Skrevet 17. februar 2011 (endret) PHP har innebygde funksjoner for å validere forskjellige typer input. filter_var($number, FILTER_VALIDATE_INT); filter_var($email, FILTER_VALIDATE_EMAIL); filter_var($url, FILTER_VALIDATE_URL); .. dessuten kunne du vel bare skrevet det på følgende måte. function validateInteger ($value) { return preg_match('/^[0-9]+$/', $value); } Endret 17. februar 2011 av Jonas Lenke til kommentar
tnViking Skrevet 12. februar 2013 Del Skrevet 12. februar 2013 Er nesten litt synd at denne tråden dør ut, har brukt mange av disse kode snuttene over tiden, og tenkte at det er sikkert noen med flere kode snutter nå Lenke til kommentar
Gjest Skrevet 12. februar 2013 Del Skrevet 12. februar 2013 All you need is Packagist Lenke til kommentar
quantum Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 (endret) - så har noen lurt inn en «' OR true #» og likevel fått hentet alle. Eventuelt fått sletta alle artiklene, endret alle passordene etc. Selv om spørringen i utgangspunktet er en select kan inject-koden være hva som helst ... http://www.unixwiz.n...-injection.html Et av de morsomste eksemplene jeg vet om stammer fra det svenske riksdagsvalget hvor det er mulig å skrive fritekst på stemmesedlene. (Disse må da digitaliseres eller punches i ettertid.) Det er sef. mange som stemmer på Kalle Anka-Partiet og slikt, men jaggu var det ikke noen som stemte på partiet DROP TABLE VALJ også ... Om det kunne ha virket er de visst ikke blitt enige om enda ... :o) http://www.val.se/val/val2010/handskrivna/handskrivna.xls Endret 13. februar 2013 av quantum Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå