javascriptphpjqueryajaxjquery-form-validator

echo php form validation with ajax


Good day to everyone,

I am trying to create a CMS with php and I am having a trouble to do the next:

I want to delete, edit or add information to my page, so to do it I am using several buttoms and AJAX to load the form to a display div. I get the button delete to work perfectly, but when I try the add and edit button it doesn´t work due to that they ask to append some html text that also contains php code so there is no PHP interpreter to read it.

My approach:

  1. <div class="displayHere col-xs-12"> </div> is empty.
  2. I click Add button, It goes to ajax.php and append the form and form validation.
  3. I filled the form and click add_document, the form validation (php) check the datas and upload the document if it is possible and set some outputs variables.

How can I get this functionality? Probably I am approaching badly the problem, I hope some of you can share your experience with me.

For example, for the add function, I want to get this functionality:

<div id="bodyDiv">
  <!--HEADER-->
  <header id="header" class=" row">
    <?php 
          include 'includes/loadHeader.php';
          echo '<nav class="col-xs-6 cms_nav">
            <ul>
              <li><input id="buttonAdd" type="submit" class="button buttonFuncitonality" name="AÑADIR" value="AÑADIR" /></li>
            </ul>
          </nav>';
    ?>
     <div class="displayHere col-xs-12">
    <?php


          function test_input($data) {
                $data = trim($data);
                $data = stripslashes($data);
                $data = htmlspecialchars($data);
                return $data;
          }


          $nameErr =  $dateErr = $typeErr = $fileErr = "";
          $name = $date = $type = $file = $matches =  "";
          $success = true;

           if ($_SERVER["REQUEST_METHOD"] == "POST"){

              // name, date, type, path
                if (empty($_POST["name"])) {
                  $nameErr = "El nombre es necesario";
                  $success = FALSE;
                } 
                else {
                  $name = test_input($_POST["name"]);
                }

                if (!empty($_POST["date"])) {
                  $date = test_input($_POST["date"]);
                  $time_pattern = "(([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]))?";
                  //Check the date format  http://www.phpliveregex.com/  (0|[1-9]|0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-([0-9]{4})\s+([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])
                  if (preg_match("/^(0|[1-9]|0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-([0-9]{4})\s*".$time_pattern."/",$date,$matches)){
                    echo "<script>console.log('yeahh format 1');</script>";
                    echo "<script>console.log('yeahh format 1  ". $date. "  ".  str_replace("-","/",$matches['0']) ."   yeahh format 1');</script>";
                    $date = str_replace("-","/",$matches['0']);
                  }
                  elseif (preg_match("/^(0|[1-9]|0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/([0-9]{4})\s*".$time_pattern."/",$date, $matches)){

                  }
                  else{
                    echo "<script>console.log('noooo  ". $date. "  " . $matches['0'] ."   yeahh format 1');</script>";
                    $dateErr = "Formato de fecha incorrecto";
                    $success = FALSE;
                  }

                  //The formar mysql is expecting DATETIME '0000-00-00 00:00:00'
                  if(empty($dateErr)){

                     if( preg_match("/\s([0-9]|0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])/",$date)){
                        $date = DateTime::createFromFormat('j/m/Y H:i', $date);
                        $date = $date->format('d-m-Y H:i');
                     }
                     else{
                        $date = DateTime::createFromFormat('j/m/Y', $date);
                        $date = $date->format('d-m-Y');
                     }

                     echo "<script>console.log('date ".$date."');</script>";

                  }
                }

                if (empty($_POST["type"]) ) {
                  $typeErr = "El tipo de documento es necesario";
                  $success = FALSE;

                } 
                else{
                  $type = test_input($_POST["type"]);
                }

                // Upload the file
                if($success ){

                  if(empty($_FILES['documentPDF']['name'])){
                    $fileErr = "Debes añadir un documento pdf ";

                  }
                  else{
                    $target_dir = "shareholders_documents/".$type. "/";
                    $file_name =  basename($_FILES["documentPDF"]["name"]);
                    $target_file = $target_dir . $file_name;

                    echo "<script>console.log('".$target_file."');</script>";
                    $fileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
                    //echo " vamos a ver que hay aqui " .$target_file;
                    // Check if pdf already exist
                    if (file_exists($target_file)) {
                        $fileErr = "Este documento ya existe.";
                        $success = false;
                    }
                    if ($_FILES["documentPDF"]["size"] > 500000) {
                        $fileErr = "El documento es demasiado largo";
                        $success = false;
                    }
                    // Allow certain file formats
                    if($fileType != "pdf"  ) {
                        $fileErr = "El documento debe estar en formato pdf";
                        $success = false;
                    }

                    // Check if $uploadOk is set to 0 by an error
                    if ($success == true ) {
                        //echo "\nmove_uploaded_file(".$_FILES["documentPDF"]["tmp_name"].", ".$target_file.")" ;
                        if (!move_uploaded_file($_FILES["documentPDF"]["tmp_name"], $target_file)) {
                            $fileErr ="No se ha podido almacenar el documento ". basename( $_FILES["documentPDF"]["name"]);
                            $success = false;
                        }
                    } 
                  }

                }

              }


              $result=""; 
              // Now we have to prepare the data for the sql operation

              if( isset( $_POST["insert"] ) && $success ){
                $name = test_input($_POST['name']);
                $date = $date;
                $type =  test_input($_POST['type']);
                $path =  $file_name;
                $id = $type ." ". $date . " " . $path ; 

                //Create $sql sentence
                $sql = "INSERT INTO `shareholders_documents`(`id`, `name`, `date`, `type`, `path`) VALUES ('".$id."','".$name."',STR_TO_DATE('".$date."', '%d-%m-%Y %H:%i'),'".$type."','".$path."')";
                $sqlResult = $conn->query($sql);
                $message= "";
                if($conn->error){
                  $message = $conn->error;
                  $success = false;
                }

                //Sending email
                if ($success){
                  $result='<div class="alert alert-success margin-top-big">El documento se ha subido correctamente'.$name." ".$date." ".$type." ". $path. "\n" . $sql. '</div>';

                }
                else{
                 $result = '<div class="alert alert-danger margin-top-big">Algo ha fallado y el documento no se ha podido subir ' . $message . '</div>';
                 if(empty($fileErr)){ //If we cannot insert the document we must delete the file
                      unlink($target_file);
                 }
                }




             }

             //Cleaning global array $_POST  
              $_POST = array();
              $_FILE = array();




          ?>

          <div id="insertForm" class="col-xs-12 shareholdersForm">
             <h3>Insertar</h3> 
              <form  method="POST" enctype="multipart/form-data">  
                 <input class="col-xs-12 form-control  <?php  if( !empty($nameErr) ) {echo 'boxError alert-danger ' ;} ?> " value="<?php if( !$success ) {echo $name;}?>" type="text" name="name" placeholder="<?php if( !empty($nameErr) ) {echo $nameErr;}else{ echo 'nombre';}?>">   
                 <input class="col-xs-12 form-control  <?php  if( !empty($dateErr) ) {echo 'boxError alert-danger ' ;} ?> "  value="<?php if( !$success ) {echo $date;}?>" type="text" name="date" placeholder="<?php if( !empty($dateErr) ) {echo $dateErr;}else{ echo 'fecha (Ejemplo de formato: 31/10/2017 17:54)';}?>">  
                 <select class="col-xs-12 form-control  <?php  if( !empty($typeErr) ) {echo 'boxError alert-danger ' ;} ?> " name="type">    
                   <option value="hechosRelevantes">hecho relevantes</option>    
                   <option value="informacionEmpresa">informacion empresa</option> 
                   <option value="informacionFinanciera">informacion financiera</option>   
                  </select>   
                <input class="col-xs-12" type="file" name="documentPDF" accept="application/pdf" >
                <span class="error col-xs-12" style="float:left"> <?php if( !empty($fileErr) ) {echo "* ". $fileErr;} ?> </span>
                <button class="btn btn-default" type="submit" name="insert">Añadir</button>
                <?php if ( !empty($result) ){  echo $result; } ?>
              </form>
          </div>
        </div>

In my website I have a add button which should upload the form validation using AJAX.

<?php


//echo "piece of shit";
if (isset($_POST['action'])) {
    switch ($_POST['action']) {
        case 'AÑADIR':  //ADD FUNCTIONALITY
            add_document();
            break;

        default:
          echo "La accion no se indentifica\n" ;
          break;
    }
}

function add_document() {
  echo ' <div id="insertForm" class="col-xs-12 shareholdersForm">
             <h3>Insertar</h3> 
              <form  method="POST" enctype="multipart/form-data">  
                 <input class="col-xs-12 form-control  <?php  if( !empty($nameErr) ) {echo "boxError alert-danger " ;} ?> " value="<?php if( !$success ) {echo $name;}?>" type="text" name="name" placeholder="<?php if( !empty($nameErr) ) {echo $nameErr;}else{ echo "nombre";}?>">   
                 <input class="col-xs-12 form-control  <?php  if( !empty($dateErr) ) {echo "boxError alert-danger " ;} ?> "  value="<?php if( !$success ) {echo $date;}?>" type="text" name="date" placeholder="<?php if( !empty($dateErr) ) {echo $dateErr;}else{ echo "fecha (Ejemplo de formato: 31/10/2017 17:54)";}?>">  
                 <select class="col-xs-12 form-control  <?php  if( !empty($typeErr) ) {echo "boxError alert-danger" ;} ?> " name="type">    
                   <option value="hechosRelevantes">hecho relevantes</option>    
                   <option value="informacionEmpresa">informacion empresa</option> 
                   <option value="informacionFinanciera">informacion financiera</option>   
                  </select>   
                <input class="col-xs-12" type="file" name="documentPDF" accept="application/pdf" >
                <span class="error col-xs-12" style="float:left"> <?php if( !empty($fileErr) ) {echo "* ". $fileErr;} ?> </span>
                <button class="btn btn-default" type="submit" name="insert">Añadir</button>
                <?php if ( !empty($result) ){  echo $result; } ?>
              </form>
          </div>
        </div>';

}

function load_delete_document_form($id) {
    echo ' <div id="deleteForm" class="col-xs-12 shareholdersForm"> 
      <h3>Eliminar '. $id.'</h3>  
      <form id="'.$id.'"  method="POST"> 
        <button  class="btn btn-default buttonFunctionality" type="submit" name="Delete" value="Delete">Eliminar</button> 
      </form>

    </div>


                ';
    exit;
}


?>

To use that AJAX code I use this jquery function in my website:

                      <script>
                  //$(document).ready(function(){
                    $("body").on("click",".buttonFunctionality", function(){

                        if($('.displayHere').length !== 0){
                          $('.displayHere').children().remove()
                        }
                          var action = $(this).val();
                          var id = $(this).parent().attr('id');
                          console.log(action + "   " + id);
                          $.post("includes/ajax.php",{ action: action, id: id}, function(data, status){
                              console.log("click1 " + id );
                              console.log("data " + data);
                              $('.displayHere').append(data); // This append will append the code I will need in my page

                          });

                    });
                //});
                </script>

As a result of my code I get the form with a buch of php code without interpretation.


Solution

  • I think you can check it with html attribute required for empty input and for other like user just entered spaces in comment input using php function empty($value)