Как я могу вызвать функцию PHP для обновления данных в таблице MySQL с помощью функции Javascript? - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь обновить данные в базе данных mysql, используя функцию javascript. Когда я нажимаю на метку, эта функция вызывает php другую функцию для обновления этих данных.если я нажму на ярлык, код сделает все.Не могли бы вы мне помочь?

Я пытался вставить данные в свой настольный телефон sql, вызвав функцию publicatePhone php, но данные не были вставлены.вот мой код:

** Функция Javascript:

function answer1yes(clicked) {

    var s = document.getElementById("answer1oui").checked;

    if (s = "true"){

    <?php include('functions.php'); ?>

    var x="<?php publicatePhone(); ?>";

    alert(x);

    return false;

    }else{

        alert('not checked');

    }
}

** Файл functions.php:

<?php function publicatePhone(){

$con=mysql_connect("localhost","root","hihi51978");

mysql_select_db("script_database2");

//$publicate = "INSERT INTO phone (phone_number, publicate_number) VALUES 
('212661132084', 'yes')";

$publicate = "UPDATE phone SET publicate_number = 'yes' WHERE 

phone_number='212661132084'";

$publicate_result = mysql_query($publicate);

if ($publicate_result==true){echo 'request executed successfelly';} 

else {echo 'request not executed';}

}

?>

** Форма:

<div id="answer1"style="margin: 20%;">

Show my phone number on website's result:

<form action="<?php $_SERVER['PHP_SELF'];?>" method="post" />

<p><label name="labelyes" style="background-color: #035d54; padding: 6px 

30px 6px 30px; border-radius: 35px;" onclick="Javascript:answer1yes()" > 

<input style="display: none;" type="radio" id="answer1oui" name="question1"

value="yes">Yes</label><p>

</form>

</div>

Код показывает «запрос выполнен успешно», но запрос не обновляет мою телефонную таблицу

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

Я имею в виду, что я думаю, что наиболее распространенной практикой вызова функции PHP через Javascript является использование XMLHttpRequests, и я также рекомендую это.

Это работает так:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
       // Typical action to be performed when the document is ready:
       document.getElementById("demo").innerHTML = xhttp.responseText;
    }
};
xhttp.open("GET", "filename", true);
xhttp.send();

Источник: https://www.w3schools.com/xml/xml_http.asp

Если вы хотите использовать jQuery (который я рекомендую при использовании XMLHttpRequests), синтаксис для выполнения XMLHttpRequest намного проще:

$.ajax({
    type: 'POST',
    url: 'yourfile.php',
    data: {
        // someData
    },
    success: (data) => {
        // Code that will be executed after a successful
        // finish of the request

        // data: stuff that was echoed in PHP
    },
    error: (xhr, status, error) => {
        // Code that will be executed after a non successful
        // finish of the request

        // This line will display an error to your console,
        // which holds the PHP-error-code
        console.error(xhr.responseText);
    }
});

Источник: https://jquery.com/

Обратите внимание, что когда вы выполняете XMLHttp- или Ajax-запрос (который в основном одинаков в простых терминах), это асинхронный , что означает, что код после Команда $ .ajax () будет выполнена сразу после этого, даже если запрос еще не завершен.

Так что, если вы хотите выполнить код сразу после завершения запроса, вы должны поместить кодвнутри success или error callback-function.

Если вы хотите увидеть более конкретный пример использования Ajax-запросов в вашем случае, простоспроси.

ДобрыйС уважением

0 голосов
/ 22 декабря 2018

Ладно, вот как я мог бы приблизиться к чему-то такому:

form.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script src="form.js"></script>
    <title>Form</title>
</head>
<body>
    <div id="answer1" style="margin: 20%;">
        Show my phone number on website's result:
        <!-- You only need a "post" and "action" attribute when you are -->
        <!-- submitting this form with an: <input type="submit" value=""> -->
        <form>
            <button onclick="showPhoneNumberOnResults(true)">yes</button>
            <button onclick="showPhoneNumberOnResults(false)">no</button>
        </form>
</body>
</html>

form.js:

function showPhoneNumberOnResults(answer) {
    if (answer) {
        alert('Show number');
        $.ajax({
            type: 'POST',
            url: 'process_answer',
            data: { answer: answer },
            success: (date) => console.log(data),
            error: (xhr, status, error) => console.error(xhr.responseText)
        });
    } else {
        alert('Don\'t show number');
    }
}

This (параметр) => {операторы} вещь - это нечто, называемое «лямбда-выражением», которое является просто краткой формой написания функций.

process_answer.php:

<?php

require_once 'database_connect.php';

$dbConnection->query(/* insert your UPDATE statement */);

database_connect.php:

<?php

$HOST = 'localhost';
$DATABASE = 'script_database2';
$USER = 'root';
$PASSWORD = 'hihi51978';

try {
    $dbConnection = new PDO('mysql:host='.$HOST.';dbname='.$DATABASE, $USER, $PASSWORD);
    // set the PDO error mode to exception
    $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

Здесь я использую PDO.Он просто предоставляет интерфейс, где вы можете работать с различными базами данных, а не только с MySQL.Вы можете прочитать больше об этом здесь: http://php.net/manual/en/intro.pdo.php.

Да, и кстати, я думаю, что вы хотите использовать слово «публиковать» вместо «публиковать».: P

С уважением.

0 голосов
/ 22 декабря 2018

Итак, ваша проблема в том, что $ publicate_result кажется верным, но он не обновил таблицу SQL правильно (или не обновил вообще)?

Если это так:Какой идентификатор является фактическим значением $ publicate_result ?Возможно, в нем есть значение ошибки, которое тип PHP конвертирует в true , потому что переменная не пустая.

Что это говорит, когда вы выводите свою переменную $ publicate_result ?

(Вы можете попробовать

echo var_dump($publicate_result);

, чтобы получить больше информации о переменнойзначение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...