为了账号安全,请及时绑定邮箱和手机立即绑定

使用php,ajax从数据库中获取数据

使用php,ajax从数据库中获取数据

PHP
牧羊人nacy 2021-10-15 15:42:22
我有一个简单的部分,我在其中显示数据库中的数据,我的数据库如下所示。现在我有四个按钮看起来像这样当用户单击上述按钮之一时,它会显示此所以现在当用户例如选择construction和下一步选择例如Egypt' in the console and clicks button确认displays [855,599075], user can select multiple countries, this works as expected for建筑,电力,油`,现在我想如果用户例如单击All available industries这四个按钮中的按钮然后选择例如Egypt并单击confirm它应该显示埃及在建筑,石油,电力部门的总项目 总和855+337+406=1598以及两个部门的总预算总和1136173这是我的解决方案HTML<div id="interactive-layers">    <div buttonid="43" class="video-btns">        <span class="label">Construction</span></div>    <div buttonid="44" class="video-btns">        <span class="label">Power</span></div>    <div buttonid="45" class="video-btns">        <span class="label">Oil</span></div>    <div buttonid="103" class="video-btns">        <span class="label">All available industries</span>    </div></div>这是js ajax$("#interactive-layers").on("click", ".video-btns", function(){    if( $(e.target).find("span.label").html()=="Confirm" ) {        var selectedCountries = [];        $('.video-btns .selected').each(function () {            selectedCountries.push( $(this).parent().find("span.label").html() ) ;        });        if( selectedCountries.length>0 ) {            if(selectedCountries.indexOf("All available countries")>-1) {                selectedCountries = [];            }        } else {            return;        }        var ajaxurl = "";        if(selectedCountries.length>0) {            ajaxurl = "data.php";        } else {            ajaxurl = "dataall.php";        }现在,当用户单击All available industriesbtn 并选择一个国家/地区时,我会 [0,0]进入控制台。我需要改变什么才能得到我想要的?任何帮助或建议将不胜感激,
查看完整描述

3 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

在你 dataAll.php


如果您选择了All available industries

不检查部门,因为您需要所有部门(最终您应该检查国家/地区),因此您应该避免检查这种情况


<?php


$conn = mysqli_connect("localhost", "root", "", "love");

$result = mysqli_query($conn, "SELECT * FROM meed");

$data = [];


$wynik = [];

$totalProjects = 0;

$totalBudget = 0;


while ($row = mysqli_fetch_array($result)) {

    $totalProjects += $row['SumofNoOfProjects'];

    $totalBudget += $row['SumofTotalBudgetValue'];

}

echo json_encode([$totalProjects, $totalBudget]);


查看完整回答
反对 回复 2021-10-15
?
慕村9548890

TA贡献1884条经验 获得超4个赞

您可以使用 SQL JOIN 运算符,或者在这种情况下,隐式连接将是最干净的:

$result = mysqli_query($conn, "SELECT * FROM construction, power, oil_and_gas, industrial WHERE construction.Countries = power.Countries AND power.Countries = oil_and_gas.Countries AND oil_and_gas.Countries = industrial.Countries");

您需要 WHERE 条件,以便它知道每个不同表的行是如何相互关联的。您可以使用表的别名将其缩短一点:

$result = mysqli_query($conn, "SELECT * FROM construction as C, power as P, oil_and_gas as G, industrial as I WHERE C.Countries = P.Countries AND P.Countries = G.Countries AND G.Countries = I.Countries");

但是,在这种情况下,我认为您可能需要考虑更改数据库的结构。似乎您在它们之间重复了很多列。也许这些都可以在一个表中,有一个“类型”列,指定它是电力、建筑等。然后您可以只查询一个表并按国家/地区名称分组以获得所有结果,而无需跨 4 的混乱连接表。


查看完整回答
反对 回复 2021-10-15
?
墨色风雨

TA贡献1853条经验 获得超6个赞

单表看起来还可以。


(本答案的其余部分不完整,但可能有用。)


首先,让我们设计将请求数据的 URL。


.../foo.php?industry=...&country=...

但是,不是在客户端中对“全部”进行特殊的外壳,而是在服务器中进行。也就是说,工业的最后一个按钮将生成


    ?industry=all

并且 PHP 代码不会将其包含在WHERE子句中:


    AND industry IN (...)

同样对于&country=all对&country=egypt,iran,iraq


现在,让我简要地关注一下 PHP:


$wheres = array();


$industry = @$_GET['industry'];

if (! isset($industry)) { ...issue error message or use some default... }

elseif ($industry != 'all') {

    $inds = array();

    foreach (explode(',', $industry) as $ind) {

        // .. should test validity here; left to user ...

        $inds[] = "'$ind'";

    }

    $wheres[] = "industry IN (" . implode(',', $inds) . )";

}


// ... repeat for country ...


$where_clause = '';

if (! empty($wheres)) {

    $where_clause = "WHERE " . implode(' AND ', $wheres);

}

// (Note that this is a generic way to build arbitrary WHEREs from the data)


// Build the SQL:


$sql = "SELECT ... FROM ... 

           $where_clause

           ORDER BY ...";

// then execute it via mysqli or pdo (NOT mysql_query)

现在,让我们谈谈使用 AJAX。或不。有2个选择:


您可以通过 a 调用 PHPGET并让 PHP 显示一个新页面。这意味着 PHP 将构建结果表。

您可以使用 AJAX 来请求数据。这意味着 Javascript 将构建结果数据。

选择哪个选项可能取决于您更熟悉哪种语言。


查看完整回答
反对 回复 2021-10-15
  • 3 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信