Send blank field to the database

0

I created a database and I am sending the information normally. However, I have an optional field in the form. If the user wants to enter more details, he usually writes, if not, I wanted to send the following message to the Sem Mensagem database.

<?php

$user = $_POST["user2"];
$manga = $_POST["titulo2"];
$capitulo = $_POST["capitulo2"];
$mensagem = $_POST["mensagem2"];
$assunto = $_POST["opcoes"];

$con = mysqli_connect("localhost","root","","report");
$sql = "insert into denuncia values(null,'".$user."','".$manga."','".$capitulo."','".if($mensagem == 0){"Sem mensagem"} else {$mensagem}."','".$assunto."')";



if(mysqli_query($con, $sql)) {

    $msg = "Obrigado! Sua denúncia foi enviada.";
} else {
    $msg = "Erro ao enviar.";
}


mysqli_close($con);

?>

<script> alert('<?php echo $msg;?>');
    location.href="index.php";
    </script>
    
asked by anonymous 15.07.2017 / 20:43

2 answers

3

Ignoring existing security issues.

For me you have four easy facies:

  • Define as "DEFAULT" in MySQL.
  • Set in INSERT in PHP.
  • Set text as output in PHP.
  • Set text as output in MySQL.
  • Define DEFAULT in MySQL:

    ALTER TABLE denuncia MODIFY COLUMN coluna VARCHAR(255) NOT NULL DEFAULT 'Sem mensagem';
    

    Then you could do INSERT without such a field, or you could use DEFAULT instead of value.

    Set in insert, still in PHP:

    $mensagem = $_POST['mensagem2'] ?? 'Sem mensagem';
    $mensagem = mysqli_real_query($con, $mensagem);
    

    If you are using an older version of PHP you could also do:

    $mensagem = isset($_POST['mensagem2']) ? $_POST['mensagem2'] : 'Sem mensagem';
    $mensagem = mysqli_real_query($con, $mensagem);
    

    Treat text display in PHP:

    Enter the blank text, usually in MySQL and treat it in the output:

    mysqli_query('SELECT * FROM denuncia ...');
    //...
    
    if($ResultadoDaQuery['mensagem'] === ''){
        $ResultadoDaQuery['mensagem'] = 'Sem mensagem';
    }
    
    //...
    

    This would replace the text at the time of showing, logically there are other ways to do this substitution.

    Treat the text display in MySQL:

    As in the previous form, but making the work of MySQL:

    SELECT IF(mensagem = '', 'Sem mensagem', mensagem) as mensagem FROM denuncia
    

    This query will cause the message "No message" to be returned if the message is blank.

        
    15.07.2017 / 21:19
    1

    You can do a simple check for this by declaring the variable $mensagem :

    $mensagem = $_POST["mensagem2"] == "" ? $_POST["mensagem2"] : "Sem Mensagem";
    
        
    15.07.2017 / 20:59