Javascript 将MYSQL(PHP)值拉入JSON->;错误未定义

Javascript 将MYSQL(PHP)值拉入JSON->;错误未定义,javascript,php,mysql,json,Javascript,Php,Mysql,Json,我试图从MYSQL中推送信息,在一个名为edit_v的PHP文件中,在我的主文件“editar_v”中,我想填充表单中的输入字段,这样,用户可以编辑存储在我数据库中的与车辆相关的信息。为此,我使用Ajax,因此页面不会被重新加载/更改 这是我的editar_v.php的主要代码: <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <

我试图从MYSQL中推送信息,在一个名为edit_v的PHP文件中,在我的主文件“editar_v”中,我想填充表单中的输入字段,这样,用户可以编辑存储在我数据库中的与车辆相关的信息。为此,我使用Ajax,因此页面不会被重新加载/更改

这是我的editar_v.php的主要代码:

<div class="container-fluid">
  <div class="row">
      <div class="col-md-12">
        <form method="POST" action="editar_v.php">
            <div class="form-row">
                <div class="form-group col-md-12">
                    <label for="input_veiculo_editar">Escolha o veículo que pretende editar:</label>
                    <select class="custom-select my-1 mr-sm-2" id="dropdown_matricula">   
                    <option selected>Veículos Disponíveis</option>
                    <?php 
                        $conn = new mysqli("localhost", "root", "", "escolas_conducao_semprefundo");
                        $sql = "SELECT id, matricula FROM veiculo";
                        $result = $conn->query($sql);

                        if($result->num_rows > 0)
                        {
                            while($row = $result->fetch_assoc()) {
                            echo "<option value='".$row['id']."'>".$row['matricula']."</option>";                      
                            }
                        }    
                    ?>
                    </select>
                </div>
            </div>

            <div class="form-row">
                <div class="form-group col-md-6">
                    <label for"input_marca">Marca do Veículo:</label>
                    <input type="text" class="form-control" id="input_marca" disabled value="NOTHING">
                </div>
                <div class="form-group col-md-6">
                    <label for="input_modelo">Modelo do Veículo:</label>
                    <input type="text" class="form-control" id="input_modelo" disabled>
                </div>
            </div>  
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label for"input_cilindrada">Cilindrada (CV):</label>
                    <input type="text" class="form-control" id="input_cilindrada" disabled>
                </div>
                <div class="form-group col-md-6">
                    <label for="input_potencia">Potencia do Veículo:</label>
                    <input type="text" class="form-control" id="input_potencia" disabled>
                </div>
            </div>
            <div class="form-group">
                <label for="input_combustivel">Combustível:</label>
                <input type="text" class="form-control" id="input_combustivel" disabled>
            </div>
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label for"input_ano">Ano do Veículo:</label>
                    <input type="text" class="form-control" id="input_ano" disabled>
                </div>
                <div class="form-group col-md-6">
                    <label for="input_modelo">Modelo do Veículo:</label>
                    <input type="text" class="form-control" id="input_modelo" disabled>
                </div>
            </div>  
            <div class="form-group">
                <label for="input_escolaID">Escola de Condução a que pertence:</label>
                <select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref" disabled>   
                <option selected></option>
                <?php 
                    $conn = new mysqli("localhost", "root", "", "escolas_conducao_semprefundo");
                    $sql = "SELECT id_escola, nome FROM escola";
                    $result = $conn->query($sql);

                    if($result->num_rows > 0)
                    {
                        while($row = $result->fetch_assoc()) {
                        echo "<option value='".$row['id_escola']."'>".$row['nome']."</option>";                      
                        }
                    }    
                ?>
                </select>
            </div>
        <input type="button" value="Procurar Veículo" id="procuraveiculo">
        <input type="button" value="Editar Veículo" id="adicionar_veiculo">
        <span id="jsonresultado"></span>
        </form>
      </div>
  </div>
</div> 
<?php

         $conn = new mysqli("localhost", "root", "", "escolas_conducao_semprefundo");
         $matricula = $_POST['matriculaPHP'];
         $sql = "SELECT marca, modelo, cilindrada, potencia, combustivel, ano, mes, escola_id_escola FROM veiculo WHERE matricula='$matricula'";
         $result = $conn->query($sql);

        if($conn->query($sql) == TRUE)
        {
             echo "Base de dados conectada!";
        }
        else
        {
            echo "Error " . $sql . "<br>" . $conn->error;
        }

        $data = array();

        while($row = $result->fetch_assoc()) {
            $data[] = $row;  
        }
        print json_encode($data);
        header('Content-type: application/json');
        echo json_encode($data);          

?>

Escolha o veículo que假装编辑:
维库洛斯迪波尼维斯酒店
马卡·多维库洛:
多维库洛模式:
西林达拉达(CV):
维库洛效力:
燃烧层:
阿诺·多维库洛:
多维库洛模式:
Escola de Condução a que pertence:
在同一个文件中,我有以下javascript/jquery:

<script src="vendor/jquery/jquery.min.js"></script>
<script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>




<script type="text/javascript">
    $(document).ready(function(){
        console.log("Document ready!");
        $("#procuraveiculo").on('click', function() {
            var e = document.getElementById("dropdown_matricula");
            var strUser = e.options[e.selectedIndex].text;
            alert(strUser);

            $.ajax({
                method: "POST",
                url: "admin_pages/veiculo_pages/edit_v.php",
                data: {matriculaPHP:strUser},

                complete: function(data) {
                    var yourDataStr = JSON.stringify(data);
                    var result = yourDataStr;
                    console.log(result[0].marca);

                },
                error : function (data) {
                    console.log("error:"+data.message);
                    console.log("DATA ERROR:: " + data.msg);
                },
                dataType: "JSON",
            });

        });
    });
</script>

$(文档).ready(函数(){
log(“文档准备就绪!”);
$(“#procuraveiculo”)。在('单击',函数()上{
var e=document.getElementById(“下拉列表”);
var strUser=e.options[e.selectedIndex].text;
警报(strUser);
$.ajax({
方法:“张贴”,
url:“admin_pages/veiculo_pages/edit_v.php”,
数据:{matriculaPHP:strUser},
完成:功能(数据){
var yourDataStr=JSON.stringify(数据);
var结果=yourDataStr;
console.log(结果[0].marca);
},
错误:函数(数据){
console.log(“错误:+data.message”);
log(“数据错误::”+DATA.msg);
},
数据类型:“JSON”,
});
});
});
因此,在代码的这一部分中,我为用户提供了在数据库中选择一辆可用车辆的选项。 之后,我将它发送到MatricularPHP中的php文件中,这样就可以正常工作了

现在,有我的edit_v.php

<div class="container-fluid">
  <div class="row">
      <div class="col-md-12">
        <form method="POST" action="editar_v.php">
            <div class="form-row">
                <div class="form-group col-md-12">
                    <label for="input_veiculo_editar">Escolha o veículo que pretende editar:</label>
                    <select class="custom-select my-1 mr-sm-2" id="dropdown_matricula">   
                    <option selected>Veículos Disponíveis</option>
                    <?php 
                        $conn = new mysqli("localhost", "root", "", "escolas_conducao_semprefundo");
                        $sql = "SELECT id, matricula FROM veiculo";
                        $result = $conn->query($sql);

                        if($result->num_rows > 0)
                        {
                            while($row = $result->fetch_assoc()) {
                            echo "<option value='".$row['id']."'>".$row['matricula']."</option>";                      
                            }
                        }    
                    ?>
                    </select>
                </div>
            </div>

            <div class="form-row">
                <div class="form-group col-md-6">
                    <label for"input_marca">Marca do Veículo:</label>
                    <input type="text" class="form-control" id="input_marca" disabled value="NOTHING">
                </div>
                <div class="form-group col-md-6">
                    <label for="input_modelo">Modelo do Veículo:</label>
                    <input type="text" class="form-control" id="input_modelo" disabled>
                </div>
            </div>  
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label for"input_cilindrada">Cilindrada (CV):</label>
                    <input type="text" class="form-control" id="input_cilindrada" disabled>
                </div>
                <div class="form-group col-md-6">
                    <label for="input_potencia">Potencia do Veículo:</label>
                    <input type="text" class="form-control" id="input_potencia" disabled>
                </div>
            </div>
            <div class="form-group">
                <label for="input_combustivel">Combustível:</label>
                <input type="text" class="form-control" id="input_combustivel" disabled>
            </div>
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label for"input_ano">Ano do Veículo:</label>
                    <input type="text" class="form-control" id="input_ano" disabled>
                </div>
                <div class="form-group col-md-6">
                    <label for="input_modelo">Modelo do Veículo:</label>
                    <input type="text" class="form-control" id="input_modelo" disabled>
                </div>
            </div>  
            <div class="form-group">
                <label for="input_escolaID">Escola de Condução a que pertence:</label>
                <select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref" disabled>   
                <option selected></option>
                <?php 
                    $conn = new mysqli("localhost", "root", "", "escolas_conducao_semprefundo");
                    $sql = "SELECT id_escola, nome FROM escola";
                    $result = $conn->query($sql);

                    if($result->num_rows > 0)
                    {
                        while($row = $result->fetch_assoc()) {
                        echo "<option value='".$row['id_escola']."'>".$row['nome']."</option>";                      
                        }
                    }    
                ?>
                </select>
            </div>
        <input type="button" value="Procurar Veículo" id="procuraveiculo">
        <input type="button" value="Editar Veículo" id="adicionar_veiculo">
        <span id="jsonresultado"></span>
        </form>
      </div>
  </div>
</div> 
<?php

         $conn = new mysqli("localhost", "root", "", "escolas_conducao_semprefundo");
         $matricula = $_POST['matriculaPHP'];
         $sql = "SELECT marca, modelo, cilindrada, potencia, combustivel, ano, mes, escola_id_escola FROM veiculo WHERE matricula='$matricula'";
         $result = $conn->query($sql);

        if($conn->query($sql) == TRUE)
        {
             echo "Base de dados conectada!";
        }
        else
        {
            echo "Error " . $sql . "<br>" . $conn->error;
        }

        $data = array();

        while($row = $result->fetch_assoc()) {
            $data[] = $row;  
        }
        print json_encode($data);
        header('Content-type: application/json');
        echo json_encode($data);          

?>

问题在于JavaScript和PHP JSON。 当数组中只有一个元素时,不存在记录零。 请使用代码:console.log(data.marca)而不是console.log(data[0].marca),您将看到结果。
您必须检查JSON中是否只有一个元素数组或几个元素数组,然后使用适当的代码。

首先,由于打印数据库连接状态的行,您的edit_v.php文件没有输出有效的JSON

如果要这样做,则必须将所有数据作为数组的一部分输出

例如:

header('Content-type: application/json');

$res = array(
    'success' => false,
    'errors' => array(),
    'data' => null
);

$conn = new mysqli("localhost", "root", "", "escolas_conducao_semprefundo")
$matricula = $_POST['matriculaPHP'];
$sql = "SELECT marca, modelo, cilindrada, potencia, combustivel, ano, mes, escola_id_escola FROM veiculo WHERE matricula='$matricula'";
$result = $conn->query($sql);

if($conn->query($sql) == TRUE)
{
    // echo "Base de dados conectada!";
    $res['success'] = true;
    $res['data'] = array();

    while ($row = $result->fetch_assoc())
    {
        $res['data'][] = $row;
    }
}
else
{
    $res['errors'][] = "Error " . $sql . "<br>" . $conn->error;
}

echo json_encode($data);
解决了的 在这个大社区的帮助下,我终于解决了我的问题

Editar_v.php jquery:

$("#procuraveiculo").on('click', function() {
            var e = document.getElementById("dropdown_matricula");
            var strUser = e.options[e.selectedIndex].text;
            alert(strUser);
            
            $.ajax({
                method: "POST",
                url: "admin_pages/veiculo_pages/edit_v.php",
                data: {matriculaPHP:strUser},
                
                success: function(data) {
                    var marca = data[0].marca;
                    var modelo = data[0].modelo;
                    var cilindrada = data[0].cilindrada;
                    var potencia = data[0].potencia;
                    var combustivel = data[0].combustivel;
                    var ano = data[0].ano;
                    var mes = data[0].mes;
                    var idEscola = data[0].escola_id_escola;
现在,PHP文件:edit_v.PHP:

<?php
header('Content-type: application/json');

$res=array(
    'success' => false,
    'errors' => array(),
    'data' => null
);

$conn = new mysqli("localhost", "root", "", "escolas_conducao_semprefundo");
$matricula = $_POST['matriculaPHP'];
$sql = "SELECT marca, modelo, cilindrada, potencia, combustivel, ano, mes, escola_id_escola FROM veiculo WHERE matricula='$matricula'";
$result = $conn->query($sql);

if($conn->query($sql) == TRUE)
{
    // echo "Base de Dados conectada!";
    $res['success'] = true;
    $res['data'] = array();
    
    while($row = $result->fetch_assoc())
    {
        $res['data'][] = $row;
    }
}
else
{
    $res['errors'][] = "Error " . $sql . "<br>" . $conn->error;
}

echo json_encode($res['data']);
?>

这工作得非常好,现在我确实了解jquery在这种情况下是如何工作的。我也明白我在PHP中的错误


感谢@Omari Celestine和@Norbul以及stackoverflow社区。

您不需要/不应该
JSON.stringify
数据。按原样使用数据<代码>控制台.log(数据[0].marca)应该为您提供正确的值“雪铁龙”。jQuery假设它正在获取一个json,并将其解码为一个普通的js对象。无论如何,JSON.stringify都是错误的方法-如果是,那么JSON.parse()。请确保在php中删除
print JSON\u encode($data)
行。一个回波/输出就足够了。另外,最好删除结尾处的
?>
(以避免像空格、选项卡、换行符一样发送额外数据)同意@jeff this should work=>$.ajax({method:“POST”,url:“admin_pages/veiculo_pages/edit_v.php),数据:{matriculaPHP:strUser},complete:function(data){console.log(数据[0].marca);},错误:函数(数据){console.log(“错误:+data.message”);console.log(“数据错误::“+data.msg”);},数据类型:“JSON”,});大家好,谢谢你们的回答。当我使用数据[0].marca时,我收到一个错误,上面写着:TypeError:data[0]是未定义的,这就是为什么我尝试了其他方法从ajax获取信息。我不明白从ajax向javascript发送信息并将其放入输入字段的最佳方法。实际上,我的php代码正在发送信息以完成(数据),当数据显示为未定义或对象时,它会显示“marca”不存在。我在firefox中使用element inspector,在网络中,edit_v.php从数据库中得到正确的响应,它得到的值像:marca:citroen,所以我认为sql查询工作得很好。我只是不明白为什么javascript/ajax不能从php文件中获取信息。实际上,我只是尝试向他们发出回音或警报,以验证他们是否从php获取信息。那么,您可以从Firefox?中的控制台向我发送console.log(数据)的结果吗?当然,让我们在ajax中使用success not complete方法…..成功:函数(数据){console.log('all data',data);console.log('Marca data',data.Marca);console.log('multi array first element',data[0].Marca);}并在控制台日志中检查正确答案