Autor | Zpráva | ||
---|---|---|---|
jaku6@mac.com Profil * |
#1 · Zasláno: 16. 3. 2015, 20:53:49
Mám data z formuláře vytvořeného na cognitoforms.com, kde umožňují přeposílat data pomocí JSON POST do databáze. Na jejich stránkách ukazují následující vzorový PHP script, který ale neposílá do mojí MySQL databáze nic. MySQL databáze i tabulka je vytvořená a všechny položky jsou typu TEXT bez omezení, bez primárního klíče a čehokoli. zkoušel jsem všechno možné, ale vůbec nic se neděje a nechápu proč. Může mi někdo pomoct?
<?php $json = file_get_contents("php://input"); if (emptyempty($json)) { echo "No data payload"; die; } $contact = json_decode($json); if ($contact == null && json_last_error() !== JSON_ERROR_NONE) { echo "Error reading JSON: " . json_last_error(); } $mysqli = new mysqli("localhost", "phptest", "vc3123!!", "phptest"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; die; } $query = "insert into contacts (firstname,lastname,address_line1,address_line2,address_city,address_state,address_postalcode,phone,email,company,comments) values (?,?,?,?,?,?,?,?,?,?,?)"; if (!($stmt = $mysqli->prepare($query))) { echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error; die; } if (!($stmt->bind_param("sssssssssss", $contact->{'Name'}->{'First'}, $contact->{'Name'}->{'Last'}, $contact->{'Address'}->{'Line1'}, $contact->{'Address'}->{'Line2'}, $contact->{'Address'}->{'City'}, $contact->{'Address'}->{'State'}, $contact->{'Address'}->{'PostalCode'}, $contact->{'Phone'}, $contact->{'Email'}, $contact->{'Company'}, $contact->{'CommentsOrQuestions'}))) { echo "Bind failed: (" . $stmt->errno . ") " . $stmt->error; } if (!($stmt->execute())) { echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; } ?> |
||
Keeehi Profil |
#2 · Zasláno: 16. 3. 2015, 21:01:22
Funkce emptyempty neexistuje.
Víš, kde to failuje, nebo to proběhne až do konce bez jediného zaváhání? |
||
jaku6@mac.com Profil * |
#3 · Zasláno: 16. 3. 2015, 22:14:44
Keeehi:
jasně "emptyempty" je chyba při kopírování má tam samozřejmě být pouze if (empty($json)) Ale přitom do databáze to nezapíše nic. Uvádějí tam stránku pro testování http://requestb.in a ta data z formuláře přijme a vypíše, i když nevím jestli to zpracovávají PHP, Javou nebo Java Scriptem. Mě ale nejvíc vyhovuje PHP, protože neklade na uživatele žádné nároky na nastavení prohlížeče. |
||
Davex Profil |
#4 · Zasláno: 16. 3. 2015, 22:22:30
Ty chyby nevypisuj přes
echo , ale ukládej je do souboru, kam se potom podívej co to hlásí za chybu.
|
||
Keeehi Profil |
#5 · Zasláno: 16. 3. 2015, 22:26:04
jaku6@mac.com:
Sice to normálně na pozadí probíhá, ale ve vývojářských nástojích jednotlivých prohlížečů si tipicky tyto požadavky můžeš nechat zobrazit. |
||
jaku6@mac.com Profil * |
#6 · Zasláno: 16. 3. 2015, 23:51:49
Tak jsem ten začátek scriptu opravil
<?php $json = file_get_contents("php://input"); $fp = FOpen("./chyby.log","a"); if (empty($json)) { FPutS($fp, "No data payload"); die; } FPutS($fp, "json neprázdný\n"); $contact = json_decode($json); FPutS($fp, "hodnoty"); FPutS($fp, $contact); a vypíše to "json neprázdný" a dál nic. |
||
Keeehi Profil |
#7 · Zasláno: 17. 3. 2015, 00:32:19
Pro začátek dobrý. Je zajímavé, že se v souboru neobjeví i "hodnoty". To by pak znamenalo, že to selhalo nejspíše na řádku 11. Ovšem když dekódování jsonu selže, mělo by se vrátit null a ne rovnou selhat celý script. Doporučil bych tedy si vypsat, cojev proměnné $json a v nějakém testovacím scriptu vedle to prohnat json_decode a zjistit, zda to způsobuje nějaké chyby.
|
||
Davex Profil |
#8 · Zasláno: 17. 3. 2015, 00:37:40
1) Nepoužíváš nějakou prehistorickou verzi PHP? Ukazuje se ve výpisu
phpinfo() rozšíření json?
2) Data asi neumí json_decode() zpracovat. Zapiš si obsah proměnné $json do souboru a podívej se, zda obsahuje očekávaná data.
3) Zapisuj si chyby PHP do souboru a zkontroluj, zda se tam nějaká neobjeví. <?php error_reporting(E_ALL); ini_set("log_errors", 1); ini_set("error_log", __DIR__ . "/php_errors.log"); |
||
jaku6@mac.com Profil * |
#9 · Zasláno: 17. 3. 2015, 00:50:54
PHP mám 5.3.5, json version 1.2.1, json support enabled.
ANO - proměnná $json obsahuje všechna očekávaná data formuláře, takže chyba bude ve funkci json_decode()
zatím díky všem, vrhnu se na to zase zítra |
||
Jan Tvrdík Profil |
#10 · Zasláno: 17. 3. 2015, 09:32:35
Viz také json_last_error.
|
||
jaku6@mac.com Profil * |
#11 · Zasláno: 17. 3. 2015, 23:52:40
OK tak už mi to jede (byla tam chyba při connectu databáze), ale mám ještě problém s češtinou - použil jsem:
$raw_json = file_get_contents("php://input"); $json = mysql_real_escape_string($raw_json); ale to mi $json "vyčistí" tak, že je prázdná. |
||
Keeehi Profil |
#12 · Zasláno: 18. 3. 2015, 00:06:55
jaku6@mac.com:
mysql_real_escape_string použij až těsně před sestavováním dotazu do databáze. |
||
Časová prodleva: 10 let
|
0