Ik heb een database met E-mail adressen. D.m.v. een formulier kan ik een e-mail versturen naar alle e-mail adressen in de database. Maar ik wil de e-mail adressen filteren d.m.v. checkbox.
Maar dit werkt niet. Ik maak gebruik van een array en hij ziet de id wel, die in de db staan, maar verstuurt naar alle e-mail adressen.
mijn code is:
<?php
if (isset($_POST['checkbox']))
{
print_r($_POST['checkbox']); //de browser ziet wel de goede checkbox, id
$query = "SELECT * FROM ledenlijst"; //maar hoe kan ik hier mailen?
$result = mysqli_query($link, $query) or die(mysqli_error());
while ($record = mysqli_fetch_array($result)) {
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
//$mail->MsgHTML($message);
$mail->Body = $message;
$mail->AddAddress($record["e_mail"], $record["voornaam"]);//die voert hij altijd uit, mailen naar alle adressen
ok, bedankt voor info,
maar als ik dit doe dan krijg ik de foutmelding:
Warning: mysqli_real_escape_string() expects parameter 2 to be string, array given in C:\xampp\htdocs\map\list.php on line 52
You must provide at least one recipient email address.
ok, bedankt voor info,
maar als ik dit doe dan krijg ik de foutmelding:
Warning: mysqli_real_escape_string() expects parameter 2 to be string, array given in C:\xampp\htdocs\map\list.php on line 52
You must provide at least one recipient email address.
wat betekent deze warning?
Soms kan het best handig zijn om de functies die je gebruikt eens op te zoeken...
Je hebt dus een array in je $_POST['checkbox'] zitten. Dan kan je het beste met implode() er een lijst van ID's van maken, die je met WHERE [field] IN in je query verwerken.
<?php
$ids = implode(',',$_POST['checkbox']);
$query = "SELECT * FROM ledenlijst WHERE id IN (".mysqli_real_escape_string($link,$ids).")";
?>
real_escape_string() zonder (enkele) quotes om een querydeel met deze functie is per defintie niet veilig. Alleen deze combinatie is veilig mits je character encoding op orde is. Alle escaping functionaliteit (in zijn algemeenheid) opereert namelijk op deze aanname.
Hier kun je beter gaan voor input filtering: controleer of de inhoud van $_POST['checkbox'] alle id's betreffen. En wellicht ten overvloede zou je alle id's kunnen voorzien van quotes en elk id kunnen escapen met real_escape_string(). Het blijft per slot van rekening user input.