I found this issue is related to my AJAX posting method. If I post this form using the standard method (action=””) it works fine it polulates my database according to which record I select in the list to post. But when I use the AJAX Post method it will only poplulate the values with the first record on the SQL Results list. I made my input fields visible and all the posted content is unique and as expected. Below is the full code.
<?php // Create connection $conn = new mysqli($servername, $username, $password, $dbname); /// Check SQL connection if ($conn->connect_error) { echo"my error"; die(); } // Get the the data from the database $sql = "SELECT * FROM clients WHERE"; $result = $conn->query($sql); // Check database connection first if ($conn->query($sql) === FALSE) { echo"my error"; exit(); } else if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo' <div class="col-md-3 bid-section"> <form action="" method="post" > <!-- Favourites --> <input type="text" class ="name" name="name" value="'.$row["name"].'"> <input type="text" class ="surname" name="surname" value="'.$row["surname"].'"> <input type="text" class ="country" name="country" value="'.$row["country"].'"> <a class ="favourite-btn" > <div class="'.$favicon.'"></div> </a> </form> </div> <!-- Column 3 END -->'; } } mysqli_free_result($result); mysqli_close($conn); ?> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script> AJAX script $(document).ready(function(){ $('.favourite-btn').click(function(event){ event.preventDefault(); var field1= $('.name').val(); var field2= $('.surname').val(); var field3= $('.country').val(); $.post('mydirectory/add_names_sql.php', {name:field1, surname:field2 , country:field3}, // Alert Success function(data){ // Alerts the results to this Div $('.favourite-btn').html(data); }); }); }); </script>
Advertisement
Answer
$(‘.name’).val()` is the value of the first element with that class. You need to select the element that’s in the same form as the button that was clicked.
var form = $(this).closest("form"); var field1= form.find('.name').val(); var field2= form.find('.surname').val(); var field3= form.find('.country').val();
You could also get all the form inputs with:
var formdata = $(this).closest("form").serialize();
And in the callback function, you also need to update the appropriate element.
form.find('.favourite-btn').html(data);