When doing an update by post, it triggers the error: "Undefined variable: id"

-1

Error:

  

Notice: Undefined variable: id in function.php

index.php

<form method="post" action="#" id="update">
<input type="text" id="id" value="">
<input type="text" id="text" value="">
<input type="text" id="title" value="">
<button id="update">Enviar</button>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

<script type="text/javascript">

$("#update").on('click', function(){
 $.post("function.php", {service:'updateMessages', messageId: $("#messageId").val(), text: $("#text").val(), title: $("#title").val()}, 
    function(data){
        alert("Datos: " + data);
    });
});
</script>

function.php

if($_POST['service']=="updateMessages"){

        if(isset($_POST['messageId'])){
            $id = $mysqli->real_escape_string($_GET['messageId']);
        }

        $query = "UPDATE 'messages' SET 
                    'messages_text' = '".$mysqli->real_escape_string($_POST['text'])."', 
                    'messages_title' = '".$mysqli->real_escape_string($_POST['title'])."'
                    WHERE 'messages'.'messages_id' = ".$id;


        if(isset($_GET['status'])){
           $query_status = $query."messages_status = '".$mysqli->real_escape_string($_POST['status']);
        }        

        $mysqli->query($query_status);
        die(json_encode(getMessages(),JSON_UNESCAPED_UNICODE));    
    }
    
asked by Diego Sagredo 26.10.2016 в 22:43
source

2 answers

1

This is because you try to do query with a variable that may or may not exist (since it is contained within an if).

So you should initialize it in some way by default so that it always has a value:

$query_status = "aqui la inicializas a tu valor por defecto";

if(isset($_POST['status'])){
       $query_status = $query."messages_status = '".$mysqli->real_escape_string($_POST['status']);
    }      

    $mysqli->query($query_status);

Also, keep in mind that you must use $_POST instead of $_GET since you are indicating it in the form.

    
answered by 26.10.2016 в 22:48
1

You have isset($_GET['status]) and it should be: isset($_POST['status'])

if(isset($_POST['status'])){
   $query = $query."messages_status = '".$mysqli->real_escape_string($_POST['status']);
}    

And what would happen if there is no $_POST['status'] ? this error would always be annoying since you have two different values but you always send one $query and $query_status . You should always try to keep the same variable, especially if you condition its content depending on a value. If that value does not exist, your context changes. You must keep the name of the variable and if the condition is met, concatenate possible more results or expected code.

$query = $query."messages_status = '".$mysqli->real_escape_string($_POST['status']);

EDIT

if ($_POST['service'] == "updateMessages") {

    if (isset($_POST['messageId'])) {
        $id = $mysqli - > real_escape_string($_POST['messageId']);

        if (isset($_POST['text']) && isset($_POST['title'])) {
            $query = "UPDATE 'ayudantee'.'messages' SET 

            'messages'.
            'messages_text' = '".$mysqli->real_escape_string($_POST['
            text '])."',
                'messages'.
            'messages_title' = '".$mysqli->real_escape_string($_POST['
            title '])."'
            WHERE 'messages'.
            'messages_id' = ".$id; 
        }


        if (isset($_POST['status'])) {

            $query = "UPDATE 'messages' SET 
            messages_status = '".$mysqli->real_escape_string($_POST['
            status '])." 
            WHERE 'messages'.
            'messages_id' = ".$id; 
        }

        $mysqli->query($query);
        echo json_encode(getMessages());
    }
}
    
answered by 26.10.2016 в 22:46