Archive for PHP

DomDocument i PHP5

In PHP, there are many different ways to create XML, but the absolut easiest way is by using DomDocument.

Start with create a new DomDocument object

$doc = new DomDocument('1.0', 'UTF-8');

Please indicate this it is to be XML version 1 and our charset are set to UTF-8

Now you need to make our root channel where all our elemeneter to be in.

$root = $doc->createElement('root');
$root = $doc->createElement('root');
$root = $doc->appendChild($root);

Now it’s time to add our first elements eg customers

foreach( $customerArray AS $key => $value )
{
	$occ = $doc->createElement('customer');
	$occ = $root->appendChild($occ);
 
	foreach( $value AS $secoundKey => $secoundValue )
	{
		$child = $doc->createElement( $secoundKey );
		$child = $occ->appendChild($child);
		$value = $doc->createCDATASection($secoundValue);
		$value = $child->appendChild($value);
	}
}

Finally, we would save our XML document and print our output to a browser.

$xml_string = $doc->saveXML();
echo $xml_string;

Youtube – ClientLogin

For at lave en forbindlse til Youtube API’et kræver det at du bruger ClientLogin for at op nå adgang til din Youtube bruger konto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
require_once( 'Zend/Loader.php');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
 
define('YOUTUBE_USER_NAME','dit brugernavn');
define('YOUTUBE_USER_PASSWORD','adgangskode');
define('YOUTUBE_APP_NAME','program navn');
define('YOUTUBE_CLIENT_ID','klient id');
define('YOUTUBE_DEVELOPER_KEY','API nøgle');
 
$authenticationURL= 'https://www.google.com/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$username = YOUTUBE_USER_NAME,
$password = YOUTUBE_USER_PASSWORD,
$service = 'youtube',
$client = null,
$source = 'MySource', // a short string identifying your application
$loginToken = null,
$loginCaptcha = null,
$authenticationURL);
 
$yt = new Zend_Gdata_YouTube($httpClient,YOUTUBE_APP_NAME,YOUTUBE_CLIENT_ID,YOUTUBE_DEVELOPER_KEY);

Med denne stump kode opretter du forbindlse til dit Youtube API og kan nu udføre forskellige handlingere som bla. oprette ny video, gør den privat/public eller endag få andre bruger til at vote eller kommetere dine videoere.

For at få denne tutorial til at fungere skal du benytte Zend Framework hvor der bliver brugt følge klasser

  • Zend_Loader
  • Zend_Gdata_AuthSub
  • Zend_Gdata_ClientLogin

nuSOAP og PHP5

SchemeCloud rykker i nye højder og til disse højder bliver et API(webservice) nærmeste et krav, da PHPTECH har intagrasion til både Wannafinds betalingsgateway og e-conomics ERP system er det nu på tide for PHPTECH også at få deres eget API til de kunder der ønsker det.

Til dette har der været behov for at studere nye muligheder, jeg snakkede frem og tilbage med forskellige personer og den person der hjælp mig bedst frem til det jeg måtte bruge i PHPTECH til vores API er Simon Jensen, han nævnte nuSOAP som er et biblotek til PHP der gør det muligt at binde funktioner/class.

Det vil jeg gerne have lov til i dette indlæg at takke Simon Jensen mange gange for inden jeg går vider med nogle eksempler på hvordan jer der ude kan komme hurtig igang med nuSOAP i PHP5.

Start med at lave en ny fil med navn server.php hvor du paster følge kode ind.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
include("nusoap/nusoap.php");
 
$srv = new soap_server();
$srv->register("product.GetName");
 
class product
{
	public function GetName($name)
	{
		return $name;
	}
}
 
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : "";
$srv->service($HTTP_RAW_POST_DATA);

Nu opretter du en ny fil med navn client.php og paster følgene linjer ind

1
2
3
4
include("nusoap/nusoap.php");
$soap = new nusoap_client("http://localhos/soap/server.php");
 
echo $soap->call("product.GetName",array("name"=>"produkt navn") );

Kan endnu en gang sige tak til Simon Jensen for hans venlighed – Syndes i skal besøges Simon Jensens blog her

Til dette forsøg skal du hente hele nuSOAP bibloteket som findes her på SourceForge.net

Basic MySQL connect i PHP5 – Video

PHP5 – Basic MySQL5 connect from Paris Nakita Kejser on Vimeo.

Learn howto connect to MySQL5 database, this its a basic tutorial for you if you will laern how to use define to username, password,hostname and databasename.

tanks for you visit.

Abstract class i PHP

Her til aften/nat sad jeg og tænkte efter jeg havde lavet lidt arbjede om at der enligt nok var nået jeg kunne forbedre mig på, her til tænkte jeg at jeg enligt ikke rigtig havde styr på abstract i php og class, derfor valgte jeg så at læse lidt om dette som så resutert i at det enligt ikke være så svært som jeg først havde gået og tordet.

jeg har lavet et lille eks. så i der ude også kan få lidt gavn af dette og se hvad abstract enligt gør.

<?php
abstract class AbstractCls
{
    protected $code = true;

    public function returnError()
    {
        if ( $this->code === false )
        {
            return 'fail';
        }
        elseif ( $this->code === true )
        {
            return 'ok';
        }
        else
        {
            return 'n/a';
        }
    }
}

class test extends AbstractCls
{
    public function valiUser( $username )
    {
        if ( $username == '' )
            $this->code = false;

        echo $this->returnError();
    }
}
?>

Jeg har naturligvis også testet det så det fungere, det jeg har gjort er at lave en fil med følgene linjer i.

<?php
include( 'test.class.php' );
$test = new test();

$test->valiUser( 'neonman' );
?>

Håber dette eksemple kan bruge stil nået, det har hjulpet mig til at forstå det nået bedre omkring abstract inden for class.

Udskriv flere gruppe ider ud med kun 1 titel

Idag kom jeg på et kæmpe problem som jeg enligt ikke havde tænkt over før, jeg har lavet SQLen om så den ikke linjere det rigtig som jeg sad og arbjedet med på grund af sikkerheden.

Det der var mit problem var jeg havde nogle kategori grupper med samme navn som skulle printes ud til brugeren men selve kategorien må kun forkomme 1 gang pr titel.

men da man har en gruppe der kan hede Unisex0-2år, unisex2-5år, pige0-2år og dreng0-2 år og alle 4 kategoriere faktisk har produkter indskrvet med en kategori “Fodtøj” gjore at når jeg brugte GROUP BY i SQL at den så samle de her 4 kategoriere med Fodtøj til 1 titel som også var ganske godt, men 1 id som skulle dække alle 4 det var knap så heldigt.

den måde jeg valgte at løse det gjore jeg ved at skrive følge eks. ind og teste at det virket, det var umilbart mit bedste skud på at få det til at gøre som jeg ville have det til, jeg modtager gerne flere eks. hvis i sider der ude og tænker “hold da kæft hvorfor gjore han ikke sådan her” :0)

    1 <?php
    2 $resObj = mysql_query( "
    3 SELECT
    4     c.category_title,
    5     c.category_id
    6
    7 FROM
    8     cateogry c INNER JOIN product p ON c.category_id = p.catid
    9
   10 WHERE
   11     c.group IN('child02','child25','girl02','boy515')
   12
   13 GROUP BY
   14     c.category_id
   15
   16 ORDER BY
   17     c.category_title
   18 " );
   19 $myspace = ' - '. $space;
   20 // Create keys
   21 while( $rowObj = mysql_fetch_object( $resObj ) )
   22 {
   23     if( array_key_exists( $rowObj->category_title , $array ) )
   24     {
   25         array_push($array[$rowObj->category_title], $rowObj->category_id);
   26     }
   27     else
   28     {
   29         $array[$rowObj->category_title][] = $rowObj->category_id;
   30     }
   31 }
   32
   33 // Slice keys out whit ,
   34 foreach( $array AS $key => $value )
   35 {
   36     $iv = 0;
   37     foreach( $value AS $ids )
   38     {
   39         if ( $iv == 0 )
   40             $slice = $ids;
   41         else
   42             $slice .= ','. $ids;
   43
   44         $iv++;
   45     }
   46
   47     echo '<option value="'. $slice .'">'. $space . $key .'</option>';
   48 }
   49 ?>

Det skal siges det jeg har fået ud af denne kode er at den tager alle mine grupper som passer på det match jeg bedere om, smider det i et array, hvis min array key findes pusher den bare til det existerne array og hvis ikke lave den et nyt.

Der næst køre jeg det igennem en foreach løkke og printer så daten ud, lige inden udprint skal jeg have mine id’er i komma formart så jeg kan ligge det dirakte ind i en “IN” funktion i MySQL det gøres ved at køre endnu en foreach løkke igennem og samle mine id’er.

jeg håber på der er nogle der evt. sider med et bud på en smartere måde der inde, og ellers håber jeg at det her eks. er brugbart for jer andre der måske sider i samme suppedas.

Simple måde at lave SEO vænligt PHP sider

Til tider skal man gøre at ens titles, meta keywords, meta dec og endag h1 tags også skifte side alt efter hvad for en side man er på, det kan gøres på 2 måder hvis man startere fra starten af, den ene måde er at have en fil der håntere alle URLs som hurtig bliver total grim og uoverskulig den anden måde er denne som jeg syndes jeg gerne vil dele med jer der sider der ude og tøster efter en nem måde at ændre jeres titles og andet stuff på.

site.class.php
[code]<?php
class site
{
public $title = 'title ikke sat';

public function header()
{
$data = '
<html>
<head>
<title>'. $this->title .'</title>
</head>
<body>
';

return $data;
}

public function footer()
{
$data = '
</body>
</html>
';

return $data;
}

public function main( $content )
{
$data = $this->header();
$data .= $content;
$data .= $this->footer();

return $data;
}
}
?>[/code]

Index.php
[code]<?php
include_once( 'site.class.php' );
$site = new site();

/* Alt her nede for kunne skiftes med eks. include filer hvis du bruger $_GET['page'] som definere filnavnet */
$site->title = 'denne sides title';

$output = 'Alt der står i denne variale er så dit output.';

$site->main( $output );
?>[/code]

Håber det er forståligt nok ellers skriver i bare til mig.

PHP 5.3 Alpha

Så melder php.net ud at PHP 5.3 er på vej, glæder mig utorligt meget til at se hvad de har at byde på, har studert lidt i deres namespace som er det jeg kikker efter og savner i PHP.

Så vidt jeg kan se i deres syntax til namespace linere det utorligt meget ASP .NET C#’s måde at skrive det på og kalde dem på, det er dejligt at det funger på den måde da man så får nogle flere mulighedere på den måde, eks når der skal kaldes et namespace i PHP 5.3 Alpha1 skal man skrive nået ala dette.

use mynamespace::class1::class2();

Læs selv mere her: http://www.php.net/archive/2008.php#id2008-08-01-1

Smart methode i PHP så du undgår for mange IF til true and flase værdier

Hvis du tit sider og skal tjekke på nået om det findes eller ikke findes midt i det hele og bare ikke fatter hvorfor det skal være sådan kan jeg nemt følge dig ind til for nydlige hvor jeg opdaget og undermig over nogle koder jeg fat i det nye firma jeg er syndes jeg i første omgang inden jeg lærte hvad det var at det var total crap kode og hvorfor man ikke brugte IF statemens men spurte så min svoger omkring det og han forklaret at sådan kunne man også i andre programmerings sprog så det var ikke en dum måde at kode på men faktisk enormt smart og man spare meget tid.

sådan her ville en normal PHP kode se ud for mig før jeg lærte det at kende
[php]
if ( $row['newzlatter'] )
{
$newzlatterValue = ‘Ja’;
}
else
{
$newzlatterValue = ‘Ja’;
}

echo ‘Du har valgt at modtage nyhedsbrev: ‘. $newzlatterValue .’
‘;
[/php]

Nu hvor jeg kender det ser min IF sætningen sådan her ud
[php]
echo ‘Du har valgt at modtage nyhedsbrev: ‘. ( $row['newzlatter'] ? ‘Ja’ : ‘Nej’ ) .’
‘;
[/php]

Connect til FTP eller hent en fil/foto i PHP

Har kikket lidt rundt på nettet, da jeg sku bruge nået der kunne grabbe nogle filer/billedere fra et andet site da vi skulle overføre billedere fra et site til det nye site.

kom frem til at man faktsik kunne connecte til en FTP server hvis man vel og mærket have sti, user og password til denne konti, eller man kunne grabbe dataen dirakte fra det ene site via URL til sin root/sti på sin egen FTP server her er to eks.

Hent fil og vis på siden.
$file = file_get_contents ( “http://url.com” );

Connect til en FTP server
$file = scandir( ‘ftp://username:password@urlsti/’);

Håber i fik nået ud af disse 2 eks. ellers må i godt poste en kommentar omkring og høre hvad jeg mener naturligvis :0)