Remise à 0 de la position du curseur PHP/Symfony 3

nejeh - 10 oct. 2018 à 09:52
nejeh.dellai
Messages postés
14
Date d'inscription
mercredi 10 octobre 2018
Statut
Membre
Dernière intervention
28 octobre 2018
- 11 oct. 2018 à 12:53
Bonjour,
J'ai pu récupérer la position correcte du curseur dans la requête ajax mais dans le contrôleur, elle est toujours réinitialisé à 0. Je ne comprenais pas d’où vient ce problème ni comment le résoudre car c’est la première fois que j’utilise ajax. Je ne peux pas vraiment comprendre comment ça marche Merci pour votre compréhension! voici mon nouveau script: voici mon template: new.html.twig

{% extends '::layoutv.html.twig' %}

{% block stylesheets %}
{% endblock %}

{% block titre %}
{% endblock %}

{% block body %}

    {#{{ tinymce_init({'use_callback_tinymce_init': true, 'theme': {'simple': {'menubar': false}}}) }}#}
    <div>
        <h1>
            Insertion des projets
        </h1>
    </div>
    <!-- BEGIN DISPLAY THE FLASH MESSAGES -->
    {% for flashMessage in app.session.flashbag.get('error') %}
        <div class="alert alert-error">
            <button class="close" data-dismiss="alert"></button>
            <strong><i class='icon-remove'></i> </strong> {{ flashMessage }}
        </div>
    {% endfor %}
    <!--  END DISPLAY THE FLASH MESSAGES -->

    <div class="row-fluid">
        <div class="span6">


            <div class="portlet-body form">
                <!-- BEGIN FORM-->
                <form id="formProject" class="form-horizontal"
                      action="{{ path('new_project') }}" enctype="multipart/form-data" method="post" }>
                    <div class="control-group">
                        <label class="control-label">Télécharger une image</label>
                        <div class="controls">
                            <input type="file" name="image">
                            </br>
                            <div class="row">
                                <div class="col-sm-8">
                                    {{ form_row(formProject.texte|raw) }}
                                </div>
                            </div>

                        </div>
                        </br>
                    </div>
                    <div class="controls margin-bottom-30">
                        <button type="submit" name="submit" class="btn green" id="btnSubmit">Valider</button>
                        <button type="reset" class="btn yellow">Annuler</button>
                    </div>
                    {{ form_rest(formProject) }}
                </form>
                <!-- END FORM-->
            </div>

        </div>
    </div>

{% endblock %}


  {% block javascripts %}
      <script type="text/javascript"
              src="{{ asset('bundles/formationminip/plugins/tinymce/tinymce.min.js') }}"></script>
      <script type="text/javascript"
              src="{{ asset('bundles/formationminip/plugins/jquery-ui/jquery-ui.min.js') }}"></script>
      <script type="text/javascript" src="{{ asset('bundles/formationminip/js/text.js') }}"></script>

{#-----------------------------------------------------------------------------------------------------------------#}

      <script type="text/javascript">

          $(document).ready(function() {
              $('#btnSubmit').click(function() {
                  texta = document.getElementById("formation_minipbundle_project_texte");
                  var start = texta.selectionStart;
                  console.log(start);
                  var route="{{url('new_project')}}?pos="+start;
                  console.log(route);
                  $.ajax({
                      url: route,
                      type: "POST",
//                  async: false,
                      //data:{ pos : start},
                      success: function() {
                          console.log("success");
                      }
                  });
              });
          });
          //
      </script>

  {% endblock %}




mon action dans le controller :



    /**
     * @Route("/create", name="new_project")
     */

    public function createAction(Request $request) {
        $project = new Project();
        $em = $this->getDoctrine()->getEntityManager();
        $formProject = $this->createForm('Formation\MiniPBundle\Form\ProjectType', $project);
        $formProject->handleRequest($request);
            if ($formProject->isValid()) {
            if(isset($_POST['submit'])){
                $file_name = $_FILES['image']['name'];
                $file_tmp = $_FILES['image']['tmp_name'];
                move_uploaded_file($file_tmp,$file_name);
                header ("Content-type: image/jpeg");
                $string=$formProject->get('texte')->getData();

                $text= filter_var($string, FILTER_SANITIZE_STRING); //Supprimer les balises.
                $font = 15;
                $width = imagefontwidth($font) * strlen($string);

                $height = imagefontheight($font) ;

                switch (strtolower(pathinfo($file_name, PATHINFO_EXTENSION))){
                    case "jpg" :
                        $im = imagecreatefromjpeg($file_name);
                        break;
                    case "gif" :
                        $im = imagecreatefromgif($file_name);
                        break;
                    case "png" :
                        $im = imagecreatefrompng($file_name);
                        break;
                    case "bmp":
                        $im = imagecreatefrombmp($file_name);
                        break;

                    default :
                        trigger_error("Error Bad Extention");
                        exit();
                        break;
                }

              $position=intval($request->request->get('pos'));
               var_dump($position);  // renvoie 0
               $y = imagesy($im) - $height;

                $textColor = imagecolorallocate ($im, 255, 255,255);

                /*----------------------------------------*/
                imagestring($im, $font, $position, $y, $text, $textColor);
                $project->setLogo($file_name);
                $em->persist($project);
                $em->flush();
                imagejpeg($im);
        }}

        return $this->render('FormationMiniPBundle:Project:new.html.twig', array(
            'project' => $project,
             'request'=> $request->request->get('pos'),
            'formProject' => $formProject->createView(),
        ));
    }


A voir également:

2 réponses

jordane45
Messages postés
35404
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356
10 oct. 2018 à 10:09
Bonjour,
Que retourne ton console.log(route); ?

Ensuite, si tu fais du POST ... pourquoi passer la variable dans l'URL ??
Autant remettre ce que tu avais bien mis au départ :
data:{ pos:start},

Tu pourras alors essayer de récupérer la variable pos comme ça
$position= !empty($_POST['pos']) ? intval($_POST['pos']) : 0;


Tu peux aussi vérifier, via le debugger de ton navigateur ( pour l'ajax je recommande d'utiliser FIREFOX, Sinon, sous chrome il faut installer le plugin Ajax debuger )
Et voir les données envoyées dans ta requête AJAX.
Tu sauras alors si le souci vient de ton JS ... ou du code PHP
0
Bonjour, console.log(route) me renvoie cette ligne
http://localhost/public/symfony_project/symfony_project/web/app_dev.php/admin/project/create?pos=38

j'ai passé la variable dans l'URL car j'ai pas pu la récupérer dans data:{ pos:start}.
j'ai utilisé les instructions que vous m'avez proposé mais il me renvoie le même résultat ( remise à 0)

   <script type="text/javascript">

          $(document).ready(function(){
              $('#btnSubmit').click(function(){
                  texta = document.getElementById("formation_minipbundle_project_texte");
                  var start = texta.selectionStart;
                  console.log(start);
                  $.ajax({
                      url:"{{url('new_project')}}",
                      type: "POST",
//                  async: false,
                      data:{ pos : start},
                      success: function(){
                          console.log("success");
                      }
                  });
              });
          });
          //
      </script>


 $position= !empty($_POST['pos']) ? intval($_POST['pos']) : 0;
                var_dump($position);
               $y = imagesy($im) - $height;

                $textColor = imagecolorallocate ($im, 255, 255,255);

                /*----------------------------------------*/
                imagestring($im, $font, $position, $y, $text, $textColor);

0
jordane45
Messages postés
35404
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356
10 oct. 2018 à 10:29
Tu as regardé, dans la console de ton navigateur, les paramètres envoyés par ta requête ajax ?
Peux tu nous en faire une capture écran ?
0
nejeh.dellai
Messages postés
14
Date d'inscription
mercredi 10 octobre 2018
Statut
Membre
Dernière intervention
28 octobre 2018

Modifié le 10 oct. 2018 à 11:00
Voilà une capture d'écran, le texte prend la position 0
0
jordane45
Messages postés
35404
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356 > nejeh.dellai
Messages postés
14
Date d'inscription
mercredi 10 octobre 2018
Statut
Membre
Dernière intervention
28 octobre 2018

10 oct. 2018 à 11:04
ce qui serait bien ça serait de déplier la ligne contenant les infos de ta requête ajax.... (là où il y a la petite flèche au niveau du "starttime" ... )
sinon.. comment peux tu savoir quelles sont les paramètres envoyés par ton ajax ??
0
nejeh.dellai
Messages postés
14
Date d'inscription
mercredi 10 octobre 2018
Statut
Membre
Dernière intervention
28 octobre 2018

Modifié le 10 oct. 2018 à 11:12
une nouvelle capture
0
nejeh.dellai
Messages postés
14
Date d'inscription
mercredi 10 octobre 2018
Statut
Membre
Dernière intervention
28 octobre 2018

10 oct. 2018 à 13:09
voilà une capture
0
jordane45
Messages postés
35404
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356
Modifié le 10 oct. 2018 à 17:41
Dans l'ajax on voir bien que le parametre pos est envoyé avec une valeur de 18.
Donc dans ton code, tu devrais pouvoir en récupérer la valeur...
Peux tu, dans ton code php, faire un
print_r($_POST);

(à la place de ton var_dump($position); // renvoie 0 )

Modifier ton code js comme suit :
$.ajax({
  url: route,
  type: "POST",
 //async: false,
  data:{ pos : start},
  success: function(response) {
      console.log('response',response);
  }
});




et nous montrer ce que ça te retourne. )
0
nejeh.dellai
Messages postés
14
Date d'inscription
mercredi 10 octobre 2018
Statut
Membre
Dernière intervention
28 octobre 2018

Modifié le 11 oct. 2018 à 10:54
Bonjour, j'ai appliqué ce que vous m'avez dit. la valeur est bien récupérée mais elle toujours réinitialisé à 0.

voilà une capture d'écran montrant ce qui renvoie print_r($_POST) et la requête ajax.

suite de la capture d'écran :
0
jordane45
Messages postés
35404
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356
11 oct. 2018 à 11:30
Attention la seconde capture d'écran ne correspond pas à l'appel Ajax dont on parle actuellement.


Quoi qu'il en soit, côté Javascript / Ajax, le code fonctionne....
Maintenant le souci se situe côté PHP.
Donc montre nous ton code php (celui de ta fonction createAction )


NB: Pour poster du code sur le forum, merci de le faire en utilisant LES BALISES DE CODE (et en y précisant le langage)
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
nejeh.dellai
Messages postés
14
Date d'inscription
mercredi 10 octobre 2018
Statut
Membre
Dernière intervention
28 octobre 2018

Modifié le 11 oct. 2018 à 11:55
Voilà mon fonction :


    /**
     * @Route("/create", name="new_project")
     */

    public function createAction(Request $request) {



        $project = new Project();
        $em = $this->getDoctrine()->getEntityManager();
        $formProject = $this->createForm('Formation\MiniPBundle\Form\ProjectType', $project);
        $formProject->handleRequest($request);
        if ($formProject->isValid()) {
            if(isset($_POST['submit'])){
                $file_name = $_FILES['image']['name'];
                // var_dump($file_name);
                $file_tmp = $_FILES['image']['tmp_name'];
                //   var_dump($file_tmp);
                move_uploaded_file($file_tmp,$file_name);
                header ("Content-type: image/jpeg");
                $string=$formProject->get('texte')->getData();

                $text= filter_var($string, FILTER_SANITIZE_STRING); //Supprimer les balises.
                $font = 15;
                $width = imagefontwidth($font) * strlen($string);

                $height = imagefontheight($font) ;

                switch (strtolower(pathinfo($file_name, PATHINFO_EXTENSION))){
                    case "jpg" :
                        $im = imagecreatefromjpeg($file_name);
                        break;
                    case "gif" :
                        $im = imagecreatefromgif($file_name);
                        break;
                    case "png" :
                        $im = imagecreatefrompng($file_name);
                        break;
                    case "bmp":
                        $im = imagecreatefrombmp($file_name);
                        break;

                    default :
                        trigger_error("Error Bad Extention");
                        exit();
                        break;
                }


                /*--------------------------------------------------*/
                $public_file_path = '.';
                //  $position=$request->request->get('pos');
                //     var_dump($request->request->all());
                  $y = imagesy($im) - $height;

                $position= !empty($_POST['pos']) ? intval($_POST['pos']) : 0;
                print_r($_POST);
                $textColor = imagecolorallocate ($im, 255, 255,255);
                $textIm=$position.$file_name;
                /*----------------------------------------*/
                imagestring($im, $font, $position, $y, $text, $textColor);
                $project->setLogo($file_name);
                $em->persist($project);
                $em->flush();
                imagejpeg($im, $public_file_path . '/uploads/textImage/'.$textIm, 100);
                imagejpeg($im);


            }}

        return $this->render('FormationMiniPBundle:Project:new.html.twig', array(
            'project' => $project,
            'request'=> $request->request->get('pos'),
            'formProject' => $formProject->createView(),
        ));
    }




0
jordane45
Messages postés
35404
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356
11 oct. 2018 à 12:10
'request'=> $request->request->get('pos'),

Dis voir ... c'est sûrement pour ça que tu penses que ta valeur est à zéro non ?
Il faut remplacer par
'request'=> $position,
0