【问题标题】:send data to php to retrun data from database将数据发送到 php 以从数据库返回数据
【发布时间】:2021-07-26 09:14:43
【问题描述】:

我想获取具有特定名称的所有用户,并且此名称在 javascript 变量中,并且此代码不起作用我应该怎么做?

<table id="table">
        <tr>
        <td>id</td>
        <td>name</td>
        <td>info</td>
        </tr>
    </table>
<script>
        var table = document.getElementById("table");
$.ajax({ 
        type:"POST", 
        url:"process.php", 
        data:{name:"mike"}
        });
</script>
<?php include 'process.php'; ?>
<?php foreach ($users as $user) : ?>
<script>
var row = table.insertRow(1);
  var cell1 = row.insertCell(0);
  var cell2 = row.insertCell(1);
  var cell3 = row.insertCell(2);
  cell1.innerHTML="<?= $user->id ?>";
  cell2.innerHTML="<?= $user->name ?>";
  cell3.innerHTML="<?= $user->info ?>";
</script>
<?php endforeach; ?>

php

$name = $_POST["name"];
$database = [ 
    'host'   => 'localhost', 
    'dbname' => 'dbname', 
    'user'   => 'user', 
    'pass'   => '' 
];
try { 
    $db = new PDO("mysql:host={$database['host']};dbname={$database['dbname']}", $database['user'], $database['pass']); 
} catch (PDOException $e) { 
    die("An error happend, Error: " . $e->getMessage()); 
}
function getAllUsers(){
    global $db;
    $sql = "SELECT * FROM users WHERE $name = name";
    $stmt = $db->prepare($sql);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_OBJ);
}
$users = getAllUsers();

错误是“第 2 行 process.php 中未定义的数组键“名称”” 你能帮我把我的数据发送到我的 php 文件并根据它获取查询吗

【问题讨论】:

  • 你真的是想从用户那里得到列名吗?你不是说name = $name(它还有很多其他问题,比如没有引用的值以及对SQL 注入完全开放)?请阅读How to prevent SQL injection in PHP
  • 更改 $sql = "SELECT * FROM users WHERE $name = name"; to $sql = "SELECT * FROM users WHERE name = $name";
  • 您正在对process.php 进行ajax 调用(我认为这是PHP 代码?),您在其中传递了参数name,但为什么还要包含该PHP 文件?那时,没有$_POST['name'](因为你还没有在那个页面上发布任何东西,只是加载了它)。 Ajax 调用的目的是什么?它将从数据库中选择数据,但不对其进行任何操作。 Ajax 调用是对服务器的完全独立的请求。
  • 马格努斯·埃里克森。首先是想使用 ajax 从数据库中获取数据,但它发出了一些问题,希望将名称发送到 php 并获取具有该名称的所有用户并将其显示在表中我应该怎么做?
  • 在AJAX调用从中获取数据后,这里包含php文件没有意义。

标签: javascript php html jquery ajax


【解决方案1】:

我会实现你想要的......

html

<table id="table">
        <tr>
        <td>id</td>
        <td>name</td>
        <td>info</td>
        </tr>
    </table>
<div id="scriptsforTable"> </div>
<script>
        $.ajax({ 
    type:"POST", 
    url:"process.php", 
    data:{name:"mike"},
    success:function(data) {
        $("scriptsforTable").html(data); 
}
    });
</script>

进程.php

$name = $_POST["name"];
$database = [ 
    'host'   => 'localhost', 
    'dbname' => 'dbname', 
    'user'   => 'user', 
    'pass'   => '' 
];
try { 
    $db = new PDO("mysql:host={$database['host']};dbname={$database['dbname']}", $database['user'], $database['pass']); 
} catch (PDOException $e) { 
    die("An error happend, Error: " . $e->getMessage()); 
}
function getAllUsers(){
    global $db;
    $sql = "SELECT * FROM users WHERE $name = name";
    $stmt = $db->prepare($sql);
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_OBJ);
}
$users = getAllUsers();
echo '<script>var table = document.getElementById("table");</script>';
foreach ($users as $user) :
echo '<script>
var row = table.insertRow(1);
  var cell1 = row.insertCell(0);
  var cell2 = row.insertCell(1);
  var cell3 = row.insertCell(2);
  cell1.innerHTML='.$user->id.';
  cell2.innerHTML='.$user->name.';
  cell3.innerHTML='.$user->info.';
</script>';
endforeach; 

这可能有一些javascript错误,您可以轻松解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多