Bonjour à tous,

Cela fait maintenant 1 jour que je suis coincé sur un problème de Json, je ne vois vraiment pas ce que je fais de mal, je me suis laissé la nuit pour voir si la solution me viendrait mais je ne trouve pas ce matin non plus ...

Alors voici mes codes :

La partie formulaire :

<form id="pop_form" action="ajouter.php" method="post" enctype="multipart/form-data">

                    <p><center><strong><?php echo _("Nom Application:"); ?></strong></center>
                    <center><input name="app_name" id="name_app" type="text"size="20" /></center></p>

                    <p><center><strong>Information Application:</strong></center>
                    <center><textarea maxlength="255" name="app_area" id="app_area"></textarea></center></p>

                    <p><center><strong>URL Application:</strong></center>
                    <center><input name="app_url" type="text"size="20" id="app_url"/></center></p>      

                    <input type="hidden" id="idapp" name="idapp" value=""/>     

        </div> 

        <div class="ajout_image"> 
            <p><span id="glyph-fermeture-modif"class="glyphicon glyphicon-remove" aria-hidden="true" onclick="fermeture('pop', 'div_table');"></span></p><br/>
                <p><center><strong id="modif_ajout_img"></strong></center></p>
                    <center><input type="file" name="img" /></center>

                    <center><?php if(isset($erreur)){ ?><strong><font color="red"><?php echo $erreur;}?></font></strong></center>

                    <p><center><strong>Description image (facultatif):</strong></center>
                    <center><textarea maxlength="255" name="img_area"></textarea></center></p>          
        </div> 
        <div class="fermeture">
                <center>

                        <button id="btn_valider" class="bouton ajout" type="button" onclick="ajout(this);"></button>
                                    <input id="input_valider" type="hidden" name="" />

                    <input id="reset" type="reset" class="bouton ajout" name="reset" value="Reset" /></center>

        </form>

La partie Ajax :

function show(obj) {

                var id = obj.id;

                if(id == "btn_ajouter")
                {
                    $('#div_table').hide();

                            $('#name_app').val("");
                            $('#app_area').val("");
                            $('#app_url').val("");
                            $('#idapp').val("");

                    document.getElementById('modif_ajout_app').innerHTML = "Ajouter Application";
                    document.getElementById('modif_ajout_img').innerHTML = "Ajouter Image"; 

                    document.getElementById('input_valider').name = "ajouter";
                    document.getElementById('btn_valider').innerHTML = "Ajouter";
                    $('#pop').show();

                }
            }

            function ajout(obj) {

                        //document.getElementById('valider').name = "Ajouter";

                        var id = obj.name;
                        console.log(id);
                        //$("#valider").hide();

                        var $this = $('#pop_form');

                        $.ajax({
                            url: $this.attr('action'),
                            type: $this.attr('method'),
                            data: $this.serialize(),
                            dataType: 'json',
                            success: function(json) {
                                console.log(json);
                            }

                    }); }

Et la partie PHP :

<?php 

    $reponse = 'ca passe';

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

                include('connex/connexion.php');
                    echo "1";
                require("imgClass.php");
                $img = $_FILES['img'];
                $ext = strtolower(substr($img['name'], -3));
                $alow_ext = array("jpg","png","gif"); 
        if(in_array($ext, $alow_ext))
        {
            move_uploaded_file($img['tmp_name'],"logo/".$img['name'] );
            Img::creerMin("logo/".$img['name'],"logo/miniature",$img['name'],140,120);
            Img::convertirJPG("logo/".$img['name']);

        $img_name = strtolower(substr($img['name'], 0,-4));
        $img_taille = $img['size'];
        $img_type = $ext;
        $img_desc = $_POST['img_area'];
        $img_url = "logo/miniature/".$img['name'];

            echo"2";

        $app_name = $_POST['app_name'];
        $app_info = $_POST['app_area'];
        $app_url = $_POST['app_url'];

            include('connex/connexion.php');

            $req = $bdd->prepare('INSERT INTO applications VALUES ("", :app_name, :app_info, :app_url)');
            $req -> execute(array(
                'app_name' => $app_name,
                'app_info' => $app_info,
                'app_url' => $app_url));    
                $id = $bdd->lastInsertId();

                echo "3";
            $req = $bdd->prepare('INSERT INTO images VALUES ("", :img_name, :img_taille, :img_type, :img_desc, :img_url, :id)'); 
            $req -> execute(array(
                'img_name' => $img_name,
                'img_taille' => $img_taille,
                'img_type' => $img_type,
                'img_desc' => $img_desc,
                'img_url' => $img_url,
                'id' => $id));

                $a = "ajout est fonctionnel";
                $test = "l'ajout marche";

                echo json_encode(['reponse' => $reponse,'test' => $test, 'a' => $a]);
            }
            }
      ?>

J'explique un peu tout ça, lorsque j'appuie sur le bouton Ajouter une div apparait avec un formulaire et un bouton ajouter, lors du clic sur le bouton je voudrai executer la requête dans if(isset($_POST['ajouter'])) ... J'ai donc fait des test avec des variables et encoder en JSON, tout marche et j'obtiens bien l'objet : Object {reponse: "ca passe", test: "l'ajout marche", a: "ajout est fonctionnel"}

Mais dès que je mets une requête SQL en plus sans rien toucher, je n'obtiens plus rien, le JSON ne s'affiche pas ...

Je ne suis pas un expert en Ajax/Json je viens de m'y mettre alors l'erreur est peut être énorme mais pour moi elle ne me saute pas aux yeux ...

J'ai essayé de passer avec un input de type submit basique je vois bien que sur la page ajouter.php mes echo sont écris et l'object json est affiché mais en passant par Ajax je n'ai aucune réponse ...

Pour le code de l'image c'est celui de Grafikart donc je suis à peu près sûr qu'il marche, je dirai plutôt que ce sont les réquêtes même si comme je le dis l'ajout marche si je passe par un submit normal :/

Je demande donc si des gens pourraient m'indiquer la voie à suivre !

Merci d'avance !

7 réponses


betaWeb
Réponse acceptée

Salut,

Je te conseille de suivre ce tutoriel http://www.grafikart.fr/tutoriels/jquery/upload-drop-172/, il t'aidera beaucoup pour comprendre l'envoie de files sur un serveur.

Concernant ton soucis de SQL, est-ce que tu penses bien à faire un "json_decode($mes_datas, true)" (afin de concertir des datas encodées en JSON en associative array PHP) côté PHP ?

Hurobaki
Auteur

J'ai fais quelques test et apparemment, ma variable $_FILES['img'] n'est pas reconnue ... Pourtant il me semble qu'elle est bien déclarée dans le formulaire HTML, il y a une méthode spécifique pour faire passer des variables $_FILES ?

Hurobaki
Auteur

Bonjour,

Je vais allé voir ce tutoriel de ce pas, je me suis renseigné et apparemment il y a des plugins JQuery nécessaires pour faire cela, mais je reste un fan des tutos de Grafik alors je vais le regardé :)

Je ne fais que du 'echo json_encore([]);' dans la partie PHP que je récupère coté client avec mon script JQuery pour afficher ou modifier les valeurs de mes champs en fonction de ce que je veux faire , le decode est-il nécessaire ?

Merci pour ta réponse !

Ah oui non masi j'ai mal lu en fait. Désolé.

Donc tu veux dire que côté MySQL il n'effectue pas d'insertion c'est ça ?

Hurobaki
Auteur

Oui il ne fait pas la requête, imaginons que je ne mette que deux variables de types string que je les encode en Json, alors je vais avoir mon objet mais dès que je passe pas des variables $_files et $_post il commence à avoir un problème et ne me renvois plus rien ...

C'est pour ça que j'en ai conclu que ce serait ma variable $_files ne passerait pas et donc rien ne se fait niveau PHP et que ce serait pour ça que je n'ai pas le Json coté Client

Donc j'en reviens à ce que je te disais: regarde le tuto que je t'ai conseillé :)

Hurobaki
Auteur

Ce que je vais faire, en plus j'aurai un drag&drop à la place d'une simple selection de fichier ! La classe ;)

Merci encore :)