Checkboxes in regels naar DB en via array weer terug

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sven de Haas

Sven de Haas

17/04/2012 19:03:36
Quote Anchor link
Onderstaand stukje script gebruik ik om alle aangeklikte checkboxes als een lijstje onder elkaar te krijgen in mysql database.
Dit werkt prima, maar logisch is dat hij nu altijd eindigt met een \n.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$fields
= $_POST['options'];

if (is_array($fields))
{

    for ($i=0;$i<count($fields);$i++)
    {

        $opties = $opties . "$fields[$i]\n";
    }
}
    
?>


Met het volgende script roep ik hem weer uit de database.
Zoals je ziet eindigt deze op een komma.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
foreach(explode("\n", $data['opties']) as $options)
{

    echo $options.", ";
}

?>


De bedoeling is dat ik dit krijg:

Quote:
ABS, Airbag, Airco, Alarm, Automaat, Boordcomputer, Centr. vergrendeling.


Maar het is logisch dat ik nu dit krijg:

Quote:
ABS, Airbag, Airco, Alarm, Automaat, Boordcomputer, Centr. vergrendeling, ,


Het gaat om het komma-gebruik op het einde, kan iemand mij vertellen of hier een oplossing voor is?

- Kan ik de laatste checkbox zonder een \n naar de database sturen?
- Kan ik de laatste record uit een array niet laten echoën?
- Andere oplossing?

Grt. Sven
Gewijzigd op 17/04/2012 19:04:28 door Sven de Haas
 
PHP hulp

PHP hulp

23/11/2024 17:27:11
 
Noppes Homeland

Noppes Homeland

17/04/2012 19:16:39
Quote Anchor link
Je bent al verkeerd bezig om z'n string op te slaan in 1 veld!

Elk aangevinkt checkboxje heeft zo z'n eigen betekenis, wel dan niet gecategoriseerd.

Dus je zult eerder iets krijg als:

checkboxvalues:
cat omschrijving checkbox_id
1 ABS 1
1 AirBag 2
2 Automaat 1


en dan krijg je iets als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<input name="veiligheid[1][1]" type="checkbox" />
<input name="veiligheid[1][2]" type="checkbox" />
<input name="versnelling[2][1]" type="checkbox" />


En dan kan je de index keys gebruiken om het verder op correcte wijzen aan iets te koppelen en alsdanig in een tabel op te slaan.

Met andere woorden, werk eerst goed uit wat je wilt alvorens je blind gaat coderen.
1 van de eerste zaken waarin jij je dient te verdiepen is database normalisatie.
Gewijzigd op 17/04/2012 19:17:36 door Noppes Homeland
 
Erwin H

Erwin H

17/04/2012 19:33:19
Quote Anchor link
Vooropgesteld, ik ben het eens met Noppes. Je zou dit niet op deze manier moeten oplossen. En geloof me, ik heb die fout ook al eens eerder gemaakt ;-)

Maar de fundamentele vraag die je stelt is op zich wel handig om te beantwoorden. de vraag hoe je alle elementen van een array aan elkaar krijgt met een vast string ertussen, maar niet erachter. Het antwoord is simpeler dan de vraag.... met implode.
Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$waardes
= array('1', '2', '3', '4', '5', '6');

echo implode( ',', $waardes );
?>

Dit geeft als output: '1,2,3,4,5,6'
Dus geen komma achter de laatste.

Heb je nu wel een hele rij waardes, maar niet in een array (of je wilt een array filteren alvorens de string te maken), dan is het verstandig om er eerst een array van te maken, zodat je hetzelfde kan gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$waardes
= array();
for($i=1; $i<=6; $i++){
  if ($i != 3){
    $waardes[] = $i
  }
}


echo implode( ',', $waardes );
?>

In beide voorbeelden werkt het veel en veel makkelijker dan de komma achter de laatste weg te halen middels string functies.
 
Sven de Haas

Sven de Haas

17/04/2012 20:12:04
Quote Anchor link
Noppes,
Bedankt voor je informatie.
Hoe nu de database staat gevuld was eigenlijk precies mijn bedoeling.
Er zullen vast wel nadelen aan zitten, maar ik ben nog niet zodanig gevorderd met php dat ik hier hinder van zal ondervinden.

Erwin,
Bedankt voor je tekst en uitleg, ik heb hier wat aan! Nu heb ik hem precies zoals ik wou.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$options_array
= explode("\n", $data['opties'], -1);

echo implode(", ", $options_array).".";
?>


Bij de explode heb ik een -1 erachter gezet, nu is de lege regel op het einde ook weg.

Bedankt voor de moeite.
 
Frank WD

Frank WD

17/04/2012 21:42:30
Quote Anchor link
Sven Eu op 17/04/2012 20:12:04:
Noppes,
Bedankt voor je informatie.
Hoe nu de database staat gevuld was eigenlijk precies mijn bedoeling.
Er zullen vast wel nadelen aan zitten, maar ik ben nog niet zodanig gevorderd met php dat ik hier hinder van zal ondervinden.


Misschien beetje offtopic.
Persoonlijk vind ik dit een foute denkwijze.
Waarom?
Stel je bent nu nog niet zo ver in het php en mysql gebeuren.
Over 1,5 jaar ben je dit misschien wel en bedenk je een leuke optie er bij voor het geen je wilt en hier boven beschrijft. Dus je gaat dan type en type en schrijven en coderen enz... vervolgens kom je er achter dat het niet lukt wat je wilt.

Waarom lukt het niet?
Het lukt niet, omdat je 1,5 jaar eerder een denk fout hebt gemaakt bij het aanmaken van de database en zoals noppers zij geen genormaliseerde database hebt.
Dus je zou alles moeten her-schrijven en alle record in je database moeten her-type in je database. Dit kost je meer werk dan nu als vast te kijken naar normalisatie van je database.

Dit is gewoon maar even een tip.
Tevens een tip waar ik nu zelf mee te maken heb omdat ik 1,5 jaar geleden zo strond eigenwijs was om niet te luisteren. Dit weer omdat ik dacht toch niet veel meer te willen doen met het systeem. En nu mag ik op de blaren zitten met een database met meer dan 50,000 rows die allemaal opnieuw ingevoerd moet worden ivm niks over een komt met de oude situatie.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.