Bonjour,
J'ai un pb que je n'arrive pas à résoudre:
Je veux envoyer un mail aux abonnés à chaque fois qu'un nouveau post est enregistré en bdd.
public function __construct($controller){
$this->controller = $controller;
}
public function input($name,$label,$options = array()){
$error = false;
$classError = '';
if(isset($this->errors[$name])){
$error = $this->errors[$name];
$classError = ' error';
}
if(!isset($this->controller->request->data->$name)){
$value = '';
}else{
$value = $this->controller->request->data->$name;
}
if($label == 'hidden'){
return '<input type="hidden" name="'.$name.'" value="'.$value.'">';
}
$html = '<div class="clearfix'.$classError.'">
<label for="input'.$name.'">'.$label.'</label>
<div class="input">';
$attr = ' ';
foreach($options as $k=>$v){ if($k!='type'){
$attr .= ' $k=\"$v\"';
}}
if(!isset($options['type']) && !isset($options['options'])){
$html .= '<input type="text" id="input'.$name.'" name="'.$name.'" value="'.$value.'"'.$attr.'>';
}elseif(isset($options['options'])){
$html .= '<select id="input'.$name.'" name="'.$name.'">';
foreach($options['options'] as $k=>$v){
$html .= '<option value="'.$k.'" '.($k==$value?'selected':'').'>'.$v.'</option>';
}
$html .= '</select>';
}elseif($options['type'] == 'textarea'){
$html .= '<textarea id="input'.$name.'" name="'.$name.'"'.$attr.'>'.$value.'</textarea>';
}elseif($options['type'] == 'checkbox'){
$html .= '<input type="hidden" name="'.$name.'" value="0"><input type="checkbox" name="'.$name.'" value="1" '.(empty($value)?'':'checked').'>';
}elseif($options['type'] == 'file'){
$html .= '<input type="file" class="input-file" id="input'.$name.'" name="'.$name.'"'.$attr.'>';
}elseif($options['type'] == 'password'){
$html .= '<input type="password" id="input'.$name.'" name="'.$name.'" value="'.$value.'"'.$attr.'>';
}
if($error){
$html .= '<span class="help-inline">'.$error.'</span>';
}
$html .= '</div></div>';
return $html;
}
}
**********************************************************************************************
<div class="container" style="margin-top: -5rem; z-index: 4; padding-left: 12rem;">
<h1>Ajouter un article</h1>
</div>
<div class="container" >
<form action="<?php echo Router::url('admin/posts/edit/'.$id); ?>" method="post" onsubmit="return confirm('Envoyer un mail de nouveau message ?');">
<div class="container" style="margin: 2rem 0rem 0rem 15rem">
<?php echo $this->Form->input('name','Titre'); ?>
<?php echo $this->Form->input('slug','Url'); ?>
</div>
<div class="container" style="margin: 0rem 0rem 0rem -5rem">
<?php echo $this->Form->input('category_id','Catégorie',array('options' => $categories)); ?>
<?php echo $this->Form->input('created','Date de création',array('class'=>'datepicker')); ?>
<?php echo $this->Form->input('online','En ligne',array('type'=>'checkbox')); ?>
<?php echo $this->Form->input('id','hidden'); ?>
</div>
<div class="container" style="margin: -7.25rem 0rem 0rem 15rem">
<?php echo $this->Form->input('img','adresse de la photo'); ?>
<?php echo $this->Form->input('content','Contenu',array('type'=>'textarea','rows'=>15, 'col' =>15)); ?></div>
<div class="actions" style="margin: 0rem 0rem 10rem 35rem">
<input type="submit" class="btn primary" value="Envoyer">
------------------------------//---------------------------------------
require_once CORE.DS.'db.php';
$req = $pdo->prepare('SELECT email FROM users'); //recupération de la base de donnée
$req->execute();
while ($mail = $req->fetch(PDO::FETCH_ASSOC)){ // je récupère les adresses mail
*-*-*-* création du mail
mail($mail,$sujet,$message,$header);
}
Tel quel, ça envoie un email dès l'ouverture de la page. Je souhaite moi que le mail soit envoyé quand le post est validé.
J'ai donc tenté un IF du genre
if($_POST['submit'] === "envoyer"){
*/*/envoyer le mail*/*/*/
}
mais le pb est que quand je donne le nom à l'input, le message n'est plus enregistré en bdd.
<input type="submit" name="submit" class="btn primary" value="Envoyer">
Quelqu'un saurait pourquoi ? avez vous une solution plus logique pour ce que je veux faire ?
merci.