Visar inlägg med etikett php. Visa alla inlägg
Visar inlägg med etikett php. Visa alla inlägg

lördag 26 mars 2011

Flytta lokal Wordpress

Vill du flytta din lokala Wordpress-blogg till en annan dator? Jag har min Wordpress-blogg tillsammans med en lokal Apache server - XAMPP lite med en MySQL-databas.

Jag köpte en ny dator och behövde flytta min blogg. Först installerade jag servern och Wordpress lokalt på datorn. Sedan kopierade jag mappen wordpress som jag hittade I c:\XAMPP\xampplite\htdocs. Sedan kopierade jag mappen wordpress som fanns I C:\XAMPP\xampplite\mysql\data. Eftersom jag har lösenord på databasen fick jag via phpmyAdmin ställa in det på min databas. Sedan fungerade allt som vanligt!

tisdag 13 juli 2010

Varannan, var tredje etc i en loop

Ibland vill man veta vilken post i en loop som är t ex den andra, den tredje eller den fjärde. Då kan man använda sig av operatorn MODULUS (%) i PHP.

Säg att jag vill veta vilken var fjärde post är i min loop. Jag startar min räknare på 1 (innan loopen börjar), kollar vilken post jag är på och räknar sen upp.

$count=1;
loop-start...
if(($count%4) == 0){ echo "4:e" }
$count++;
loop-slut...

TinyMCE tar konverterar automatiskt < och >

Använder man entity_encoding : "raw" i TinyMCE, kommer alla tecken att sparas som man skriver dem - förutom XML standarderna &amp; &lt; &gt; &quot; som omvandlas till & < > ". Vill man inte att tecknen automatiskts ska omvandlas, t ex för att man ska kunna skriva ut kod i texten, kan man använda htmlentities() på texten innan den skickas till TinyMCE-formuläret:

<textarea class="tinymce"><?php echo htmlentities($text);?></textarea>

Standard teckenuppsättning är ISO-8859-1. Använder man sig av UTF-8 måste man ange detta annars får man problem med bl a å ä ö.

<textarea class="tinymce"><?php echo htmlentities($text,ENT_COMPAT,'utf-8');?></textarea>

måndag 12 juli 2010

PHP sidbläddring / pagination med MySQL RAND()

Ibland vill man ha sidbläddring av slumpmässigt valda poster från en databastabell. För att det ska fungera kan man skapa ett slumptal och spara i en session. Slumptalet används sedan i queryn.

if (!isset($_SESSION['random_number'])) {
srand ((double) microtime( )*1000000);
$random_number = rand( );
$_SESSION['random_number'] = $random_number;
} else {
$random_number = $_SESSION['random_number'];
}

För att inte samma "slumpade" poster ska visa sig när man besökt en annan sida och sedan gått tillbaka måste man ta bort sessionen mellan besöken. För att särskilja de olika sidornas sessioner lägger jag till sidans unika id till sessions-namnet. Skriv såhär istället:

//array med id för de sidor som har slumpad sidbläddring
$page_ids[]=1;
$page_ids[]=2;
$page_ids[]=3;

foreach ($page_ids as &$value) {
if($page_id<>$value){
if (isset($_SESSION['random_number'.$value])) {
unset($_SESSION['random_number'.$value]);//tar bort de andra sidornas sessioner
}
}
}

if (!isset($_SESSION['random_number'.$page_id])) {
srand ((double) microtime( )*1000000);
$random_number = $page_id.rand( );
$_SESSION['random_number'.$page_id] = $random_number;
} else {
$random_number = $_SESSION['random_number'.$page_id];
}

I SQL-queryn, lägg till:
$query.=" ORDER BY RAND(".$random_number.") ";

Se hur sidbläddring / pagination med php fungerar i mitt tidigare inlägg Pagination / Sidbläddring med PHP & Mysql

Pagination / Sidbläddring med PHP & Mysql

Ska man hämta och visa många poster från databasen, t ex nyheter, kan man dela upp resultatet på flera sidor. Då sparar man sidladdningstid och besökaren slipper skrolla så mycket. Här är ett exempel på hur man skriver kod för att bläddra mellan sidor (på engelska "pagination").

<?php

//**** Öppna databasen ****

// Antal poster per sida
$rowsperpage=10;

// Aktuell sida
$pageSide=(isset($_GET["ps"]) && is_numeric($_GET["ps"]) && $_GET["ps"]>0 ? $_GET["ps"] : 1);

// Startpost
$offset=($pageSide>1 ? ($pageSide-1)*$rowsperpage : 0 );

// Visa posterna
$query="SELECT * FROM news LIMIT $offset, $rowsperpage"; 
$result=mysql_query($query);
while($row=mysql_fetch_array($result)){
echo $row['post'] . '<br>';}

// Totala antalet poster i tabellen
$query="SELECT COUNT(id) FROM news";
$result=mysql_query($query);
$row=mysql_fetch_array($result);
$total = $row[0];

// Totala antalet sidor
$maxpage=ceil($total/$rowsperpage);

// Visa navigeringen
?><div class="news_nav">
    <ul>
        <?php if($pageSide>1){?>
            <li><a href="?"><<</a></li>
            <li><a href="?ps=<?= $pageSide-1 ?>"><</a></li>
       <?php }else{ ?>
           <li class="inactive_page"><<</li>
           <li class="inactive_page"><</li>
       <?php } ?>
      <?php
        for($i=1; $i<=$maxpage; $i++){
          if($pageSide==$i)
             echo "<li class=\"current_page\">".$i."</li>";
          else
             echo '<li><a href="?ps='.$i.'">'.$i.'</a></li>';
        }
      ?>
     <?php if($pageSide<$maxpage){?>
        <li><a href="?ps=<?= $pageSide+1 ?>">></a></li>
        <li><a href="?ps=<?= $maxpage ?>"> >></a></li>
     <?php }else{ ?>
        <li class="inactive_page">>></li>
        <li class="inactive_page">></li>
      <?php } ?>
    </ul>
</div>

.news_nav ul {
display:block;
border:none;
text-transform:uppercase;
}
.news_nav ul li {
list-style:none;
float:left;
border:1px solid #FFF;
text-decoration:none;
margin:0 5px 0 0;
padding:0 5px;
}
.news_nav ul li:hover {
border:1px solid #000;
}
.news_nav ul li.current_page {
border:1px solid #000;
color:#000;
font-weight:bold;
background-color:#FFF;
}
.news_nav ul li.inactive_page, .news_nav ul li.inactive_page:hover {
border:1px solid #666;
color:#666;
}
.news_nav ul li a{line-height:normal;}

lördag 6 mars 2010

Kolla om ett datum ligger mellan två datum

<?php
$start_date = strtotime("2010-03-06");
$end_date = strtotime("2010-03-06");
$selected_date = strtotime(date('y-m-d'));
if($selected_date >= $start_date && $selected_date <= $end_date) {
    echo "Datumet ligger inom intervallet.";
}
?>
Om man vill ha med klockslag:
<?php
$start_date = strtotime("2010-03-06 00:00");
$end_date = strtotime("2010-03-06 20:00");
$selected_date = time();
if($selected_date >= $start_date && $selected_date <= $end_date) {
    echo "Datum & klockslag ligger inom intervallet.";
}
?>

söndag 21 februari 2010

Problem med åäö i formulär och PHP mail()?

Ser åäö ut som åäö ? Prova att använda PHP-funktionen utf8_decode() på texten som ska mejlas. Funktionen kodar om teckenuppsättningen från UTF-8 till ISO-8859-1.

Man kan också lägga till Content-type: text/plain; charset=UTF-8' i mail-headern.

Läs mer om PHP:s mail-funktion och se andra lösningar >>

lördag 28 november 2009

Visa alla PHP-fel

Visas saker inte som du vill att de ska på din PHP-sida och du har ingen aning om varför? På vissa webbservrar är felrapporteringen avstängd. Det kan du se i filen php.ini under display_errors. Du kan aktivera felrapporteringen så visas vad som gått fel med koden. Skriv överst på din php-sida:

ini_set('display_errors',1);
error_reporting(E_ALL);

Nu visas alla felmeddelanden.

Är felrappporteringen på som standard så kan du stänga av den:

error_reporting(0);

Läs mer om funktionen error_reporting()
Läs mer om funktionen ini_set()

söndag 1 november 2009

ÅÄÖ från databasen blir konstiga tecken

Visst är det hopplöst när våra svenska tecken inte visas korrekt på hemsidan. Det kan t ex hända om man hämtar text från en databas. För att undvika problemet testa att:

- Ange meta content-type: <meta http-equiv="content-type" content="text/html;charset=UTF-8">

- Spara dina php-filer i utf-8: Modify -> Page Properties -> Title/Encoding: Encoding: Unicode (UTF-8) (i Dreamweaver)

- Ange efter databaskopplingen:
mysql_query( "SET NAMES utf8"); (default kan också ställas in direkt i databasservern, http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html )

mysql_query( "SET CHARACTER SET utf8");

- Använd utf-8 som teckenkodning och utf8_swedish_ci som kollationering på tabellerna i databasen.

söndag 6 september 2009

imagecreatefromjpeg() ...is not a valid JPEG file..

Om man ska använda funktionen imagecreatefromjpeg() på en jpg-bild och får felmeddelandet:

"...is not a valid JPEG file..."

kan det bero på att filen är korrupt.

GD är väldigt känslig när det gäller korrupta filer och fast bilden kanske går att öppna i andra program (för att den bara är "lite" korrupt) så tillåter GD inte det.

Lägg till en test först:
//ta bort felmeddelanden med @
$image = @imagecreatefromjpeg($file);
//fortsätt bara om bilden är ok
if($image){
...
Om bilden går att öppna i t ex Photoshop så kan du prova att spara om den där först.

fredag 7 augusti 2009

Använd jQuery för att kolla om användarnam är ledigt

Visst blir formuläret snyggare och enklare att fylla i om besökaren direkt ser om användarnamnet redan är upptaget. Fixa det enkelt med jQuery!

Lägg inom HEAD-taggen:

<script type="text/javascript" src="includes/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#username").change(function() {
var usr = $("#username").val();
if(usr.length >= 3) {
$("#validateUsername").html('<img src="images/loader.gif" height="16" width="16" /> kontrollerar tillgänglighet...');
$.ajax({
type: "POST",
url: "includes/availability.php",
data: "username="+ usr,
success: function(msg){
$("#validateUsername").ajaxComplete
(function(event, request, settings){
$("#validateUsername").html
(msg);
});
}
});
}
});
});
</script>

I formuläret:

<input type="text" name="username" id="username" /> <span id="validateUsername"></span>

I filen check.php kontrollerar du om användarnamnet ($_POST['username']) är tillgängligt och skriver ut (echo) resultatet som då hamnar inom span-taggen med id validateUsername.

Laddningssymbolen kan du spara härifrån:

onsdag 5 augusti 2009

Generera slumptal

Generera slumptal med MySQL

SQL för att generera slumptal mellan 0 och 99:

SELECT floor(rand() * 100);

Funktionen rand() genererar ett decimaltal som är större än eller lika med 0 men mindre än 1. Sätt ett tak för slumptalet, här i exemplet 100. Använd funktionen floor() som avrundar nedåt för att få heltal.

För att generera slumptal mellan 10 och 20:

SELECT FLOOR(RAND()*20)+10;

Vill du ha ett slumptal med exakt 4 siffor skriv:

SELECT FLOOR(RAND()*1000)+9999;

Läs mer om funktionen rand() på den officiella hemsidan för MySQL


Generera slumptal med PHP

Genererar en integer:
echo rand();

Genererar ett slumptal mellan 5 och 15:
echo rand(5, 15);

Läs mer om PHP-funktionen rand() på PHP:s officiella webbplats

onsdag 22 juli 2009

Antalet dagar i år

Så här får man fram antalet dagar för innevarande år:

echo date("z", mktime(0,0,0,12,31,date("Y"))) + 1;

tisdag 17 februari 2009

Slipp skriva ut hela sökvägen varje gång du inkluderar en fil

Har man många filer man inkluderar ofta på olika sidor så kan man genom att använda php_value include_path eller set_include_path() slippa ange hela sökvägen varje gång man kallar på någon av filerna.

Lägg till en sökväg i .htaccess:
php_value include_path ".:/sökvägen/till/include-mappen"
Tänk på att htaccess-filen ska ligga i roten.

Lägg till en sökväg i php-filer:
set_include_path('.:/sökvägen/till/include-mappen');

Ram (border) runt bild skapad med GD

Jag ville gärna ha en ram (border) runt min captcha så jag skrev en funktion och stoppade in i PHP-klassen från PHPCaptcha.org (se mitt förra inlägg). Funktionen kan även användas fristående för GD-bilder.

function drawBorder($img, $color, $thickness = 1)
{
$color=str_replace("#","",$color);
$color = imagecolorallocate($img, hexdec('0x' . $color{0} . $color{1}), hexdec('0x' . $color{2} . $color{3}), hexdec('0x' . $color{4} . $color{5}));
$x1 = 0;
$y1 = 0;
$x2 = ImageSX($img) - 1;
$y2 = ImageSY($img) - 1;
for($i = 0; $i < $thickness; $i++)
{
ImageRectangle($img, $x1++, $y1++, $x2--, $y2--, $color);
}
}

Använd funktionen såhär: drawBorder($img, "#000000", 1);

Captcha - skydda formuläret från spam

Ett sätt att skydda sina formulär från att bli bombarderade med spam är s k captcha-bilder.

PHPCaptcha är en variant som man kan ladda ner gratis och lägga till i sina formulär.

Ladda ner PHPCaptcha >>

Instruktion om hur man lägger in den i sitt formulär >>


Vill du ha en ram (border) runt din PHPCaptcha så kan du läsa om det i nästa inlägg.

fredag 30 januari 2009

Open source program som liknar Dreamweaver

Jag är på jakt efter ett gratis alternativ - open source program som kan ersätta Dreamweaver. Hittills har jag hittat och testat två olika, Aptana studio och NVU. Tyvärr gillade jag inget av dem vilket kan bero på att jag inte gett dem tillräckligt med tid.

Aptana studio Pro test i 30 dgr

För att få stöd för PHP var jag tvungen att installera en PHP-modul vilket var ganska lätt:

Help -> Open My Aptana
Klicka på Plugins till höger och välj PHP

Men, jag väljer bort detta program för att:
PHP-filer kan inte visas i WYSWIG-läge.
Svenska å ä ö totalförstördes.
Tar lång tid att starta (jämfört med Dreamweaver)
Snurrigt – jag vill att det ska gå snabbt och lätt att sätta sig in i hur programmet fungerar.
Jag gillar inte att både remote filer och lokala filer ligger i samma fönster - risk för ihopblandning...

NVU
Programmet startar snabbt

Jag väljer bort detta för att:
Ej snygg kodfärning (php) - ologisk färgning av kod
Ingen snygg WYSWIG - viss kod syns...
Den ändrar i min kod

måndag 26 januari 2009

Flera GoogleMap-keys på samma webbplats

Om man har flera olika adresser till sin webbplats och samtidigt har en GoogleMap kommer kartan bara att visas för den adress som man genererat en API-nyckel för. För att kartan alltid ska visas, oavsett vilken adress besökaren skriver in, så tar vi hjälp av PHP:


<?php
//array för de olika webbplatsernas API-nycklar
$Googlemap_api_key["www.webbplats-namn1.se"] = "nyckel-1";
$Googlemap_api_key["www.webbplats-namn2.se"] = "nyckel-2";
?>
<script src="http://maps.google.com/maps?file=api&amp;v=2.121&amp;key=<?php echo $Googlemap_api_key[$_SERVER['HTTP_HOST']];?>&oe=8859-1" type="text/javascript"></script>
...

Om du inte vet hur man lägger in en karta från Google på din hemsida så läs mitt tidigare inlägg >>

fredag 16 januari 2009

Blockera en IP-adress och/eller domän med .htaccess

Om man vill blockera domäner eller IP-adresser från att besöka sin hemsida kan man ange detta i .htaccess-filen:

order allow,deny

#Lista de IP-adresser och/eller domäner du vill blockera
deny from IP-adress eller domän-namn
deny from IP-adress eller domän-namn

#blockera en serie med IP-adresser, t ex från 127.0.0.0 till 127.0.0.255
deny from 127.0.0

torsdag 15 januari 2009

Visa egna felmeddelanden - .htaccess

Ibland får webbservern problem och den genererar då ett felmeddelande. Med hjälp av .htaccess kan man anpassa dessa meddelanden.

Visa en egen felsida
Skapa en html-sida med texten “Något blev fel!” och spara som fel.html.

Skriv i din .htaccess:
#Skicka till egen felsida:
ErrorDocument 404 /fel.html

Visa egen text
Skriv i din .htaccess:
#Visa egen text:
ErrorDocument 404 "Sidan du letar efter finns inte.”

Andra vanliga felkoder (som man också kan skicka till egna felsidor):
Besökaren har angett fel inloggningsuppgifter till en lösenordsskyddad sida:
401 : Authorization Required

Besökaren är blockerad från sidan:
403 : Forbidden

Något fel på servern har inträffat:
500 : Internal Server Error

Jag brukar skicka alla felmeddelanden till samma felsida för enkelhetens skull.