• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JS i PHP a łączenie z bazą danych

Object Storage Arubacloud
0 głosów
80 wizyt
pytanie zadane 20 stycznia w PHP przez Iei Obywatel (1,950 p.)

Witam

W funkcji JS używam PHP do połączenia się z bazą danych, a z poziomu PHP znowu potrzebny mi jest JS do pobrania wartości z elementu input w celu zbudowania zapytania INSERT do bazy danych. Czyli w JS używam PHP, a w PHP znowu JS. Mam wrażenie, że jest to zbyt skomplikowane. Czy można by zrobić to jakoś prościej? Z kodu usunąłem dane logowania do bazy danych.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My site</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
        <input type="text" id="sendToMySQL"/>
        <button id="sqlButton" onclick="func()">SQL send</button>
    <script>function func() {
     <?php 
$servername = "";
$username = "";
$password = "";
$dbName = "";

$conn = new mysqli($servername, $username, $password, $dbName);

if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO Persons (FirstName) VALUES('" . mysql_escape_string("<script type=\"text/javascript\">document.getElementByID('sendToMySQL').value</script>") . "')";
$result = $conn->query($sql);

$conn->close(); 
?>
};
</script>
    
</body>
</html>

 

2 odpowiedzi

+1 głos
odpowiedź 20 stycznia przez adrian17 Ekspert (344,860 p.)
wybrane 20 stycznia przez Iei
 
Najlepsza

Zacznijmy od tego, że to nie ma prawa działać.

Cały PHP wykonuje się w momencie obsługi zapytania o stronę przez serwer. To, że w kodzie umieściłeś

    <script>function func() {
     <?php 

, nie znaczy że ten PHP magicznie wykona się w momencie gdy na przeglądarce u usera wywoła się funkcja JSowa; przecież Twój serwer nie wie o tym, co się dzieje na przeglądarce usera.

Żeby serwer mógł coś zrobić (np wstawić do bazy danych), musi dostać zapytanie od klienta. Więc albo zrób zwykły <form>, formularz wysyłający POSTa na Twój serwer i w osobnym .php zrób obsługę tego zapytania z INSERTem do bazy; albo zrób to samo, tylko zamiast formularza, wyślij zapytanie dynamicznie AJAXem (`fetch()` lub starszy `XMLHttpRequest`). Jedyna różnica, czy wysłanie zapytania spowoduje przeładowanie strony czy nie.

4
komentarz 20 stycznia przez adrian17 Ekspert (344,860 p.)
I dygresja na boku: zamiast bawić się z `mysql_escape_string` i sklejaniem stringów, poczytaj o prepared statements. SQL jest wtedy super prosty do pisania i czytania.
+1 głos
odpowiedź 20 stycznia przez Comandeer Guru (601,590 p.)

Zacznijmy od tego, że to nie zadziała – insert się po prostu wykona z tym ciągiem script.

To, co chcesz tutaj zrobić, to albo normalny formularz (i wtedy go obsługujesz po stronie serwera), albo – jeśli nie chcesz, żeby strona się odświeżała – Ajax. Wówczas możesz wysłać formularz przy pomocy JS-a.

Podobne pytania

0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 18 lutego w JavaScript przez Piotrek2713 Mądrala (5,380 p.)
0 głosów
1 odpowiedź 409 wizyt
pytanie zadane 29 września 2018 w PHP przez wiktor123 Nowicjusz (200 p.)
–1 głos
1 odpowiedź 643 wizyt
pytanie zadane 23 października 2017 w PHP przez David Sundkikngs Obywatel (1,180 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...