Как создавать систему multidivisas/divisas PHP/MYSQLI/Ajax?

У меня есть таблица в так называемой базе данных: различи, которая соглашается таким образом:

id moneda precio id_producto 1 USD 100 1 2 EUR 120 1

Таблица продуктов

id_producto producto discrepcion imagen active 1 laptop nuevo laptop.jpg 1 2 phone nuevo phone.jpg 1

Поскольку я получаю цену на разделенную таблицу, но я хочу показать пользователю выбор выбрать Вашу монету в формуляре <select></select> сейчас любая монета, которая собиралась выбирать эту стоимость, появилась на всех страницах, показав продукты, показав деталь продукта, добавив в тележку покупок с одной session в PHP и одна cookie для того, чтобы сохранял этот session избранной монеты куки-файл, который он побеждает за 10 дней и который разрушается куки-файл, если он состоит в том, что пользователь вновь выбирает другую монету.

Сейчас не, если бы было хорошо помогать ajax, чтобы избегать перезагружать страницу или ту стоимость redireccionar в страницу divisa.php, и что эта страница сохраняла информацию и redirecione снова в url, где выбирается монета. Сходный updatecart.php в updatecart.php количество продукта обновляет и добавляют, что продукт в тележку покупок сейчас в divisa.php могли бы осуществлять что-то похожее?

function newpro(){
    global $con;
    $sqlnew = "Select * from productos where id_producto and active='1' order by id desc limit 12";
    $rows = mysqli_query($con, $sqlnew);
    $new_products = mysqli_num_rows($rows);

    if($new_products==0){
        echo"No hay productos nuevos";
    }else{
        while ($newpro = mysqli_fetch_array($rows)) {
            echo'<div id="cont-items">
                <div class="image-items">
                <img src="'.$newpro['imagen'].'" height="10" width="150" alt="" />
                </div>
                     <div class="name-items">'.$newpro['producto'].'</div>
                 </div>
            ';
        }
    }
}

Не, поскольку выдвигать эту систему я не понимаю очень хорошо на куки-файле, жду Ваш ответ перед рукой большое спасибо.

1
задан 26.07.2016, 20:37
3 ответа

Я буду помещать очень простой пример, который у меня есть в функционировании, и функционируйте верно.

Просто создавая одну cookie для каждого divesa, который один хочет добавить. Так мы избегаем быть должным вводить в нашу Base Datos каждый divesa, иметь что-то в виду, что, чтобы вычислять стоимость divesa, эта становится отвечающей современным требованиям часто. Существуют много онлайн страниц, для знания эта стоимость (https://es.finance.yahoo.com / валюта / конвертер / #from=EUR; to=USD; amt=1)

Мы начинаемся, где пользователь выбирает желанную монету, я помещу как одинокий пример два монет, было бы возможно расширять легко:

<form method="POST" id="slc_moneda" enctype="text/plain">

    <input id="euro" type="radio" name="moneda" value="euro">
    <input id="dolar" type="radio" name="moneda" value="dolar">

    <button type="submit">Guardar cambios</button>
</form>

<div class="resultado"><!-- Mensajes PHP --></div>  

Мы начинаемся с Ajax, этот ты можешь включать это в <head></head>, где мы вводим наш формуляр.

$(document).ready(function() {
    $(document).on('submit', '#slc_moneda', function() {

        var data = $(this).serialize(); 

        $.ajax({    
            type : 'POST',
            url  : '.php/control_moneda.php',
            data : data,
            success :  function(data) { 
                $(".resultado").html(data);                              
            }
        });    
        return false; 

    });
});

Давайте видеть, как у нас остается страница PHP названный из-за Ajax

<?php 
//Reseteo.
$moneda = $message = "";

//Verdadero -> Formulario
if (isset($_POST)) {

    //Comprobacion datos obligatorios.
    if (empty($_POST['moneda'])) {
        $message = "Selecciona una moneda para continuar.";
    } else { $moneda = dataFields($_POST['moneda'] ?: ''); }

    //Si se ha seleccionado una moneda.
    if ($moneda) {          

        if ($moneda == "euro") {
            //Destruimos cookie dolar, si esta definido.
            if (isset($_COOKIE['moneda_dolar'])) {
                setcookie("moneda_dolar",$moneda,1,"/",false, false);
            }
            //Activamos cookie euro
            setcookie("moneda_euro",$moneda,strtotime( '+365 days' ),"/",false, false);
            //Recargamos pagina
            echo "<script>window.location.reload();</script>";  
            $moneda = "";

        } elseif ($moneda == "dolar") {
            //Destruimos cookie euro, si esta definido.
            if (isset($_COOKIE['moneda_euro'])) {                   
                setcookie("moneda_euro",$moneda,1,"/",false, false);
            }
            //Activamos cookie dolar
            setcookie("moneda_dolar",$moneda,strtotime( '+365 days' ),"/",false, false);
            //Recargamos pagina         
            echo "<script>window.location.reload();</script>";  
            $moneda = "";

        } else { 
            $moneda = "";
            $message = "Ocurri&oacute; un error inesperado, int&eacute;ntelo de nuevo m&aacute;s tarde.

        }

    }

} 

//Function -> Obtenemos la moneda de manera segura.
function dataFields($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

//Salida Errores -> mensajes
echo $message;  
?>

С этим кодом уже давайте верить в монету для пользователя в течение 365 дней, и так он сможет переходить с одного сайта на другой comadamente, не будучи должен выбирать каждый раз, когда посещает твой Веб монета.

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

<?php //Mostramos el precio segun COOKIE (euro/dolar).

    function valorProducto() {

        global $precio;//Obtenido por Base de Datos.

        // EURO / USD (10 oct 2016)
        $valor_divisa_usd = 1,114;   
        //Aqui añadimos el valor de las divesas a calcular, en este caso solo voy a calcular de euro / dolar.

        if ( isset($_COOKIE['moneda_dolar'])) {                 

            // Calculamos el precio euro a dolar, simplemente multiplicando por el valor de la divesa añadido.
            $precio_dolar = $precio * $valor_divisa_usd;

            //Funcion php - convertor a USD
            setlocale(LC_MONETARY, 'en_US');
            $precio_dolar = money_format('%i', $precio_dolar) . "\n";                                       
            echo "$precio_dolar"; 

        } elseif (isset($_COOKIE['moneda_euro'])) {
            //Funcion php - convertor a EURO
            setlocale(LC_MONETARY, 'es_ES');                                        
            $precio = money_format('%.2n', $precio) . "\n"; //devuelve 12.345,67 €
            echo "$precio"; 
        } else { //Por defecto
                //Funcion php - convertor a EURO
                setlocale(LC_MONETARY, 'es_ES');                                        
                $precio = money_format('%.2n', $precio) . "\n"; //devuelve 12.345,67 €
            echo "$precio";  
        }
    }//Fin.
    ?>

Заметь: Функция money_format() только будь определена, если у системы есть способность strfmon. Например, Windows это не делает, так что money_format() не будь определен в Windows.

Удачи!

1
ответ дан 24.11.2019, 13:46

Я думаю, что более работоспособное решение состоит в том, чтобы хранить в базе данных базовую стоимость в монете, в американских долларах например, и хранить причины изменения. Например доллар - евро мог бы стоить 0.8. Если ты хочешь получить изменение евро в доллар, просто ты делаешь следующее:

8 euros /0.8 = 10 dólares

Если ты хочешь перейти из долларов в евро, просто ты умножаешь из-за 0.8, ты считал бы что-то следующим:

10 dólares * 0.8 = 8 euros

Таким образом, ты не должен хранить стоимость стоимость валюты (в предположении того, что у тебя есть 20 типов валюты и 10 продуктов, у тебя было бы 200 типов стоимости в базе данных, взамен с предыдущим только ты хранишь 20 реестров)

Чтобы делать изменение валюты, ты выполнил бы вызов AJAX, написанный в файле JS, который работает, нажав на кнопку. Код мог бы быть чем-то похожим на это:

$.ajax({
        type: "POST", //o GET según necesites
        url: "api/divisas_api/get_us-mx", //la url de la función para consultar la razón de cambio
        data: {
            producto:"zapatos MVC-3421"
        },
        success: function(data) {
          $('#precio').val()=data; // si estás usando un input 
$('#precio').append(data); // si estás escribiendo el precio como texto
        }});
1
ответ дан 24.11.2019, 13:46
  • 1
    В способе, который ты показываешь, что он предотвращает меня создавать много реестров, но друге я пробую создавать систему не считаю созданным ничего в и # 250; n, если не является много просить друг podr и # 237; эксперт осуществлять пример я завершаю пожалуйста, сейчас с примером, который ты показываешь, как я должен располагать в порядке подмостки в базе данных цена, я это должен включать в таблицу продукты и консультация, чтобы показывать, зарегистрировала их, как должен будь быть и пример, который ты показываешь, должен быть посредством сеансов правдой для, когда я захочу осуществить paginaci и # 243; n не будет теряться стоимость. – Otto 27.07.2016, 00:22
  • 2
    Ты не нуждаешься в sesi и # 243; n для твоего prop и # 243; расположенный, проблема - что ты нуждаешься в том, чтобы обновить цены на продукты в новую валюту... с c и # 243; я говорю, что AJAX, которого я написал, ты можешь делать консультацией и actualizaci и # 243; n в c и # 243; я говорю HTML. Если est и # 225; s используя framework MVC ты можешь создавать funci и # 243; n (модель), которую считал бы письменной query и которая выполняла бы operaci и # 243; n aritm и # 233; костариканская и я возвратил ее, предыдущей является пара и # 225; метр унифицированный указатель ресурса в ответе. – Pak Lei 27.07.2016, 00:36

Поскольку я вижу этот laptop два раза в той же таблице, различие состоит в том, что у него есть различная монета, я думаю, что это serГ - в исчисленное поле, потому что, изменив валютный курс, tendrГ-схвати, что изменять все цены

0
ответ дан 24.11.2019, 13:46
  • 1
    просвет - два раза, потому что, изменив монету, это не всегда будет та же стоимость, когда этот дебет меняет валюту менять стоимость, но не, как изменение этого для того, чтобы оно функционировало верно, ответ - пример, потому что было бы очень пространным описывать отдельные подмостки, это общая стоимость. – Otto 26.07.2016, 21:02
  • 2
    Чтобы производить твой select с монетами ты можешь использовать foreach . быть и # 237; во что-то эксперт и # 237;. foreach ($moneda as $mo) { echo "<option value='".$mo[0]."'>.$mo[1]."</option>"; – Kevin Sandón 26.07.2016, 21:12