ugrás a tartalomhoz

AJAX érték küldés PHP-be

Huncsuga · 2020. Szep. 3. (Cs), 14.43
Az lenne a kérdésem, hogy van egy változom, aminek az értékét át kellene küldjem AJAXból egy másik oldalra, PHP-be.
Ez az AJAX kód:
<script type="text/javascript">
       function placsika(clicked_id){
          var idkerd =  clicked_id.id;
          idkerd = Number.parseInt(idkerd);
       
           $.ajax({
          type: 'POST', 
           url: "http://localhost/web/Forum/valaszbeker.php",
           data: ({
                kulcs12: idkerd
           }), 

           success: function(data) 
            { 
                return data;
            } 
        }); 
        }
  </script>
És ez itt a PHP kód:

<?php
      require_once('C:\xampp\htdocs\web\bejelentkezes\connection.php');
      session_start();
    if(isset($_POST['message']))
    {
        $message = $_POST['message'];
        $_SESSION['message1'] = $message;
        $elonevv = $_SESSION['elonevecskekk'];
        $utonevv = $_SESSION['utonevecskekk'];
           if(isset($_POST["kulcs12"])){
                $kulcs3 = $_POST["kulcs12"];
            }
            $sqlv1 = "INSERT INTO valaszok VALUES('', '$kulcs3', '$elonevv', '$utonevv', '$message')";
            $result211 = mysqli_query($conn, $sqlv1);
     }
?>
És az oldal ezt a hiba kódot adja vissza: Notice: Undefined variable: kulcs3 in C:\xampp\htdocs\web\Forum\valaszbeker.php on line 36.
 
1

AJAX érték, AJAX kód

Pepita · 2020. Szep. 4. (P), 09.52
Szia!
Az Ajax egy kommunikációs technológia, se értéke nincs, se nem programnyelv.
Tehát valamilyen értéket szeretnél ajax-szal elküldeni egy fogadó részére, valamint a beküldést javascript kóddal oldod meg.

A hibaüzenetben a 36. sor szerepel, a példakód csak 16, így nehéz pont eltalálni a hiba okát.
A tippem: false értéke van az itt 10. sornak, és előtte nem adsz alapértelmezett értéket a $kulcs3 változónak, ezért undefined (= nem definiált).

Tehát a $_POST['message'] létezett, de a $_POST["kulcs12"] nem.
Ez azért is érdekes, mert a javascript kódban csak a kulcs12 -t küldöd be, és message - et nem...

Ezen kívül - bár ez nem volt kérdés - mindenféle ellenőrzés, szűrés és escape-elés(!!!) nélkül szúrsz be adatot az adatbázisba. Ezt véletlenül se élesítsd ki, mert 5 perc alatt feltörik.
Amíg alapvető biztonsági ismeret-hiányok vannak, addig nem ajánlott felhasználókezeléssel foglalkozni (otthon xampp vagy más, otthoni környezetben persze lehet, de élesben nem).
2

Köszönöm, még egy kérdés

Huncsuga · 2020. Szep. 8. (K), 19.01
Igen, bocsánatot kérek, a pontatlanságomért, 12. után informatika egyetemre szeretnék tovább menni, és gondoltam, hogy előtte picit gyakorlom, nem szeretném feltölteni a weboldalt(legalábbis egyelőre). A messaget fenneb küldöm el, van a HTML kódba egy form és az segítségével, az jól működik. Utána nézek ennek a szűrésnek és escape-elésnek, köszönöm szépen, hogy felhívtad rá a figyelmemet, nem tudtam, hogy létezik ilyen. Ezen kívül lenne egy olyan kérdésem, hogy nincs tipped, hogy az if-em mi miatt kap false értéket?
3

Amit nem látunk, az nincs

Pepita · 2020. Szep. 11. (P), 06.29
A messaget fenneb küldöm el, van a HTML kódba egy form és az segítségével, az jól működik.

Hol "fentebb"? Aminek nem látjuk a kódját, az nincs is. :) Láthatatlan kódban az esetleges hiba is láthatatlan.

Fenntartom a korábbi állításom a PHP feldolgozóra: "Tehát a $_POST['message'] létezett, de a $_POST["kulcs12"] nem."
Ezt igazolni látszik, hogy "A messaget fenneb küldöm el", szerintem a PHP Notice abból a másik request-ből ered.
FONTOS tudni, hogy hogyan műxik a HTTP protokoll, ennek kicsit olvass utána. (Itt a legfontosabb: 1 request - 1 response.)
Úgy tűnik (de még nem láttuk), hogy "fentebb" egy különálló (szintén Ajax?) request küldi be a message-et, itt pedig külön a kulcs12.
Ez azért nem szerencsés, mert akkor különálló feldolgozó kell hozzá. Ha backend (BE) oldalon egyszerre van szükség a két adatra, akkor azt egy request-ben egyszerre kell beküldeni.

Mivel az elején vagy és tanulás a cél, azt javaslom, hogy oldd meg először ajax nélkül, "sima" form post-tal, itt tapasztald ki, hogy mikor mi történik, írd meg úgy, hogy bárki bármit hackel a frontenden (FE), akármilyen kamu post megy be, a BE mindig helyesen teszi a dolgát, és még megfelelő üzeneteket is kiÍr, hogy sikeres a művelet, vagy ha nem, miért nem.
Érdemes kipróbálni azt is, mi van ha disabled egy input, vagy kitörölték a formból, stb stb.
Ha ez meg van, utána lehet elkezdeni ajaxolni, itt viszont érdemes a BE-t úgy csinálni, hogy ha csak xhr request-et akarsz fogadni, akkor zárja ki azokat, ami nem az..