Przekazanie danych do php

0

Witam serdecznie

Mam pytanie, jak przekazać dane do pliku php bez jego otwierania, ani przekierowywania użytkownika?
Chodzi o to, że mam formularz, zawierający imię oraz email i chciałbym aby 'potajemnie' wysłało mi do bazy danych w momencie gdy użytkownik przechodzi pomiędzy formami

Zasada działania:
Użytkownik wpisuje imię
Klika "Dalej"
Wpisuje Email
Klika "Dołącz"
Teraz powinien potajemnie wykonać się skrypt php jednocześnie pokazując użytkownikowi kolejny formularz "Dziękujemy za dołączenie"

Cały etap formularza w html i jquery mam już zrobiony (parę postów niżej) i wszystko działa okej. Pozostała tylko wysyłka email.

Posiadam taki plik: sub.php:

<?php
include "config.php";
error_reporting(0);

  $name = $_POST['imie'];
  $email = $_POST['email'];
  $data_subskrypcji = date("F j, Y, g:i a"); 

  $query = mysql_query("INSERT INTO subskrypcje(imie,email,data_subskrypcji) VALUES('$name','$email','$data_subskrypcji')");

?>

Lecz niestety nie wiem, jaki kod dodać w jquery aby po kliknięciu przycisku przesłało dane 'potajemnie' do sub.php jednocześnie pozostawiajac użytkownika na tej samej stronie aby pokazała mu sie forma końcowa

pozdrawiam

2

Co rozumiesz przez :"potajemnie"? Poczytaj o AJAX i dodatkowo o SQL Injection.

0

Potajemnie chodziło mi, aby skrypt wykonał się w tle gdy użytkownik będzie przekierowywany na formę końcową z podziękowaniami za subskrypcje, a nie został przekierowany na mail.php, dlatego nie chce używać formularza i post

0

No to jak wspomniałem Ajax. Zerknij sobie na jakieś przykłady np. https://stackoverflow.com/questions/5004233/jquery-ajax-post-example-with-php

0

Już wcześniej starałem się coś kombinować, ale bezskutecznie.
W sensie formularz sam w sobie działa, ale nie dodaje adresu email i imienia do bazy danych

  <fieldset> 
<input type="text" id = "imie" name="imie" placeholder="Imię" />
 <input class="email-form__input" id="email-input" type="email" name="email" placeholder="[email protected]">
 <input id="subscribe-button" class="email-form__button" type="button" value="Dalej">
  </fieldset>
/////////////////
function funkcja() {
var imie = document.getElementById("imie").value;
var email = document.getElementById("email-input").value;
var dataString = 'imie1=' + imie + '&email1=' + email;

if (imie == '' ||  email == '') {
alert("Wypełnij pola!");
} else {

$.ajax({
type: "POST",
url: "http://www.pl/mail.php",
data: dataString,
cache: false,
success: function(html) {
alert(html);
}
});
}
return false;
}

////////////////////////

 <?php
// Fetching Values From URL
$imie2 = $_POST['imie1'];
$email2 = $_POST['email1'];
$connection = mysql_connect("", "", ""); 
$db = mysql_select_db("", $connection); 
if (isset($_POST['email1'])) {
$query = mysql_query("insert into sub(imie, email) values ('$imie2', '$email2')"); 
echo "Form Submitted succesfully";
}
mysql_close($connection); // Connection Closed
?>

A w .js funkcji od buttona który zmienia formę dalej dodaje:

funkcja();

No i niestety nic się nie dzieje. Formy się zmieniają, ale dane nie dodają się do bazy.

0

Chcesz jednym przyciskiem wywołać dwa pliki php?
Wywołanie jednego z include'm drugiego nie zadziała?
Jak chcesz Ajax to daj mu czas na wykonanie zapytania. Przeładuj dopiero jak dostaniesz odpowiedź.

0

Hej.

W związku z poradami, dziś stworzyłem taki testowy kod: index.html

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <title>Insert</title>
</head>
<body>
    <label>Name</label>
    <input type="text" id="name"> 
    <label>Email</label>
    <input type="text" id="email">
    <button type="submit" id="button">SAVE</button>    
    <script>
        $(document).ready(function(){
            $("#button").click(function(){
                var name=$("#name").val();
                var email=$("#email").val();
                $.ajax({
                    url:'insert.php',
                    method:'POST',
                    data:{
                        name:name,
                        email:email
                    },
                   success:function(data){
                       alert(data);
                   }
                });
            });
        });
    </script>
</body>
</html>

oraz insert.php

<?php
$conn = new mysqli('', '', '', '');
$name=$_POST['name'];
$email=$_POST['email'];
$sql="INSERT INTO `data` (`id`, `name`, `email`) VALUES (NULL, '$name', '$email')";
if ($conn->query($sql) === TRUE) {
    echo "Dodano do bazy";
}
else 
{
    echo "Błąd!";
}
?>

I kod sam w sobie działa. Dodaje do bazy imie oraz email.

Tylko teraz jak to połączyć z moim kodem aby działało po kliknięciu subscribe_buton?

.js subscribe_button:

$("#subscribe-button").on("click", function(e) {
  if (validateEmail(emailInput)) {
	if(animating) return false;
	animating = true;
	
	current_fs = $(this).parent();
	next_fs = $(this).parent().next();
            
	//activate next step on progressbar using the index of next_fs
	$("#progressbar li").eq($("fieldset").index(next_fs)).addClass("active");
	
	//show the next fieldset
	next_fs.show(); 
	//hide the current fieldset with style
	current_fs.animate({opacity: 0}, {
		step: function(now, mx) {
			//as the opacity of current_fs reduces to 0 - stored in "now"
			//1. scale current_fs down to 80%
			scale = 1 - (1 - now) * 0.2;
			//2. bring next_fs from the right(50%)
			left = (now * 50)+"%";
			//3. increase opacity of next_fs to 1 as it moves in
			opacity = 1 - now;
			current_fs.css({
        'transform': 'scale('+scale+')',
        'position': 'absolute'
      });
			next_fs.css({'left': left, 'opacity': opacity});
		}, 
		duration: 800, 
		complete: function(){
			current_fs.hide();
			animating = false;
         
		}, 
		//this comes from the custom easing plugin
		easing: 'easeInOutBack'
        
	});
  } else {
 //   $('.error_msg').css("visibility", "visible");
    return false;
  }
});

Próbowałem dodać to tak:

$("#subscribe-button").on("click", function(e) {
  if (validateEmail(emailInput)) {
	if(animating) return false;
	animating = true;
	
	current_fs = $(this).parent();
	next_fs = $(this).parent().next();
	
       ///////////////// DODANY KOD /////////////////////////////////////////             
                var name=$("#name").val();
                var email=$("#email").val();
                $.ajax({
                    url:'insert.php',
                    method:'POST',
                    data:{
                        name:name,
                        email:email
                    },
                   success:function(data){
                       alert(data);
                   }
                });
            //////////////////////////////////////////////////////////////////////////////////////////
	//activate next step on progressbar using the index of next_fs
	$("#progressbar li").eq($("fieldset").index(next_fs)).addClass("active");
	
	//show the next fieldset
	next_fs.show(); 
	//hide the current fieldset with style
	current_fs.animate({opacity: 0}, {
		step: function(now, mx) {
			//as the opacity of current_fs reduces to 0 - stored in "now"
			//1. scale current_fs down to 80%
			scale = 1 - (1 - now) * 0.2;
			//2. bring next_fs from the right(50%)
			left = (now * 50)+"%";
			//3. increase opacity of next_fs to 1 as it moves in
			opacity = 1 - now;
			current_fs.css({
        'transform': 'scale('+scale+')',
        'position': 'absolute'
      });
			next_fs.css({'left': left, 'opacity': opacity});
		}, 
		duration: 800, 
		complete: function(){
			current_fs.hide();
			animating = false;
         
		}, 
		//this comes from the custom easing plugin
		easing: 'easeInOutBack'
        
	});
  } else {
 //   $('.error_msg').css("visibility", "visible");
    return false;
  }
});

Ale nic się nie dzieje, dane nie dodają się do bazy, a strona formularza się zmienia.

Proszę o pomoc! ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1