Bonjour,
J'ai un soucis que je ne comprend pas, je le fait peut être mal mais je dois vérifié si mes tags existe avant d'envoyez le formulaire
mon form se présente donc comme ceci
<?php foreach($tag as $tags){ ?>
<input id="<?= $tags->id ?>" type="checkbox" name="tags[]" value="<?= $tags->id ?>">
<?php } ?>
et la condition ça serait un truc comme ça mon name étant un tableau (je ne suis pas alaise avec les tableaux) je dois le foreach n'est ce pas, donc le truc est que ici je n'ai pas d'erreur pourtant la condition ne vas pas jusqu'au else if et evidement je souhaite que si je n'ai aucune erreur et bien l'enregistrement ce fasse.
if(!empty($tags)){
var_dump($_POST['tags']);
foreach($tags as $v){
$select = $db->prepare('SELECT id FROM f_tags WHERE id = ?');
$select->execute([$v]);
$checktag = $select->fetchAll();
if(!preg_match('/^[0-9]+$/', $v)){
echo 'no ok 1';
$error .= errors(['Les tags ne doivent être que des chiffres']);
}
if(!empty($checktag[0]->id) != $v){
echo 'no ok 2';
$error .= errors(['Le tags en question est inconue']);
}
}
}else if(empty($error)){ die('ok'); }
J'ai essayer un SELECT EXISTS mais ça ne fonctione pas non plus !
PS : le id 01 ou 02 etc... passe la condition alors qu'il n'existe pas !?
En vous remercants bonne soirée.
Bonsoir,
N y aurait il pas une inversion dans le foreach ?
<?php foreach($tag as $tags){ ?>
<input id="<?= $tags->id ?>" type="checkbox" name="tags[]" value="<?= $tags->id ?>">
<?php } ?>
ne faudrait il pas plutot : " foreach($tags as $tag)" ?
Bonsoir,
Et bien $tags c'est mon post['tags']
je peut evoyez jusqu'a 4 tags du coup je parcour le foreach et je retourne bien au moins 1 ou 4 tags de ma base de donnée du coup le foreach est bon il rend bien la valeur post['tags'][??]
la valeur que je veut c'est bien ceci [??]
le value que je where :id
avec $v
je sais pas si je suis bien claire ? mais là c'est juste que le scrypt s'arrête au foreach du coup je capte pas l'erreur et ça ne me retourne rien sauf quand je test les erreurs.
bonne soirée
Pourquoi ne pas faire un WHERE IN, ce qui éviterait d'appeler autant de fois la BDD que de nombre de tags sélectionné et ce qui augmenterait grandement les performances
// Liste des ID De tags sélectionnés
$tagsList = implode(",", $tags);
$db->prepare("SELECT id FROM f_tags WHERE id IN (${tagsList})");
Tu obtiendrais une liste de tags.
Ensuite, tu compares la longueur des deux tableaux. Si elle est différente, c'est qu'au moins un des tags n'existe pas.
Et tu peux utiliser la fonction array_diff
pour savoir lesquels posent problème.
Petit exemple ici : https://onlinephp.io/c/fad73
Merci Kareylo je vais regarder ça, c'est toujours bien d'avoir la réflexion de tout le monde :)