Bonjour à tous,

Je bloque sur une partie de mon site, j'aimerais bien obtenir de l'aide car je ne sais même pas si ce que je veux faire est possible voici le topo :

J'ai une page d'administration d'articles de blog qui comprend les 2 formulaires suivants : Le premier formulaire me sort une liste déroulante avec la liste des 10 derniers articles Le second après validation de la première liste comprend un textarea pour faire les modifications et un champ input image si on veut modifier la vignette. Le traitement que je fais pour le moment est le suivant Si j'ai validé mon premier formulaire alors l'affiche le second Si j'ai validé le second alors j'effectue les modifications (si le champ textarea a été modifié etc) et si une nouvelle image a été mise.
Ce que j'aimerais faire c'est valider le premier formulaire sans recharger la page ça je sais faire voici mon code :


<form id="formblog" method="post" action="">       
                    <!-- Select -->
                            <select name="titre" id="title">
                                <option value="" disabled selected>Sélectionner l'article à modifier</option>
                                <?php
                                // Récupération des différents ablums
                                $titre_article_qry = $bdd->query("SELECT Titre, Link FROM Blog ORDER BY ID DESC LIMIT 0,10");
                                while($titre_article = $titre_article_qry->fetch()){  
                                ?>
                                <option value="<?php echo $titre_article['Link']; ?>"><?php echo $titre_article['Titre']; ?></option>
                                <?php                               
                                }
                                ?>
                            </select>
                    <!-- /Select -->

                    <!-- Submit -->
                            <button class="btn waves-effect waves-light" type="submit" name="action">Valider<i class="mdi-content-send right"></i></button>
                    <!-- /Submit -->

Par contre là ou je bloque c'est pour récupérer les données créees en javascript et en faire une variable pour pouvoir l'exploiter dans mon 2e formulaire.

<script type="text/javascript">
$(document).ready(function(){
     $("#formblog").submit(function(){
        $.post("blog/gestion_articles_blog.php",$(this).serialize(),function(texte){

        });
        return false;
        });
        }); 
        </script>

Merci par avance, car ma question première est surtout s'il est possible de passer un texte ou une variable javascript en variable php.
L'idée au final est d'obtenir quelque chose du genre $lien = $variable ou texte généré en javascript.

PS : Désolé si l'indentation est un peu dégueu mais je n'arrive pas a bien maitriser le système de code du forum.

13 réponses


Salut ! Tu devrais recupérer le value du select sur un évènement onchange jQuery, tu fais un $_GET vers ta page ou tu stocke ton deuxieme formulaire en lui passant le value du select en parametre, et tu affiches la réponse dans une div cible. Un truc du genre

var titre = '';
$(document).on('change','#title',function()
{
titre = $(this).val();
get_formulaire();
});

function get_formulaire()
{
  if( titre !== '')
  {
     $.get('url_de_ta_page',{'titre':titre})
    .success(
    function (data)
      {
      $(//div_cible).html(data);
      }
    );
  }
}

Ce code est un exemple pour que tu t'en inspires (si j'ai bien compris ta problématique)

magoabio
Auteur

Salut à toi et merci pour ta réponse, en fait j'ai a un moment fait exactement la même chose que ton code donc je suis sur la bonne voie mais j'ai deux questions :

  • Mon formulaire n°2 est sur la même page que le premier.
  • Comment récupérer la variable GET que j'ai envoyée sur l'autre page ?

Car envoyer la variable sur l'autre page php de traitement pas de problème, mais justement, toute ma question c'est comment rappatrier cette variable sur la 1ere page php pour pouvoir l'exploiter dans mon 2e formulaire.

Merci par avance...

Salut. Tu récupère le GET en php

<?php $titre = $_GET['titre']; ?>
magoabio
Auteur

Salut, si si justement je sais recuperer la variable en php mais le probleme se situe entre les deux.
C´est a dire que je n´arrive pas a passer la variable du javascript au php.

Quand j´utilise ton code je peux afficher la variable javascript titre dans la div cible mais du coup c´est du texte.

Yo!

J'ai pas trop saisi ton problème. Mais pour répondre à ta question si tu peux envoyer des données de javascript à php la réponse est oui. Par exemple :

var article_title = "Titre";
var article_content = "Contenu de l'article";
$.post('post.php',{title:article_title,content:article_content},function(data){
    //data contient ce que retourne php
});

Coté php si tu veux récupérer les données tu devras faire :

//Pour le titre :
$_POST['title'];
//Pour le contenu
$_POST['content'];
magoabio
Auteur

Salut merci a toi,
Alors c´est exactement ce je veux faire (et ce que je fais) a la difference que je veux recuperer la variable sur la meme page donc a la place de post.php je met rien (donc juste des guillemets '').

Sur une page externe les données passent mais sur la même page il n´y a rien sauf avec le code de semeen ou j´ai les donnees en texte brut dans une div

D'accord mais je vois pas ce que tu veux faire.
Tu post sur la même page, d'accord je te suis jusqu'à présent. Et quand tu post, php ne récupère pas tes données c'est ca? Ou il te renvoit de mauvaises données? Ou les données sont correctes mais tu n'arrives pas à la manipuler? Ou...

magoabio
Auteur

Ah désolé,
Oui quand je post les donnees ne passent pas ni en post ni en get.

Si je fais un alert(data) j´ai les donnees dans mon alert.

En gros ce que je cherche a faire est :
avoir une liste deroulante dans laquelle je selectionne un des 10 derniers articles de ma base.

On change ou On Submit, je souhaite afficher le contenu de l´article en recuperant le permalink qui se trouve dans la base. Et ce sans recharger la page.
Et c´est a cette etape que je bloque

Ok la c'est clair pour moi.
Alors sache que pour que ton data ne soit pas vide, il faut que ton php te renvoi quelque chose (avec un echo).
Peux tu envoyer ton code php?

magoabio
Auteur

Alors la tout de suite je ne peux pas reposter le code car je ne suis pas sur mon ordi.
Mais il y a mon code au tout debut de ce topic a la difference pres que au lieu d´envoyer data sur une autre page je veux faire le traitement sur la meme page (car quand j´envoie sur une autre page je ne sais pas rappatrier les donnees sur la page php initiale)

Il te faudrait le code de quelle page phP ?

Le code PHP de la même page ;)

Salut,

Ton soucis de ce que je comprends c'est que tu veux envoyer un Form post via ajax sur la même page et du coup modifier ton code PHP mais c'est pas possible.

sur ton évenement JS quand tu envoies les données (sur la même page si tu veux) il faut que tu affiche tes "nouvelles" donnée (ton select) via javascript là :

.success(
    function (data)
      {

Ou sinon tu fait tes "< select>" en display none et au success tu fais display:block sur le select voulu.

magoabio
Auteur

Houceni, voici le code de la page

La partie PHP

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

        if(!empty($_FILES)){ 

            // Appel de la classe imgClass
            require("classes/imgClass.php");

            $Vignette = $_FILES['vignette'];

            $Nom_vignette = $_POST['Nom_vignette'];

            $ext = strtolower(substr($Nom_vignette,-3));
            $allow_ext = array('jpg','png','gif');

            if(in_array($ext,$allow_ext)){

                // Copie et redimentionnement de l'image    
                move_uploaded_file($Vignette['tmp_name'], "../".$Nom_vignette);
                Img::creerMin("../".$Nom_vignette, "../", $Nom_vignette,480,280);   

            }

        } 

                    // Initialisation des variables

                    $Article = stripslashes($_POST['article']);
                    $Link = $_POST['Link'];

                    // Traitement des informations
                    $update_article = $bdd->prepare("UPDATE Blog SET Article = :Article WHERE Link = :Link");
                    $update_article->execute(array(                     
                    'Article' => $Article,
                    'Link' => $Link
                    ));         
    }

Les deux formulaires

<form id="formblog" method="post" action="">
                <div class="card-panel">
                    <?php
                        // Message de validation 
                        echo $message;
                    ?>
                    <!-- Select -->
                    <div class="row">
                        <div class="col l5 s12">
                            <select name="titre" id="title">
                                <option value="" disabled selected>Sélectionner l'article à modifier</option>
                                <?php
                                // Récupération des différents ablums
                                $titre_article_qry = $bdd->query("SELECT Titre, Link FROM Blog ORDER BY ID DESC LIMIT 0,10");
                                while($titre_article = $titre_article_qry->fetch()){  
                                ?>
                                <option value="<?php echo $titre_article['Link']; ?>"><?php echo $titre_article['Titre']; ?></option>
                                <?php                               
                                }
                                ?>
                            </select>
                        </div>                    
                    </div>
                    <!-- /Select -->

                    <!-- Submit -->
                    <div class="row">
                        <div class="col l6 s12">                       
                            <button class="btn waves-effect waves-light" type="submit" name="action">Valider<i class="mdi-content-send right"></i></button>
                        </div>
                    </div>
                    <!-- /Submit -->

                </div>
            </form>

Normalement le bouton submit est inutile avec un onchange

Ensuite le php juste en dessous ou justement je veux passer la variable javascript prise dans le formulaire juste au dessus soit (titre) dans la variable php $Link

<?php 
                $Link = $_GET['titre'];
                $article_qry = $bdd->query("SELECT Titre, Article, Vignette, Link FROM Blog Where Link='$Link'");
                $article = $article_qry->fetch();
                echo $Link;

            ?>

Et c'est à ce niveau que je n'arrive pas a récupérer les données dans la variable Link que ce soit en POST ou GET.

<form id="form2" method="POST" action="#" enctype="multipart/form-data">
                <div class="card-panel">        
                    <!-- CKEditor -->                  

                    <div class="row">
                        <div class="col l5 m12">
                            <textarea id="article" name="article"><?php echo $article['Article']; ?></textarea>
                        </div>                          
                    </div>

                    <!-- /CKEditor -->

                    <!-- Photo Field -->
                    <div class="row">
                        <div class="col l5 s12">
                            <div class="file-field input-field">
                                <div class="btn">
                                    <span>Vignette</span>
                                    <input type="file" name="vignette">
                                </div>
                                <div class="file-path-wrapper">
                                    <input class="file-path validate" name="vignette" placeholder="Taille (480 x 280px)" type="text">
                                </div>
                            </div>
                        </div>
                    </div>
                    <!-- /Photo Field -->

                     <input type="hidden" name="Nom_vignette" value="<?php echo($article['Vignette']); ?>"
                    <input type="hidden" name="Link" value="<?php echo $Link; ?>">
                    <input type="hidden" name="modifier">
                    <!-- Submit -->
                    <div class="row">
                        <div class="col l6 s12">                       
                            <button class="btn waves-effect waves-light" type="submit" name="action">Valider<i class="mdi-content-send right"></i></button>
                        </div>
                    </div>
                    <!-- /Submit -->
                </div>
            </form>

Et enfin le Javascript en bas de page avant </body>

    <script type="text/javascript">
        $(function(){
            $("#title").change(function(){
                titre = $(this).val();
                get_formulaire();
            });
        });

        function get_formulaire(){
            if(titre != ''){
                $.get('', {titre: titre}, function(data){

                    alert(data);
                });
            }
        }
    </script>