JQuery ajax + php – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

JQuery ajax + php – PHP – Fórum – Programujte.comJQuery ajax + php – PHP – Fórum – Programujte.com

 

Marek
~ Anonymní uživatel
521 příspěvků
10. 2. 2016   #1
-
0
-

Zdravím,

zkouším udělat web a pomocí ajaxu odesílám do Kontroleru třídy AjaxKontroler registrační údaje a chtěl bych po jejich zpracování do databéze vrátit JSON který si zpracuju  v JS, mám front controler, na který je pomocí .htacess vše přesměrováno, index.php:  

<?php

session_start();

// Nastavení interního kódování pro funkce pro práci s řetězci
mb_internal_encoding("UTF-8");


if ($_POST)
{
	// Callback pro automatické načítání tříd controllerů a modelů
	require("kontrolery/Kontroler.php");
	require("modely/SpravceUzivatelu.php");
	require("kontrolery/AjaxKontroler.php");
	require("modely/Db.php");

// Připojení k databázi
	Db::pripoj("127.0.0.1", "root", "", "wormsfarm");
	$ajax = new AjaxKontroler();
	header("Content-Type: application/json", true);
	echo($ajax->zpracuj(array($_SERVER['REQUEST_URI'])));

}
else
{


	require("pohledy/rozlozeni.phtml");
}

dále v JS mám Jquery ajax :

$.ajax({
            type: "POST",
            url: "wormsfarm.localhost.com/ajax/registrovat/",
            data: {
                "email": email,
                "heslo": heslo,
                "hesloznovu": hesloznovu,
                "jmeno": jmeno,
                "prijmeni": prijmeni,
                "telefon": telefon,
                "ulice": ulice,
                "mesto": mesto,
                "psc": psc,
                "captcha": captcha
            },
			
            
            success: function (data) {
				
                console.log(data);

                $("#registrace").html("Registrace proběhla úspěšně!<br>Potvrďte registraci klepnutím na odkaz v aktivačním emailu.");
                setTimeout(function () {
                    $("#registrace").delay(6800).hide();
                    $("#zatmeni").delay(6800).hide();
                }, 3000);

            }

Kontroler ajaxu má metodu:

public function registrovat()
    {		
		
		
		if ($_POST)
		{
				
				$spravceUzivatelu = new SpravceUzivatelu();
				$spravceUzivatelu->registruj($_POST['email'],$_POST['heslo'],$_POST['hesloZnovu'],$_POST['jmeno'],$_POST['prijmeni'],$_POST['telefon'],$_POST['ulice'],$_POST['mesto'],$_POST['psc'],$_POST['captcha']);
									
						$email= $_POST['email'];
						$jmeno= $_POST['jmeno'];
						$prijmeni= $_POST['prijmeni'];
						$telefon= $_POST['telefon'];
						$ulice= $_POST['ulice'];
						$mesto= $_POST['mesto'];
						$psc= $_POST['psc'];
					
					$navraceno = array("id"=> 5 ,
						"email"=> $email,
						"jmeno"=> $jmeno,
						"prijmeni"=> $prijmeni,
						"telefon"=> $telefon,
						"ulice"=> $ulice,
						"mesto"=> $mesto,
		
						"psc"=> $psc);

			 
			
		}
		
		
			return json_encode($navraceno);
	
    }

nicméně se mi nedaří vrátit do JS žádný JSON a vyskakuje stále error. Data se bez problému uloží do databáze. 

Nevím jestli dělám chybu někde v .htacces, nebo vracím json špatnou cestou, pročetl sem všemožné diskuse ale nic.

Uměl by někdo prosím poradit, kterým směrem se zaměřit, kde by mohla být chyba? 

Nahlásit jako SPAM
IP: 2a00:1028:8382:1912:b4f4:...–
chita0
Newbie
10. 2. 2016   #2
-
0
-

Místo return json_encode($navraceno); vyzkoušej echo json_encode($navraceno);

Nahlásit jako SPAM
IP: 77.104.198.–
Marek
~ Anonymní uživatel
521 příspěvků
10. 2. 2016   #3
-
0
-

#2 chita
ať tam dám obojí: jquery ajax vyhodí error: Requested JSON parse failed.

Nahlásit jako SPAM
IP: 2a00:1028:8382:1912:b4f4:...–
chita0
Newbie
10. 2. 2016   #4
-
0
-

Uprav data v ajaxu :

data: {email: email,
       heslo: heslo,
       hesloznovu: hesloznovu,
       jmeno: jmeno,
       prijmeni: prijmeni,
       telefon: telefon,
       ulice: ulice,
       mesto: mesto,
       psc: psc,
       captcha: captcha
},
Nahlásit jako SPAM
IP: 77.104.198.–
Marek
~ Anonymní uživatel
521 příspěvků
10. 2. 2016   #5
-
0
-

#4 chita
udělal jsem, výsledek bohužel stále stejný 

Nahlásit jako SPAM
IP: 2a00:1028:8382:1912:b4f4:...–
Kit+15
Guru
10. 2. 2016   #6
-
0
-

#5 Marek
Nechceš to udělat raději v architektuře MVC? Pak se v tom možná vyznáme.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4014 příspěvků
11. 2. 2016   #7
-
0
-

Ty na to jdes nejak slozite a pritom to nechavas otevrene k nabourani hackerum amaterum :)
Php kod

function registrovat()
{		
if (count($_POST)>0)
	{	// key => default value
	$keys = array(
		'email' => '',
		'heslo' => '',
		'hesloZnovu' => '',
		'jmeno' => '',
		'prijmeni' => '',
		'telefon' => '',
		'ulice' => '',
		'mesto' => '',
		'psc' => '',
		'captcha' => ''
		);
	$data = array();
	// read data
	foreach($keys as $key=>$value)
		{$data[$key] = isset($_POST[$key]) ? $_POST[$key] : $value;}
	// write data
	// !!! tady by mela byt kontrola dat, nez to zapises
	$spravceUzivatelu = new SpravceUzivatelu();
	$spravceUzivatelu->registruj($data); // nevim, proc tu nepredavas celou array
	// return data
	unset($data['heslo']);
	unset($data['hesloZnovu']);
	unset($data['captcha']);
	return json_encode($data);
	}

return json_encode($array());}

JS

$.ajax({
            type: "POST",
            url: "wormsfarm.localhost.com/ajax/registrovat/",
            data: {
                email: email,	// ty uvozovky tam byt nemusi, kdyz pouzijes jen a-z znaky
                heslo: heslo,
                hesloZnovu: hesloznovu, // !musi byt stejne nazvy $_POST['hesloZnovu']
                jmeno: jmeno,
                prijmeni: prijmeni,
                telefon: telefon,
                ulice: ulice,
                mesto: mesto,
                psc: psc,
                captcha: captcha
            },

console.log(data); - ja to radeji pisi do textarea.value nebo div.innerHTML, console log nemusi byt podporovany nebo to muzes mit vypnute, ale to je na tobe

return v PHP dava navratovou hodnotu. Co s ni delas dal? Prijde mi, ze ti tu znacka cast kodu schazi. Pokud je tam return, tak by zapis mel vypadat takto
echo registrovat();

A podle ceho poznas, ze probehla uspesna registrace? V tom mem upravenem kodu to vrati vzdy bud prazdna data (js dictionary {}) a nebo puvodni data bez hesel a captcha. Ale nikde neni indikator true, false, ze registrace probehla v poradku. 

//bych tu ocekaval
if (...) // kontrola count(post)
  {
  // kontrola udaju
  if (kontrola_ok) 
    {
    $spravceUzivatelu = new SpravceUzivatelu();
    $bool = $spravceUzivatelu->registruj($data);
    if ($bool) return json_encode($data);
    }
  }
return json_encode(array());

v JS pak
 success: function (data) {
	console.log(data);
	data = decode(data);
	if (data.jmeno) {alert('registrace ok');} // jestlize existuje jmeno v data, pak byl $bool v php true; v opacnem pripade je tam prazdna {} a jmeno tam neexistuje
	else {alert('registrace chyba');}
        
Nahlásit jako SPAM
IP: 2001:718:2601:26c:c576:af...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý