JavaScript error [closed]

1

Could someone tell me how to do the JOIN to populate the data automatically from the description field. You acknowledge this error Notice: Trying to get property of non-object in C:\xampp\htdocs\PhpProject1\function.php on line 9 {"codigo_produto":"","barcode":"","porcao":""} in case line 9 is this if($resultado->num_rows){

index.php

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script></head><body><scripttype='text/javascript'>$(document).ready(function(){$("input[name='descri']").blur(function(){
                            var $codigo_produto = $("input[name='codigo_produto']");
                            var $barcode = $("input[name='barcode']");
                            var $codigo_tipo = $("input[name='codigo_tipo']");
                            var $porcao = $("input[name='porcao']");

                            $.getJSON('function.php',{ 
                                    descricao: $( this ).val() 
                            },function( json ){
                                    $codigo_produto.val( json.codigo_produto );
                                    $barcode.val( json.barcode );
                                    $codigo_tipo.val ( json.val );
//                                    $porcao.val ( json.val );
                            });
                    });
            });
            </script>   
            <div class="col-lg-5"><!-- Inicio Input Cóodigo do Produto-->
                <label for="ex1">Descrição:</label>
                <input type="text" required class="form-control" maxlength="13" name="descri"><br>
            </div><!-- Fim Input Código do Produto -->
            <div class="col-lg-4"><!-- Inicio Input Cóodigo do Produto-->
                <label for="ex1">Código do Produto:</label>
                <input type="text" required class="form-control" maxlength="13" name="codigo_produto"><br>
            </div><!-- Fim Input Código do Produto -->

            <div class="col-lg-5"><!-- Inicio Input Código EAN / Barcode -->
                <label for="ex1">Código EAN:</label>
                <input type="text" required class="form-control" maxlength="13" name="barcode"><br>
            </div><!-- Fim Input Código EAN / Barcode -->          

            <div class="col-lg-6">
                <label for="ex1">Tipo:</label>
                <input type="text" class="form-control" name="codigo_tipo" value="">
            </div>

            <div class="col-lg-6">
                <label for="ex1">Porção:</label>
                <input type="text" class="form-control" maxlength="20"  name="porcao">
            </div>
    </body>

function.php

   function retorna($descricao, $conn){

        $result = "SELECT a.descricao, a.codigo_produto, a.barcode, b.codigo_tipo, c.porcao FROM CADPRO A
            LEFT OUTER JOIN TIPOPROD B ON (A.CODIGO_PRODUTO = B.CODIGO_PRODUTO)
            LEFT OUTER JOIN INFOPROD C ON (B.CODIGO_PRODUTO = C.CODIGO_PRODUTO) WHERE descricao =";
        $resultado = mysqli_query($conn, $result);

        if(!is_null($resultado)){
            $row = mysqli_fetch_assoc($resultado);
                $valores['codigo_produto'] = $row['codigo_produto'];
                $valores['barcode'] = $row['barcode'];
                $codigo_produto = $row['codigo_produto'];                    
                $valores['codigo_tipo'] = $row['codigo_tipo'];
                $valores['porcao'] = $row['porcao'];
        } else {
                $valores['codigo_produto'] = '';
                $valores['barcode'] = '';
                $valors['tipo'] = '';
                $valores['porcao'] = '';             
        }

        return json_encode($valores);                
    }
    if(isset($_GET['descricao'])){
        echo retorna($_GET['descricao'], $conn);
    }
    ?>
    
asked by anonymous 02.10.2017 / 19:06

2 answers

0

That does not make sense:

if(!is_null($resultado)){

The mysqli_query will never return NULL , it will always fall in the same if, even if it gives error, in the case it returned false and as false is not null it enters the first if of Anyway, mysqli_fetch_assoc always expects an "object".

To avoid this, just use documentation to make sure the function works and you will see link .

See the documentation that it returns FALSE if it fails or an object mysqli_result if successful.

Change the code to:

if($resultado){
    $row = mysqli_fetch_assoc($resultado);
        $valores['codigo_produto'] = $row['codigo_produto'];
        $valores['barcode'] = $row['barcode'];
        $codigo_produto = $row['codigo_produto'];                    
        $valores['codigo_tipo'] = $row['codigo_tipo'];
        $valores['porcao'] = $row['porcao'];
} else {

Another suggestion is to create an error JSON, like this:

if($resultado){
    $row = mysqli_fetch_assoc($resultado);
        $valores['codigo_produto'] = $row['codigo_produto'];
        $valores['barcode'] = $row['barcode'];
        $codigo_produto = $row['codigo_produto'];                    
        $valores['codigo_tipo'] = $row['codigo_tipo'];
        $valores['porcao'] = $row['porcao'];
} else {
       return json_encode(array( 'error' => mysqli_error($conn) ));
}

Another important one, you did not declare the variable $ values, but declared the variable $codigo_produto = $row['codigo_produto']; , but you are not using it, maybe the code should look like this:

function retorna($descricao, $conn){

    $result = "SELECT a.descricao, a.codigo_produto, a.barcode, b.codigo_tipo, c.porcao FROM CADPRO A
        LEFT OUTER JOIN TIPOPROD B ON (A.CODIGO_PRODUTO = B.CODIGO_PRODUTO)
        LEFT OUTER JOIN INFOPROD C ON (B.CODIGO_PRODUTO = C.CODIGO_PRODUTO) WHERE descricao =";
    $resultado = mysqli_query($conn, $result);

    // DECLARA A VARIAVEL
    $valores = array();

    if(!is_null($resultado)){
        $row = mysqli_fetch_assoc($resultado);
        $valores['codigo_produto'] = $row['codigo_produto'];
        $valores['barcode'] = $row['barcode'];
        $codigo_produto = $row['codigo_produto'];                    
        $valores['codigo_tipo'] = $row['codigo_tipo'];
        $valores['porcao'] = $row['porcao'];
    } else {
        return json_encode(array( 'error' => mysqli_error($conn) ));        
    }

    return json_encode($valores);                
}
    
02.10.2017 / 21:01
0

Try to put it this way:

$resultado = mysqli_num_rows($resultado);

if(!is_null($resultado)){
     ...

Assuming you did not instantiate the mysqli class . See the example on this page , interpreting your code, apparently you are doing it procedurally.

In this way I could not use any kind of object.

    
02.10.2017 / 20:25