Checkboxes uitlezen

Status
Niet open voor verdere reacties.

LarsL

Gebruiker
Lid geworden
19 sep 2008
Berichten
155
Hallo allemaal,
Ik wil graag in PHP checkboxes uitlezen, ik weet hoe dat moet (checken of ze aangevinkt zijn), maar nu heb ik een lijst uit de database laten halen en daarbij moet de gebruiker aanvinken wat hij wil (ik laat er vinkjes achter zetten), ik heb in de database wel een veld genaamd pid, en deze kan ik dan ook wel koppelen aan de checkbox, maar hoe kan ik nou kijken welke id's er zijn aangevinkt? het worden wel heel veel if isset's als ik het allemaal handmatig moet doen.

Bij voorbaat dank,
- Lars
 
Ik neem aan dat het bij een back-end stuk hoort dat meerdere items kan verwijderen/wijzigen.

Klopt?

Dit zal dan bij je weergave gebruiken. Wat belangrijk is dat je als checkbox-naam een arraytype gebruikt.
PHP:
$allQuery = "SELECT pid, name FROM tabel";
$allResult = mysql_query($allQuery);
if(!$allResult) {
  echo 'Er is een fout opgetreden, MySQL zegt: '. mysql_error();
} else {
  while($allRow = mysql_fetch_assoc($allResult)) {
    echo '<input type="checkbox" name="checkbox[]" value"'. $allRow['pid'] .'" /> '. $allRow['name'] .'<br />';
  }
}
Als je daarna dingen wilt verwijderen zul je eerst de array uit moeten lezen
PHP:
$pids = "";
foreach($_POST['checkbox'] AS $key => $pid) {
  $pids .= $pid .',';
}
$pids = substr($pids, 0, -1); //Laatste komma verwijderen
Vervolgens kun je dat rijtje gebruiken in een query :)
PHP:
$delQuery = "DELETE * FROM tabel WHERE pid IN (". $pids .")";
$delResult = mysql_query($delQuery);
if(!$delResult) {
  echo 'Er is een fout opgetreden, MySQL zegt: '. mysql_error();
} else {
  echo 'Item(s) succesvol verwijderd!';
}
 
Laatst bewerkt:
Je kunt ook gewoon implode() gebruiken.
 
Dat ik daar zelf niet een dacht :rolleyes:

Dit
PHP:
$pids = "";
foreach($_POST['checkbox'] AS $key => $pid) {
  $pids .= $pid .',';
}
$pids = substr($pids, 0, -1); //Laatste komma verwijderen
wordt dan dit
PHP:
$pids = implode(",", $_POST['checkbox']);
Bedankt SvU.
 
Ik zou ook nog de asterisk bij DELETE verwijderen. Verder vraag ik me af of dit precies is wat de TS zoekt, maar dat zal hij zelf aan moeten geven.
 
Eh, ik zou dat niet allemaal klakkeloos imploden; maar misschien eerst even kijken of de opgegeven waarden wel kloppen? Althans; tenzij elke gebruik zomaar elke rij kan verwijderen natuurlijk :)

Het wordt vaak vergeten dat als je een aantal checkboxes weergeeft, mensen ook dingen die niet weergegeven worden kunnen insturen...
 
Het wordt vaak vergeten dat als je een aantal checkboxes weergeeft, mensen ook dingen die niet weergegeven worden kunnen insturen...

Die begrijp ik niet helemaal, zou je het met een concreet voorbeeld kunnen toelichten?
 
Nahja; basic point van het 'vertrouw nooit je users'

Als je iemand een aantal checkboxes als keuze geeft, bijvoorbeeld met emails die hij wil verwijderen ofzo, en je geeft alleen de waarden mee die hij mag verwijderen, en hij reageert daarop, dan is er geen garantie dat hij niet het formulier aanpast en waarden terugstuurt die niet bij zijn berichten horen...

Zo kan hij bijvoorbeeld willekeurige berichten sturen, of dingen die niet bestaan (afhankelijk van het systeem wat erger is ;)) en daarna de betrouwbaarheid van je applicatie flink omlaag brengen.

Daarom kun je beter eerst alle input controleren om er zeker van te zijn dat het correcte waarden zijn, voor je ze zomaar implode en gebruikt.
 
Maar kun je dat probleem niet voor een groot deel afvangen door over $pids de functie mysql_real_escape_string() te gooien, als ik je verhaal tenminste goed begrijp.

Eerst maar eens afwachten wanneer de TS reageert voor ik door ga op dit onderwerp.
 
Maar kun je dat probleem niet voor een groot deel afvangen door over $pids de functie mysql_real_escape_string() te gooien, als ik je verhaal tenminste goed begrijp.

Eerst maar eens afwachten wanneer de TS reageert voor ik door ga op dit onderwerp.
Ja ik was even een weekendje weg ;)
Maar goed ik ben nog een beginner in PHP, ik wil zeg maar dat een gebruiker kan kiezen uit verschillende 'games' (het is een spellenlijst) die ik uit de database laad, daarnaast zet ik een checkbox, elke game heeft een pid, maar als ik de aangevinkte checkboxes in een textarea wil zetten hoe doe ik dat dan?
 
Wat voor functie heeft die checkbox?
Waarom kan een gebruiker zo'n spel aanvinken?
Wat moet er gebeuren wanneer een spel is aangevinkt?
Waarom wil je die checkboxes in een textarea zetten?
 
De gebruiker kan spellen aanvinken, die worden in een textarea geladen en zo kan hij ze mailen naar mij en ik regel het verder.
Alleen hoe krijg ik die aangevinkte spellen (geladen uit de database, ze hebben elk een id (pid)) in de textarea geladen? en de niet aangevinkte spellen niet?
 
Waarom zouden ze naar een textarea moeten dan?
Je verwerkt die pagina toch dus dan kun je ze daar toch opvragen?

In grote lijnen dus mijn verhaal in de 2e post. Beetje aanpassen en klaar.
 
Bedankt, maar als de gebruiker dan zijn 'games' heeft aangevinkt hoe kan ik het dan inladen (de values/waardes van de checkboxen (namen van de spelletjes dus) in een textarea? zodat ze gemaild kunnen worden naar mij?

- Lars
 
Wat heb je toch met een textarea? Volgens mij bedoel jij heel iets anders dan dat ik denk. Bij een textarea denk ik aan een HTML <textarea>.

Goed, weergeven:
PHP:
$allQuery = "SELECT pid, name FROM tabel";
$allResult = mysql_query($allQuery);
if(!$allResult) {
  echo 'Er is een fout opgetreden, MySQL zegt: '. mysql_error();
} else {
  while($allRow = mysql_fetch_assoc($allResult)) {
    echo '<input type="checkbox" name="checkbox[]" value="'. $allRow['name'] .'" /> '. $allRow['name'] .'<br />'. "\r\n";
  }
}
Uiteraard aanpassen aan je databasestructuur.

Laat ik eerst tot hier gaan.
Je moet nu de hele games lijst te zien krijgen met de naam er achter.
Kijk je in de bron dan zie je zoiets staan
<input type="checkbox" name="checkbox[]" value="Call Of Duty" />Call Of Duty<br />

Als dat allemaal goed gaat pakken we het verder op (Hoewel dat gewoon zo zal gaan als ik eerder aangaf)
 
Wat heb je toch met een textarea? Volgens mij bedoel jij heel iets anders dan dat ik denk. Bij een textarea denk ik aan een HTML <textarea>.

Goed, weergeven:
PHP:
$allQuery = "SELECT pid, name FROM tabel";
$allResult = mysql_query($allQuery);
if(!$allResult) {
  echo 'Er is een fout opgetreden, MySQL zegt: '. mysql_error();
} else {
  while($allRow = mysql_fetch_assoc($allResult)) {
    echo '<input type="checkbox" name="checkbox[]" value="'. $allRow['name'] .'" /> '. $allRow['name'] .'<br />'. "\r\n";
  }
}
Uiteraard aanpassen aan je databasestructuur.

Laat ik eerst tot hier gaan.
Je moet nu de hele games lijst te zien krijgen met de naam er achter.
Kijk je in de bron dan zie je zoiets staan
<input type="checkbox" name="checkbox[]" value="Call Of Duty" />Call Of Duty<br />

Als dat allemaal goed gaat pakken we het verder op (Hoewel dat gewoon zo zal gaan als ik eerder aangaf)

Oké, ik ga het eventjes proberen, overigens is die textarea niet meer nodig nu ik me bedenk dat ik het ook zonder kan laten mailen, en ik het ook evt. kan opslaan in de db en het later kan lezen =)
 
Oké, ik ga het eventjes proberen, overigens is die textarea niet meer nodig nu ik me bedenk dat ik het ook zonder kan laten mailen, en ik het ook evt. kan opslaan in de db en het later kan lezen =)
Sorry voor de dubbelpost maar het is gelukt, hoe kan ik het nu laten ophalen en met enters in de db laten zetten/mailen?
 
Laat ik dan de veilige manier maar doen (Sorry SvU :P)

Op de verwerkpagina doe je dit:
PHP:
$games = ""; 
foreach($_POST['checkbox'] AS $key => $game) { 
  $games .= mysql_real_escape_string($game) .','; 
} 
$games = substr($games, 0, -1); //Laatste komma verwijderen
echo $games;
Zo krijg je een kommagescheiden reeks met geselecteerde games als het goed is.

Wil je het met enters onder elkaar hebben dan wordt het zoiets:
PHP:
$games = ""; 
foreach($_POST['checkbox'] AS $key => $game) { 
  $games .= mysql_real_escape_string($game) .'<br />'. "\r\n"; 
} 
echo $games;
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan