PHP - ID uit string halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn website werkt met user friendly url's wat netter is dan met index.php?p=blaat&i=blaat. Maar nu worden er steeds meer nieuws artikels gepost.

De oplossing die ik heb verzonnen is om het record id van de mysql tabel mee te geven in de url.

www.domeinnaam.nl/nieuws/12-een-nieuw-nieuwsartikel

Maar ik weet niet hoe ik nu alleen het nummer eruit kan halen. Ik heb al gezocht in Google en op het forum maar kan niks bruikbaars vinden. Mocht je een andere oplossing hebben dan is die natuurlijk ook van harte welkom!

Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 04:24

Kettrick

Rantmeister!

http://nl.php.net/explode :)

$id = array_pop(explode("-",$url))

[ Voor 73% gewijzigd door Kettrick op 22-02-2008 12:15 ]


Acties:
  • 0 Henk 'm!

  • man-o-script
  • Registratie: Juni 2001
  • Laatst online: 21-09 16:35
Aangezien de id altijd voor het eerste streepje zal staan:
PHP:
1
$id =  substr($var, 0, strpos($var, "-"));


Of explode inderdaad:

PHP:
1
2
$id =  explode("-", $var);
echo $id[0];


Die array_pop gaat niet werken, haalt alleen het laatste element van de array af.
Wel beetje simpel dit, had je makkelijk op kunnen zoeken toch?

[ Voor 53% gewijzigd door man-o-script op 22-02-2008 12:18 ]

//


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Da's toch niet zo moeilijk met een regexp?

^.*\/([0-9]+?)-.*$

Deze extract het ID tussen de directory slash en het minteken (non-greedy).

[ Voor 5% gewijzigd door Niemand_Anders op 22-02-2008 12:18 ]

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
man-o-script schreef op vrijdag 22 februari 2008 @ 12:15:
Die array_pop gaat niet werken, haalt alleen het laatste element van de array af.
Ik vermoed dat RoeLz array_shift bedoelt :)

@ hierboven: een regexp voor zoiets is in mijn opinie beetje overkill. Vooral omdat je met parse_url er al half bent :)

[ Voor 23% gewijzigd door FragFrog op 22-02-2008 12:21 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • man-o-script
  • Registratie: Juni 2001
  • Laatst online: 21-09 16:35
Die haalt alleen het eerste element eraf, maar dat is nu juist degene die moet hebben...

//


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
man-o-script schreef op vrijdag 22 februari 2008 @ 12:20:

Die haalt alleen het eerste element eraf, maar dat is nu juist degene die moet hebben...
Ja, en die returned'ie ;)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • man-o-script
  • Registratie: Juni 2001
  • Laatst online: 21-09 16:35
Niet goed gelezen |:( bedankt :)

//


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
man-o-script schreef op vrijdag 22 februari 2008 @ 12:15:
Aangezien de id altijd voor het eerste streepje zal staan:
PHP:
1
$id =  substr($var, 0, strpos($var, "-"));


Of explode inderdaad:

PHP:
1
2
$id =  explode("-", $var);
echo $id[0];


Die array_pop gaat niet werken, haalt alleen het laatste element van de array af.
Wel beetje simpel dit, had je makkelijk op kunnen zoeken toch?
Ja ik had al het vermoeden dat het makkelijk zou zijn maar ik kreeg het toch niet gevonden. Misschien gezocht naar het verkeerde. Bedankt in ieder geval voor de oplossing.

Acties:
  • 0 Henk 'm!

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 19-09 18:02
Is het niet veel makkelijker om de url net iets anders op te bouwen:

www.domeinnaam.nl/nieuws/12/een-nieuw-nieuwsartikel

Dan laat je de titel van het bericht als optioneel staan, maar gebruik je alleen de identifier. Je zal die toch moeten gebruiken om de informatie uit de database te halen.

Read the code, write the code, be the code!


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

wackmaniac schreef op vrijdag 22 februari 2008 @ 12:30:
Is het niet veel makkelijker om de url net iets anders op te bouwen:

www.domeinnaam.nl/nieuws/12/een-nieuw-nieuwsartikel

Dan laat je de titel van het bericht als optioneel staan, maar gebruik je alleen de identifier. Je zal die toch moeten gebruiken om de informatie uit de database te halen.
Ja, inderdaad, zo doe ik dat dus ook altijd:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
global $_URI;
$_URI = explode('/', strtolower(urldecode($_SERVER['REQUEST_URI'])));

switch ($_URI[0])
{
   case 'nieuws':
     if(!is_numeric($_URI[1]))
     {
        die('sorry,dat gaat niet werken zo');
     }
     else
     {
       $nieuws = new Nieuws($_URI[1]);
       die($nieuws->display());
     }
   break;
}

[ Voor 19% gewijzigd door SchizoDuckie op 22-02-2008 12:42 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 04:24

Kettrick

Rantmeister!

* RoelZ moet minder Java coden |:(

maar die bedoel ik idd ;)

Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Je kunt dit veel beter oplossen met apache's mod_rewrite:

code:
1
2
RewriteEngine On
RewriteRule ^nieuws/([0-9]+)/([^/]+)/$    nieuws.php?id=$1&slug=$2


Dan heb je in het PHP script dus de beschikking over $_GET variabelen 'id' en 'slug'.

Vormkracht10


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
En wat nu als'ie ineens een laag dieper wilt? Of een extra variabele erbij? Of naar een ander script wilt rewriten?

Door alles te rewriten naar een enkel PHP script en daarna naar de URL te kijken ben je veel flexibeler, al was het alleen maar omdat je ook in je PHP script prima dezelfde expressie kan gebruiken om het URL op te splitsen - maar in plaats van ze daarna hardcoded in je .htaccess te hebben staan heb je ze direct in je script tot je beschikking :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • BlackWhizz
  • Registratie: September 2004
  • Laatst online: 08-12-2024
Uhm... je kunt ook gewoon type hinting doen.

PHP:
1
$id = 0.0 + $_GET['titel'];

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

BlackWhizz schreef op zaterdag 23 februari 2008 @ 18:03:
Uhm... je kunt ook gewoon type hinting doen.

PHP:
1
$id = 0.0 + $_GET['titel'];
En.. dat levert je wat voor extra voordeel op exact :?

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

BlackWhizz schreef op zaterdag 23 februari 2008 @ 18:03:
Uhm... je kunt ook gewoon type hinting doen.

PHP:
1
$id = 0.0 + $_GET['titel'];
:')

PHP:
1
$id = (int)$_GET['titel'];
Maar ik zie daar het nut niet van in.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Intcasts werken op string zo dat alle karakters tot het eerste non-numerieke teken omgezet worden naar een int. Het werkt dus wel, maar het maakt gebruik van wat feitelijk een rariteit van de taal is - alleen daarom al zou ik het willen afraden.

Voorbeeldje:
PHP:
1
2
3
$string = '123-456_text';
$int    = (int) $string;
echo $int; // Echo's '123'.

[ Voor 4% gewijzigd door FragFrog op 24-02-2008 00:48 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

FragFrog schreef op zondag 24 februari 2008 @ 00:47:
Intcasts werken op string zo dat alle karakters tot het eerste non-numerieke teken omgezet worden naar een int. Het werkt dus wel, maar het maakt gebruik van wat feitelijk een rariteit van de taal is - alleen daarom al zou ik het willen afraden.

Voorbeeldje:
PHP:
1
2
3
$string = '123-456_text';
$int    = (int) $string;
echo $int; // Echo's '123'.
Ik kan je uit ervaring vertellen dat typecasting in PHP echt absolute crap is. Ik zou het dan ook echt niet voor iets anders gebruiken dan voor simpleXMLObject strings naar strings..

Remember.. PHP != Java && !Java.equals(PHP)

[ Voor 3% gewijzigd door SchizoDuckie op 24-02-2008 16:36 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
<?php
$string = '123-Waarom_moeilijk_doen_als_het_makelijk_kan';
$int    = $string * 1;
echo $int; // Echo's '123'. 
?>

}) ;)

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 21:30

Sebazzz

3dp

Verwijderd schreef op dinsdag 26 februari 2008 @ 12:07:
PHP:
1
2
3
4
5
<?php
$string = '123-Waarom_moeilijk_doen_als_het_makelijk_kan';
$int    = $string * 1;
echo $int; // Echo's '123'. 
?>

}) ;)
Bah wat smerig :p Moet je in C++ doen, krijg je gelijk flink billenkoek van de compiler.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]

Pagina: 1