[PHP] explode en dan weer deleten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb voor mijn website die niet relevant is een favorietenlijst gemaakt die wordt op de volgende manier opgeslagen in de database:

Voorbeeld: ;45;32;1;88;98
De waardes die tussen de ; zijn worden gefilterd door volgend script:

PHP:
1
2
3
4
5
$wordChunks = explode(";", $favo_string); 
for($i = 0; $i < count($wordChunks); $i++) 
{ 
 //nog wat code 
}


Het probleem is dat wanneer iemand een favoriet eraf wilt halen dat ik dan het ID wel gedelete krijg tussen de 2 ; maar daarvan moet eigenlijk ook 1 ; gedelete worden. Het resultaat is nu al ik als voorbeeld de bovenste string neem en ik haal 32 en 1 weg dat ik dit krijg: ;45;;;88;98

Ik wil dus de 2 ; die teveel zijn ook gedelete hebben.

Heeft iemand enig idee hoe ik dat voor elkaar krijg?

Hieronder mijn code wanneer er een favoriet eraf moet: (er moet dus nog wat bij maar ik kom er niet uit)

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
25
$id_download = $_REQUEST['id']; 

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
   $favo_string = $row['favo']; 
} 

$kompleet = ''; 

$wordChunks = explode(";", $favo_string); 
for($i = 0; $i < count($wordChunks); $i++) 
{ 

$id_download1 = $wordChunks[$i]; 
if ($id_download1 == $id_download) 
{ 

} 
else 
{ 
    $kompleet = $id_download1.';'.$kompleet; 
} 
} 

$kompleet = ';'.$kompleet;


Ik hoop dat iemand een oplossing weet!

Alvast bedankt voor alle moeite.

Groeten

Ray

[ Voor 2% gewijzigd door NMe op 28-03-2007 09:39 . Reden: [code] tags toegevoegd. ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Wat denk je hiervan?
PHP:
1
2
3
$newvar = array();
foreach(explode(';', $oldvar) as $v)if($v)$newvar[] = $v;
$newvar = implode(';', $newvar);

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Verwijderd schreef op woensdag 28 maart 2007 @ 09:17:
Ik heb voor mijn website www.spam.nl een favorietenlijst gemaakt die wordt op de volgende manier opgeslagen in de database:

Voorbeeld: ;45;32;1;88;98
De waardes die tussen de ; zijn worden gefilterd door volgend script:

$wordChunks = explode(";", $favo_string);
for($i = 0; $i < count($wordChunks); $i++)
{
//nog wat code
}
In tegenstelling tot je naam (en die van de website) doet vermoeden, is dat niet zo handig: normaliseren die hap ;) Alles wat je nu colon seperated hebt kun je beter opslaan als een record (dus een record voor 45, 32 etc..) waarbij de records een gemeenschappelijke foreign key delen.
Het probleem is dat wanneer iemand een favoriet eraf wilt halen dat ik dan het ID wel gedelete krijg tussen de 2 ; maar daarvan moet eigenlijk ook 1 ; gedelete worden. Het resultaat is nu al ik als voorbeeld de bovenste string neem en ik haal 32 en 1 weg dat ik dit krijg: ;45;;;88;98

Ik wil dus de 2 ; die teveel zijn ook gedelete hebben.

Heeft iemand enig idee hoe ik dat voor elkaar krijg?
Als je db genormaliseerd is ken je dit probleem niet, daar je gewoon de betreffende records verwijderd.
Hieronder mijn code wanneer er een favoriet eraf moet: (er moet dus nog wat bij maar ik kom er niet uit)
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
25
$id_download = $_REQUEST['id']; 

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
   $favo_string = $row['favo']; 
} 

$kompleet = ''; 

$wordChunks = explode(";", $favo_string); 
for($i = 0; $i < count($wordChunks); $i++) 
{ 

$id_download1 = $wordChunks[$i]; 
if ($id_download1 == $id_download) 
{ 

} 
else 
{ 
    $kompleet = $id_download1.';'.$kompleet; 
} 
} 

$kompleet = ';'.$kompleet;


Ik hoop dat iemand een oplossing weet!

Alvast bedankt voor alle moeite.

Groeten

Ray
Scripttags please.

Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Hopelijk snap ik je probleem maar volgens mij snap jij hetzelf niet helemaal.
Waarom heb je niet een tabel favoriet met gebruikers id en de favoriet? Met een simpele query kunt je dan alle favorieten opvragen en ook eenvoudig deleten. De while constructie om uit te lezen heb je al want waarom gebruik je een while loop om een enkele string op te halen halen?

Goed, in de geest van je implementatie zou onderstaande oplossing gewoon moeten werken. Weet je zeker dat je in de echte code niet ergens een concatenate te veel hebt staan? Zoals je het hier hebt staan is het goed. Schrijf de if constructie even om naar !($id_download1 == $id_download) dan hoef je geen leeg block voor het true deel te implementeren.

Herschrijf je code naar een niet geconcateneerde (My)Sql implementatie.

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

  1. Als je je code eens zou uitlijnen, dan is die veel duidelijker. Zie onze FAQ voor informatie.
  2. Gebruik [code]-tags als je code post. Dat maakt het voor ons makkelijker om je code te lezen.
  3. Het noemen van het adres van je website wordt hier niet echt gewaardeerd tenzij het direct te maken heeft met de oplossing van je probleem.
  4. Zoals prototype al zegt is je ontwerp slecht. In plaats van een oplossing te zoeken voor je directe probleem, doe je er beter aan je databaseontwerp eens onder de loep te nemen en netjes te normaliseren. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, kijk daar kan ik wat mee, sorry voor mijn links (ook in het andere topic) maar ik ben helaas een beginner die het allemaal moet leren en ben nog niet bekend met programming fora's (hoe alles erop moet).

Ik zal mijn best doen.

Alvast bedankt voor jullie reacties!
Pagina: 1