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

nejeh - 10 oct. 2018 à 09:52
nejeh.dellai Messages postés 12 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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
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 12 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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344 > nejeh.dellai Messages postés 12 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 12 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 12 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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
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 12 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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
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 12 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 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
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
Rejoignez-nous