2017-08-26 1 views
1

J'essaie de soumettre des données à une base de données en utilisant AJAX avec une connexion PDO, mais parfois les données ne sont pas envoyées. Je reçois la réponse AJAX vide. Parfois, je reçois $mailbody=$_POST['mailbody']; vide et si je rafraîchis la page et cliquez à nouveau sur soumettre puis la soumission de donnéesObtention d'erreur après la soumission de données à l'aide d'une instruction préparée avec une connexion PDO

En outre, je reçois une erreur. Voudriez-vous m'aider dans cela?

<br /> 
<b>Fatal error</b>: Uncaught Error: Call to undefined method PDOStatement::bind_param() in C:\xampp\htdocs\fillter\process.php:23 
Stack trace: 
#0 C:\xampp\htdocs\demo\process.php(7): aus(Object(PDO)) 
#1 {main} 
    thrown in <b>C:\xampp\htdocs\demo\process.php</b> on line <b>23</b><br /> 

connexion AOP

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "dbname"; 
try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    //echo "Connected successfully"; 
    } 
catch(PDOException $e) 
    { 
    echo "Connection failed: " . $e->getMessage(); 
    } 

process.php

date_default_timezone_set('Asia/Kolkata'); 
$date_of_added= date('d-m-Y H:i:s'); 

switch($_GET['key']) { 
case 'aus':aus($conn);break; 
default : redirect('index.php'); 
} 
function aus($conn){ 
$emailtemplate=$_POST['emailtemplate']; 
$subject=$_POST['subject']; 
$mailbody=$_POST['mailbody']; 
$country="AUS"; 
$email_status=0; 
global $date_of_added; 
$sql ="INSERT INTO request(bulkemails, subjects, mailbody, country, email_status, date_of_send) VALUES (?,?,?,?,?,?)"; 
//echo $sql; 
$stmt = $conn->prepare($sql); 
$stmt->bind_param("ssssis", $emailtemplate, $subject, $mailbody,$country, $email_status, $date_of_added); 
$stmt->execute(); 
$stmt->close(); 
$conn->close(); 
} 

Ajax

$(function() { 
    $("form[name='bulkmailsend']").validate({ 
     // Specify the validation rules 
     rules: { 
      emailtemplate:{ 
       required: true, 
      }, 
      subject: { 
       required: true} 
       }, 
     submitHandler: function(form) { 
      //form.submit(); 
     var emailtemplate = $('#emailtemplate').val(); 
     var subject = $('#subject').val(); 
     var mailbody = $('#editor11').val(); 
     //alert(mailbody); 
      $.ajax(
      { 
       url:'process.php?key=aus', 
       type:'POST', 
       data:{ 
        'emailtemplate':emailtemplate, 
        'subject':subject, 
        'mailbody':mailbody 
       }, 
       success:function(data) 
       { 
        alert(data); 
       }, 
      }); 
     } 
    }); 

    }); 

HTML

<form action="" method="post" name="bulkmailsend" id="bulkmailsend"> 
    <textarea name="emailtemplate" placeholder="Enter email" id="emailtemplate"></textarea> 
    <input type="text" name="subject" placeholder="Subject" id="subject"> 
    <textarea name="mailbody" id="editor11"></textarea> 
    <input type="submit" name="addmail" id="addmail" value="Send"> 
</form> 

Répondre

0

Vous utilisez la syntaxe MySQLi pour les paramètres de liaison, mais utilisé une syntaxe PDO pour se connecter à la base de données. La raison pour laquelle vous obtenez une erreur Call to undefined method PDOStatement::bind_param() est que cette méthode n'existe pas dans PDO mais dans MySQLi (bind_param). Vérifiez la syntaxe correcte pour les paramètres de liaison bindParam lors de l'utilisation de PDO.

En outre, essayez de modifier votre script en conséquence. Une façon consiste à utiliser des espaces réservés nommés.

$sql ="INSERT INTO request(bulkemails, subjects, mailbody, country, email_status, date_of_send) VALUES (:mailTemplate,:subject,:mailbody,:country,:email_status,:date_of_added)"; 
//echo $sql; 
$stmt = $conn->prepare($sql); 
$stmt->bindParam(':mailTemplate', $emailtemplate, PDO::PARAM_STR); 
$stmt->bindParam(':subject', $subject, PDO::PARAM_STR); 
$stmt->bindParam(':mailbody', $mailbody, PDO::PARAM_STR); 
$stmt->bindParam(':country', $country, PDO::PARAM_STR); 
$stmt->bindParam(':email_status', $email_status, PDO::PARAM_INT); 
$stmt->bindParam(':date_of_added', $date_of_added, PDO::PARAM_STR); 
$stmt->execute(); 
// exiting 
$stmt = null; 
$conn = null; 

Une autre façon consiste à utiliser des espaces réservés de point d'interrogation.

$sql ="INSERT INTO request(bulkemails, subjects, mailbody, country, email_status, date_of_send) VALUES (?,?,?,?,?,?)"; 
//echo $sql; 
$stmt = $conn->prepare($sql); 
$stmt->bindParam(1, $emailtemplate, PDO::PARAM_STR); 
$stmt->bindParam(2, $subject, PDO::PARAM_STR); 
$stmt->bindParam(3, $mailbody, PDO::PARAM_STR); 
$stmt->bindParam(4, $country, PDO::PARAM_STR); 
$stmt->bindParam(5, $email_status, PDO::PARAM_INT); 
$stmt->bindParam(6, $date_of_added, PDO::PARAM_STR); 
$stmt->execute(); 
// exiting 
$stmt = null; 
$conn = null; 
+0

Cela fonctionne pour moi.Merci, Mr.Peter –

0

Vous pouvez essayer la fonction ci-dessous pour lier le paramètre.

<?php 

$sql = "INSERT INTO request(bulkemails, subjects, mailbody, country, email_status, date_of_send) VALUES (?,?,?,?,?,?)"; 
$stmt = $conn->prepare($sql); 
$stmt->bindParam(1, $emailtemplate, PDO::PARAM_STR); 
$stmt->bindParam(2, $subject, PDO::PARAM_STR); 
$stmt->bindParam(3, $mailbody, PDO::PARAM_STR); 
$stmt->bindParam(4, $country, PDO::PARAM_STR); 
$stmt->bindParam(5, $email_status, PDO::PARAM_STR); 
$stmt->bindParam(6, $date_of_added, PDO::PARAM_STR); 
?>