Ereg problemen met PHP

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Hallo,

IK probeer een webshop te maken waar men in de beschrijving van een product/categorie kan verwijzen naar een andere categorie (niveau). Dit wil ik doen met een soort van UBB tags. Tot nu toe heb ik dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?
$shop_id = 1;
function GetCatName($cat_id) {
    global $shop_id;
    $sql_get = "SELECT cat_naam FROM categorien WHERE cat_id = $cat_id AND shop_id = $shop_id";
    $res_get = ExecSQL($sql_get);
    return mysql_result($res_get, 0, 'cat_naam');
}

function maakop($string) {
        $string = preg_replace("/\\[niv=([0-9])\](.*?)\\[\/niv\]/si",
                               '<a href="show_cat.php?cat_id=\\1">\\2</a>', $string);
        $string = preg_replace("/\\[niv=([0-9])\]/si",
                               '<a href="show_cat.php?cat_id=\\1">'.GetCatName('\\1').'</a>', $string);
        return $string;
}

$tekst = "Hallo
[niv=22]
[niv=22]Test[/niv]
Dit is een test";

echo maakop($tekst);
?>

Wanneer ik dit laat draaien spuugt hij dit uit:

code:
1
2
3
4
5
Warning: Supplied argument is not a valid MySQL result resource in /home/share/projecten/webshop/include/functions.php on line 7
Hallo
[niv=22] 
[niv=22]Test[/niv]
Dit is een test


Die warning komt omdat ik 22 niet krijg door gestuurd naar de functie GetCatName. Dat is dus probleem één.

2e probleem is dat hij 22 niet herkent maar 2 wel. Het ligt aan het stukje code waar [0-9] staat maar hoe kan ik het zo krijgen dat hij ook grotere getallen aankan?

Wie weet hier een antwoord op weten? Ik zou hier enorm mee geholpen zijn. Ik heb trouwens al gezocht...

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 15:28
Dit heeft niets met je ereg te maken, maar met je SQL-query: deze is niet goed (is 'categorien' wel goed gespeld?). Echo je query eens...

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Query klopt wel... sorry... ik zal de error ook even geven die bij de query hoort:

code:
1
2
You have an error in your SQL syntax near '\1 AND shop_id = 1' at line 1
SELECT cat_naam FROM categorien WHERE cat_id = \1 AND shop_id = 1


Hij geeft dus \\1 door aan de functie terwijl dit 22 moet zijn. Hoe kan ik dit eerste probleem oplossen?

[ Voor 21% gewijzigd door Slagroom op 24-12-2002 14:53 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Query klopt dus niet... Wat doet die /1 daar??

[ Voor 84% gewijzigd door Janoz op 24-12-2002 14:54 . Reden: Vorige opmerking al doorgevoerd voordat ik had gepost :) ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 15:28
Lijkt me duidelijk? cat_id == '\1' ipv '1', backslash te veel

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Dit is de functie ExecSQL() trouwens:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
function ExecSQL($sql) {
    global $error_list;
    $result = @mysql_query($sql);
    if($result) {
        return $result;
    } else {
        $error_list[] = mysql_error()."\n$sql\n";
        return false;
    }
}
?>

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

* Janoz kijkt nog een keer goed naar de source

Het probleem is dat je de uitvoering van een preg een beetje door de war haalt. Op dit moment word eerst de getCatName functie uitgevoerd (met \\1 als argument) en vervolgens de string voor de preg opgebouwd. Wat jij wilt is dat die functie aanroep wordt gedaan op het moment dat de preg wordt geevalueerd. Daarvoor zul je een iets andere syntax moeten gebruiken voor je regexp.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Janoz schreef op 24 december 2002 @ 14:57:
* Janoz kijkt nog een keer goed naar de source

Het probleem is dat je de uitvoering van een preg een beetje door de war haalt. Op dit moment word eerst de getCatName functie uitgevoerd (met \\1 als argument) en vervolgens de string voor de preg opgebouwd. Wat jij wilt is dat die functie aanroep wordt gedaan op het moment dat de preg wordt geevalueerd. Daarvoor zul je een iets andere syntax moeten gebruiken voor je regexp.
Ik wist dat daar de fout in zat... maar hoe doe ik dat dan? Kan ik eerst de variabele uit de [niv=] halen?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Je zult de e modifier moeten gebruiken icm preg (tenminste.. Bij de usernotes van preg in de php manual staat wel een voorbeeld)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 04-08 16:29

Tim

Volgens mij moet er achter [0-9] ook nog een +

Acties:
  • 0 Henk 'm!

  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 27-08 11:32
Je geeft zelf de verkeerde waarde mee met het aanroepen van de functie >>
.GetCatName('\\1').

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Mickman schreef op 24 December 2002 @ 15:21:
Je geeft zelf de verkeerde waarde mee met het aanroepen van de functie >>
.GetCatName('\\1').
Die \\1 moet toch de waarde 22 krijgen in dit voorbeeld?

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 16-09 19:01

Tux

Slagroom schreef op 24 December 2002 @ 15:24:
[...]


Die \\1 moet toch de waarde 22 krijgen in dit voorbeeld?
'\\1' --> \\1 (' weghalen dus)

anders geeft ie gewoon \1 door.

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Ik heb nu deze code in maakop():

PHP:
1
2
3
4
5
6
7
8
<?
function maakop($string) {
        $string = preg_replace("/\\[niv=([0-9])\]/e",
                               "'<a href=\'show_cat.php?cat_id=\\1\'>'.CatLink('\\1').'</a>'", $string);
        $string = preg_replace("/\\[niv=([0-9])\](\S+?)\\[\/niv\]/si",
                               '<a href="show_cat.php?cat_id=\\1">\\2</a>', $string);
        return $string;
?>


Maar nu is dit de output in html:
code:
1
2
<a href='show_cat.php?cat_id=2'>DVD-r</a>
<a href='show_cat.php?cat_id=2'>DVD-r</a>Test[/niv]


Waarom pakt hij Test niet mee?

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Ik heb het al. Als ik de preg's omdraai doet hij het wel :)
Pagina: 1