Inlägg

Inlägg som jreklund har skrivit i forumet
Av jreklund

Var disken en NTFS? I sådant fall har jag alltid haft lyckat resultat med kraschade tabeller med hjälp av TestDisk.

Vill man verkligen ha innehållet ska ju disken klonas innan, så att man inte läser av disken mer än en gång.

Av jreklund

Ledsen, men kan inte hjälpa dig utan att se några riktiga exempel och programkod.

Av jreklund

@vetintevad: Omöjligt att veta vad du gör för fel utan att se någon programkod. Om det gäller inskickning av URL till google. Så lägger dem till dindoman.se framför alla adresser så det är bara sitemap.xml som du skall fylla i inte http://dindoman.se/sitemap.xml. Du brukar få en förhandsgranskning på hur de tolkar URL:en innan man trycker på OK.

Av jreklund

sitemap.xml är inget krav, det är ett sätt att berätta för Google vilka sidor som finns.
De är inte alltid de tar hänsyn till den (struntar i resten av sidorna), men om du lägger in något som inte finns. Kommer de garanterat vara där och "rycka i trådarna", vilket hända hos en kund till mig.

Kunden i fråga fick många sidor på Google som sa "Sidan finns inte" för den letade efter bloggkategorier som inte användes.

Av jreklund

Florrpan menar att du inte ska publicera hemsidan på nätet utan använda dig utav en lokal webbserver när du utvecklar dina hemsidor.

Instant Wordpress är en lokal webbserver, med Wordpress 4.2.4 (väldigt gammal). Inte provat det programmet, men ska ju inte vara några problem att uppgradera till senaste versionen automatiskt.

Wordpress har sin egen lista på lokala servrar:
https://codex.wordpress.org/Installing_WordPress#Installing_W...

Personligen föredrar jag dock att installera det manuellt, för det kommer du behöva göra vid publicering. Så en lokalserver utan Wordpress är att föredra t.ex. Wampserver* eller XAMPP.
För att sedan installera Wordpress manuellt.
https://codex.wordpress.org/Installing_WordPress#Famous_5-Min...

* En tråd om olika felsökningstips om den inte startar:
http://www.sweclockers.com/forum/trad/1470840-problem-med-wam...

Av jreklund

Du ska inte förlita dig på <h1>-taggar. Google faller oftast tillbaka till dem om man gör fel. <title>-taggar är det som gäller.

Om du kan så generera en sitemap.xml också. Så Google vet vilka sidor som finns.
https://support.google.com/webmasters/answer/183668?hl=sv
https://www.sitemaps.org/protocol.html

Av jreklund

Nu har jag inte läst vilka META-taggar de syftar på. Men om det är "keywords" de syftar på har jag inte sett en vinst på att använda dem på senare år. Däremot är det viktigt att lägga in dina sökord som du vill matcha med på Google inuti rubriken (<title>) och beskrivningen (<meta name="description"...>).

Om vi tar följande sida som ett exempel (din egen tråd). De här är de grundläggande bitarna inom SEO. Utan dessa försöker google gissa sig till vad som din hemsida handlar om. <h1> taggen tar den som rubriken på sidan och försöker leta efter en stor klunga text för beskrivningen.

<title>SEO- optimering - Programmering och digitalt skapande</title> <meta name="description" content="Har en egen hemsida sen n&aring;gra m&aring;nader tillbaka. T&auml;nker att det &auml;r dags att optimera den men har n&aring;gra fr&aring;gor och funderingar. Hemsidan &auml;r byggt p&aring; en script..."/>

Du kan sedan berätta för sociala medier på nätet vad din hemsida handlar om. Med hjälp av Open Graph.

<meta property="og:title" content="SEO- optimering"/> <meta property="og:description" content="Har en egen hemsida sen n&aring;gra m&aring;nader tillbaka. T&auml;nker att det &auml;r dags att optimera den men har n&aring;gra fr&aring;gor och funderingar. Hemsidan &auml;r byggt p&aring; en script..."/> <meta property="og:url" content="http://www.sweclockers.com/forum/trad/1486989-seo-optimering"/> <meta property="og:image" content="http://www.sweclockers.com/forum/trad/1486989/og-image"/> <meta property="og:type" content="article"/> <meta property="og:site_name" content="SweClockers.com"/> <meta property="fb:admins" content="669778387"/>

Annat man bör tänka på är att leverera din hemsida via endast en domän.
www.sweclockers.com (i det här fallet)
sweclockers.com (pekar om till www.sweclockers.com)

Att använda sig utav HTTPS har givit en ökad placering på Google.

Hur snabbt laddar hemsidan.

Är hemsidan mobilanpassad.

Av jreklund

Hej, tyvärr har jag ingen snygg lösning på problemet, då ditt abonnemang på Wordpress.com inte stödjer tillägg.

Du kan använda dig utav Google Forms istället för att be dem mejla in bilderna, då hamnar svaren direkt i ett Excel-ark med länkar till bilden. Dock så måste de som laddar upp ha ett Gmail konto och så hamnar bilderna rätt in i din Google Drive.
https://sites.google.com/site/scriptsexamples/home/announceme...

Av jreklund

Att döma av specifikationen på Amazon kan du använda dig utav 6 oberoende källor. T.ex. en Fon Gramofon per Zon. Eller koppla ihop zon 1-3 till Bus 1 och zon 4-6 till Bus 2, för att styra över/nedervåning med två Fon Gramofon.

Av jreklund

Vad har du för teckenkodning på alla dina filer? I t.ex. Notepad++ så ser man det längst ner till höger. Skall stå UTF-8 inuti ALLA filer.

Konvertera till UTF-8: Encoding -> Convert to UTF-8

Glöm inte bort att specificera <meta charset="utf-8"> inuti din <head> tagg i HTML koden för att få rätt inmatningar. Och även PHP:

header('Content-type: text/html; charset=utf-8');

Du kan validera att dina strängar är UTF-8 med hjälpa av:
http://php.net/manual/en/function.mb-detect-encoding.php

Själv exporterar jag till csv såhär:

ob_start(); ob_clean(); header("Content-Disposition: attachment; filename=\"export.csv\""); header("Content-type: application/csv; charset=utf-8"); header("Pragma: cache"); header("Cache-Control: public, must-revalidate, max-age=0"); header("Connection: close"); header("Expires: ".date("r", time()+60*60)); header("Last-Modified: ".date("r", time())); header("Content-length: ".strlen($file)."\r\n"); echo $file; ob_flush(); exit();

Du kan alltid kolla vilken som är standardteckensnitt i kundens Excel och sedan konvertera med mb_convert_encoding, som du skrev om tidigare.
Om jag inte missminner mig använder Excel Windows-1252.

mb_convert_encoding($str, "Windows-1252", "UTF-8");

Av jreklund

@Naruori World Wide Web Publishing Service är tjänsten för Server: Microsoft-IIS/10.0 och kommer ibland förinstallerat/aktiveras i en Windows 10 uppgradering.

Om du startar Internet Information Services (IIS) Manager via startmenyn alternativt söker efter inetmgr. Kan du där se i vänstermenyn vilka webbapplikationer som finns.

Om du inte har några webbapplikationer installerade så är det fritt fram att inaktivera. Om du märker att något slutar fungera, så kan du bara aktivera tjänsten igen.

IIS är Microsoft webbserver. Det finns ju Apache som du nu försöker installera och den tredje stora är nginx.

Av jreklund

@Naruori Det ser som om du aktiverat Microsoft inbyggda webbserver IIS på datorn/servern. Du behöver därför stänga av/avinstallera tjänsten alternativt byta port på Wamp.

Stänga av
1. Startmenyn
2. Skriv in services.msc och starta den
3. Scrolla ner till World Wide Web Publishing Service och stoppa tjänsten. Du kan även stänga av den permanent härifrån.

Avinstallera (Windows 7/8/10)
1. Kontrollpanelen
2. Program och funktioner
3. Aktivera eller inaktivera Windows-funktioner
4. Bocka ur Internet Information Services

Byta port
1. Högerklicka på Wamp
2. Tools
3. Use a port other than 80
4. Välj t.ex. 8080
5. Besök hemsidan med http://localhost:8080/

Du kan ju även byta port på IIS, om du har någon tjänst som behöver vara igång där med. Där har jag dock inga lättare steg att redogöra.

Av jreklund

De frågar inte längre efter SMTP, det gjorde den i äldre versioner.

Vänsterklickar man på ikonen och går under Apache/MySQL och sedan Service administration så kan man se vilken tjänst som inte vill starta.

Högerklickar man och väljer Tools kan man testa portarna 80 (Apache) och 3306 (MySQL). Där får man även information om vilket program som blockerar den. Om det är Skype så stänger du av port 80 under Tools -> Options -> Advanced -> Connection -> "Use port 80 and 443..."

Du får ingen varning om "Visual C++ Redistributable"? För du behöver inte bara 2012 som de länkar till vid nerladdning, utan jag är alltid tvungen att installera fler. Jag har 2008,2010,2012,2013 och 2015; Beror på vilka PHP/Apache versioner du använder. Då jag använder PHP 5.3.7 - 7.1.1 så behövs alla.

Punkt 20 i felsökningstipsen tar upp C++.
If you have a 64-bit Windows, you must install both 32 and 64bit versions, even if you do not use Wampserver 64 bit.

Du finner senaste 3.0.8 patchen här:
http://forum.wampserver.com/read.php?2,138295

Deras felsöknings tips:
http://forum.wampserver.com/read.php?2,134915

Av jreklund

Du behöver installera ext3 drivrutiner, Windows klarar inte läsa hårddisken annars.
http://www.ext2fsd.com/
http://www.fs-driver.org/

Av jreklund

@Pelle Jag använder alltid regex101.com för att skapa mina regex. Och ibland phpliveregex.com för att testa dem på webben i PHP. Du kan hitta ett par exempel på regexlib.com.

Om du vill ta bort <html> taggar kan du använda följande. Men om användarnas** html kod ska fungera måste du använda HTML Purifier (och hoppa över allt i det här inlägget)

$newstr = filter_var($str, FILTER_SANITIZE_STRING);

Du är dock helt säker mot XSS attacker om du alltid använder htmlspecialchars eller htmlentities vid utskrift. Vilket Sweclockers använder sig utav, då den inte tar bort min <html> kod i den här raden.

echo htmlspecialchars($str, ENT_QUOTES, "UTF-8");

Det här är detsamma som ovan, OM default_charset (php.ini) är UTF-8 (standard i PHP 5.6). Varför jag skriver som ovan istället och väljer själv.

echo filter_var($str, FILTER_SANITIZE_FULL_SPECIAL_CHARS);

Skriver du ut användarnas kommentar inuti en <div>_användare_kommentar_</div>* med hjälp av htmlspecialchars så kommer inga attacker att ske, du behöver inte ens ta bort <html> taggarna, då du kommer visa dem som text. Skulle du lägga det i en onmouseover="_användare_kommentar_" eller glömmer htmlspecialchars ligger du riktigt illa ute.

Ska du stödja festil kan du använda dig utav BBCode, som Sweclockers gör.

* <p> etc fungerar ju med
** En admins html kod, vanliga användare skall aldrig få använda <html> kod.

Av jreklund

Följande fungerar lika, men är ju en frågan om tydlighet.

!filter_var($empreg, FILTER_VALIDATE_EMAIL) filter_var($empreg, FILTER_VALIDATE_EMAIL) === false

Jag uppdaterade din kod lite, du hade inget stöd för (bindestreck) inuti realname. Annars var du på rätt spår gällande att du skulle validera e-posten.

$unpreg = 'anna-karin.svensson'; $empreg = 'anna-karin.svensson@gmail.com'; $rnpreg = 'Anna-Karin Svensson'; $error = false; if( preg_match("/[^\p{L}\p{N}_.-]+/iu",$unpreg) || filter_var($empreg, FILTER_VALIDATE_EMAIL) === false || preg_match("/[^\p{L}\s-]+/u",$rnpreg) ) { $error = true; }

Sen ska man ju såklart berätta vad som gick snett. Men det är typ ingen idag som inte har JavaScript igång, så det har ju redan fått en sådan varning.

Skulle rekommendera att köra en trim() runt $_POST med. För det är ju inte direkt många som med flit väljer att ha ett mellanslag i början/slutet av användarnamnet. Och har de fått med det, så fungerar det ju inte att logga in sen, då de inte nästa gång skriver med ett mellanslag.

Av jreklund

Ledsen att jag glömde nämna det, men det är sällan rekommenderat att bara ta bort ogiltiga tecken utan att ge användarna en varning, dvs bara spara i databasen om informationen är korrekt. Vill man dock hoppa över det steget och ta bort ogiltiga tecken direkt, kan du göra t.ex. såhär:

// a-z, A-Z, åäö och ÅÄÖ $unpreg = preg_replace('/[^a-zåäö]+/i','',$_POST["username"]); // Tillåter tecknarna i ASCII mellan 97 och 246, vilket inkluderar é etc. Även _ , - och (punkt) $unpreg = preg_replace('/[^a-ö_\-\.]+/i','',$_POST["username"]); // Tar bort alla tecken utom bokstäver, siffror, _, -, och (punkt) $unpreg = preg_replace('/[^\p{L}\p{N}_\-\.]+/iu','',$_POST["username"]); // Tar bort alla tecken som inte får vara i en e-post, kontrollerar dock inte om den är giltig. $empreg = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL) // Tar bort allt utom bokstäver, - och (mellanslag). $rnpreg = preg_replace('/[^\p{L}\s\-]+/u','',$_POST["realname"]);

Det du dock bör göra är att kontrollera att allting stämmer, det gör man med preg_match. Vilket i det här fallet blir 'Error', då strängen innehåller siffror, och de är inte tillåtet i namn. Det här testen görs ju självklart grafiskt med JavaScript, men ifall någon inaktiverat dem, så skall det finnas ett stopp här med.

$str = 'abc123'; $error = false; if(preg_match('/[^\p{L}\s]+/u',$str)) { $error = true; } if(!$error) { echo 'Insert'; } else { echo 'Error'; }

Allt beror ju på vilka tecken man vill tillåta i t.ex. användarnamn.

Här har du en validering för e-post.

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) { echo("$email is a valid email address"); } else { echo("$email is not a valid email address"); }

Av jreklund

Det lättaste sättet att ändra färg på knappen är att inspektera den. Går att göra i alla stora webbläsare, i Google Chrome gör man följande:
Högerklicka (på knappen) > Inspektera

I den vänstra rutan som dyker upp ser du all HTML-kod. Där letar du dig uppåt tills hela knappen lyser och inte bara texten. När hela knappen lyser, klickar på den i vänstra rutan. Du ser nu CSS koden i den högra rutan, samt ser unika klasser (förhoppningsvis) i högra rutan.

Du kan med hjälp av den unika klassen ange en ny färg genom att ändra temats style.css eller "Anpassa CSS" beroende på vilket tema man har.

Av jreklund

Nej, då bygger man bara ett eget PHP script som skickar en egen $_POST till din hemsida eller manipulerar DOM via webbläsaren. Och då har man gått förbi JavaScript valideringen. Visst är det trevligt att ha, så att användarna får feedback i realtid, men den riktiga spärren måste ske i PHP-scripten.

Går att använda t.ex. regex för att ta bort alla otillåtna tecken, i det här exemplet tas allt utom 0-9, a-z, A-Z, $, _ och (punkt) bort. Men då kan ju inga kinesiska tecken användas. Finns ju regex för utf8 tecken med såklart.

$dbuser = preg_replace('/[^0-9a-zA-Z$_\\.]+/','',$_POST["dbuser"]);

Av jreklund

bindParam löser eventuella SQL-injections, så länge du inte låter användarna specificera ASC eller DESC sorteringar.

Det går att använda HTML Purifier för att validera html, om man måste skriva ut det på sidan (utan htmlspecialchars). Annars _ska_ man alltid använda htmlspecialchars($str, ENT_QUOTES, "UTF-8") innan man skriver ut någonting i webbläsaren som en användare har skrivit. Självklart går det att kombinera med filter_var för att t.ex. validera e-post* eller ta bort alla html taggar**. Dock är det inte skadligt att spara i databasen, så länge man använder htmlspecialchars eller htmlentities vid utskrift.

Är ju inte så vanligt att man använder < eller > i användarnamn direkt. Men filter_var känns mer användbar för att kontrollera siffror, url och e-post.

Ska du skriva ut användardata inuti inputfält måste du stänga/öppna citaten:

<input name="test" type="text" value="<?php htmlspecialchars($str, ENT_QUOTES, "UTF-8"); ?>" />

Du bör även specificera att din databas använder utf8mb4 (version >=5.5.3) och utf8 för PHP, för att få rätt teckenformat. Dina filer ska även använda UTF8 utan BOM.

Personligen väljer jag att kasta bort människor och inte skriver ut en separat text.

if(!isset($_SESSION['user_id'])) { header('Location: login.php'); }

Bara så du vet så klipper password_hash alla lösenord efter 72 tecken. Du kan kringå det genom att först köra en sha kryptering på lösenordet och köra en base64 encode över den. För att sedan hasha och salta med bcrypt.

/** * Verify users password against the one stored in the database. * @param string $password * @param string $userPassword * @return verified password true/false */ public function passwordVerify($password,$userPassword) { return password_verify( base64_encode( hash('sha384', $password, true) ), $userPassword ); } /** * Hash users password before storing it in the database. * @param string $password * @return hashed password */ public function passwordHash($password) { return password_hash( base64_encode( hash('sha384', $password, true) ), PASSWORD_DEFAULT ); }

EDIT: Glömde nämna att du inte har någon CSRF-skydd.
EDIT2: En matnyttig länk:
https://www.wordfence.com/learn/how-to-prevent-cross-site-scr...

*FILTER_VALIDATE_EMAIL
**FILTER_SANITIZE_STRING