Fermer

Connectez-vous

Vous devez être connecté pour faire ça.

Identifiez-vous

Votre compte spontex.org




Ou




Nouveau ?
Créez votre compte en un seul clic.


   
  
  
  
C'est tout ! (oui, on vous demande SEULEMENT ça : login / MDP. Le reste, on s'en fout !)
Valider :


Données personnelles ?

Les informations sur ce site sont publiques mais la participation est réservée aux personnes enregistrées. S'enregistrer, ça veut dire "donner un login + un mot de passe". Après, vous pourrez renseigner plus d'informations mais RIEN d'autre n'est obligatoire. Si vous êtes tombé ici, c'est que vous avez voulu faire quelque chose réservé aux personnes enregistrées. De source fiable, j'ai appris que PERSONNE n'était JAMAIS mort après avoir rempli ce formulaire. Si vous ne voulez toujours pas vous enregistrer (libre à vous), vous pouvez continuer votre navigation, sans cliquer sur les liens qui mènent à cette page :-) Merci d'avoir lu jusqu'ici.

Titre
N'hésitez pas à partager nos informations... mais n'oubliez pas de nous citer !
you should never read that.

[Pour ceux que ca interesse] Le super code de Junk


Avatar de mansuetus
mansuetus - 20 janvier 2010 - 10:53:45

Et je te rappelle que moi, j'ai déjà fait l'exercice une fois, dans la version n-1 de spontex…


Avatar de Junk
Junk - 20 janvier 2010 - 11:13:01

Moi, j’aurais fait un script python ou php avec un pseudo parseur, qui dit “tiens, nouvelle question”—> INSERT id ? poof, je store…

Evidemment c'est une option, mais si j'ai bien compris ca suppose que ton script ait acces a la DB, et c'est aussi beaucoup de code pour un truc qui est techniquement faisable en un one liner.

(au sens ou tu as la meme information dans le dump human-readable que dans le SQL : normalement generer l'un a partir de l'autre c'est simplement de l'alteration de texte)

C'est un peu pour ca que j'ai dit “dis moi comment sont les table, je te ferai du SQL”, et pas “donne moi un access ssh pour que je fasse tourner un script qui puisse avoir un acces direct a la DB”, parce que tu m'aurais legitimement envoye chier…

Et je te rappelle que moi, j’ai déjà fait l’exercice une fois, dans la version n-1 de spontex…

si tu ne veux pas relever le defi, c'est ton choix :D

sinon, plus serieusement, je veux bien que tu m'explique le truc de la vue… j'ai pas exactemenct compris a quoi tu faisais allusion, mais si c'est ce que j'imagine ca m'a l'air assez classe (et je savais pas que PG faisait ca)


Avatar de mansuetus
mansuetus - 20 janvier 2010 - 11:28:11

Une vue, c'est une table “temporaire”.

Le problème que tu as avec les “vraies” tables, c'est les contraintes…

… donc tu fais un CREATE VIEW qui a la même “structure” que les tables visées, mais sans les contraintes…

DONC tu peux passer tes requêtes dedans, sans te faire bloquer (test_id à 0, par exemple), puis tu fais tes UPDATES dedans sans risque de tout péter.

Et quand tout est bon, tu fais INSERT INTO (vraie table) FROM (vue).

Exemple qui fait ça que j'utilise professionnellement :
On a une table qui relie
garaelem <—> codproduit

Une table qui relie
garaelem <—> codelemfin

Et une table (PROGARFIN) qui fait du cache des liens : codproduit, garaelem, codelemfin

Cette dernière table perd ses bébés régulièrement, et ça me saoule de recréer les absents un par un DONC on passe ces 3 requêtes :

dans le système de bases, #t est une table temporaire, donc une “vue”.


SELECT DISTINCT c.codproduit,c.codgaraelem,g.codelemfin INTO #t 
FROM cotisoptgael c, garaelem g WHERE c.codgaraelem=g.codgaraelem AND g.enummodges=2

—> crée une vue à 3 colonnes


DELETE #t FROM #t t, progarfin p WHERE t.codproduit=p.codproduit AND t.codgaraelem=p.codgaraelem AND t.codelemfin=p.codelemfin

—> Nettoie la vue de ce qui est déjà présent en base


INSERT progarfin SELECT t.codproduit,t.codgaraelem,t.codelemfin,'T', '4', 'A', 'V', 'O', 10, 'N', NULL, NULL FROM #t t

Ajoute dans la vraie base des données chopées dans la vue, avec les données qui manquent.
(note que la description complète des colonnes de PROGARFIN est facultative dans ce SGDB)


Avatar de Junk
Junk - 20 janvier 2010 - 11:34:44

Jusque la, je connaissais, (j'aurai pas tout a fait decrit ca comme “le probleme c'est les contraintes” et “la vue te permet de faire la meme, sans les contraintes” – ) mais tu peux faire un insert dans une view? genre dans le cas present (disons juste test et question qui pointe vers test), tu ferais quoi?


Avatar de Junk
Junk - 20 janvier 2010 - 11:50:04

De surcroit, vue != table temporaire, la tu parle, en terme theoriques, d'une “vue concrete”. La VIEW en PG, (et dans tous les systeme auxquels j'ai eu affaire), c'est jamais qu'un “raccourci” vers un SELECT – elle ne contient pas de donnees, donc tu ne peux pas supprimer (la deuxieme etape de ton processus), au contraire d'une temptable.

Je comprends tres bien l'avantage d'une “vue” dans l'exemple que tu as donne, sauf que, d'une part, j'appellerai pas ca exactement une vue, simplement une table temporaire pour simplifier et rendre le processus plus facile a comprendre “humainement” . La, tu pourrais faire la meme en une seule commande de SQL – (je crois, ca depend des systemes, il y en a qui sont plus ou moins tolerant a faire des insertion sur la base de selects qui contiennet la table que tu insere) mais ca serait moins lisible – et ou utiliser une vraie vue1 .

d'autre part, je vois mal le rapport entre l'exemple que tu as donne, et le probleme initial, a savoir inserer du bouzin relationnel d'un coup en minimisant l'emmerdement induit par les FK, sachant que les PK correspondantes sont generees automatiquement.

(rien a voir, mais au passage, ta troisieme etape, il me semble, ne serait pas valide en PG – une grosse partie du probleme de l'insertion avec les FK qui vont bien est que PG si j'en crois la doc ne te laisse pas faire des insert avec une partie des valeurs definie a la main, et l'autre partie qui vient d'une table)

1 une vraie vue vit en permanence dans ta DB, c'est juste un moyen de sauvegarder ton select. dans le cas present, tu peux utiliser un outer join pour selectionner tous les elements de (garaelem,cotisoptgael) qui ne sont pas dans prografin. Les deux premieres etapes de ton processus se resume simplement a regarder ce qu'il y a dans cette vue… ca te permet aussi de monitorer si ta table perds des bebes, justement. Apres quoi, pour re-inserer dans prografin, selon les systemes, tu peux soit faire un insert direct depuis ta vue, mais certains systemes vont pas aimer (parce que tu inseres dans p, et ta vue utilise p), soit tu passe effectivement par une table temp.


Avatar de mansuetus
mansuetus - 20 janvier 2010 - 14:44:34

vue != table temporaire

C'est effectivement ce qu'on lit, mais je ne vois pas en quoi, et ça doit dépendre de l'implémentation.

(rien a voir, mais au passage, ta troisieme etape, il me semble, ne serait pas valide en PG – une grosse partie du probleme de l’insertion avec les FK qui vont bien est que PG si j’en crois la doc ne te laisse pas faire des insert avec une partie des valeurs definie a la main, et l’autre partie qui vient d’une table)

En admettant que ce soit vrai, en créant une vraie table temporaire, tu peux faire ça. Car tu la crée avec les “données” puis tu fais des “ALTER TABLE” pour ajouter des colonnes en les initialisant comme tu veux.

Donc “faux problème”, ces trucs d'initialisation avec des contraintes, car tu peux passer par un “truc” (vue, table temporaire) temporaire.

Je résume l'étude en pensant :

faire un script en SQL pour la migration est une fausse bonne idée car les relations entre les objets doivent être paramétrées par des variables qui sont relou à gérer en SQL et BEAUCOUP plus simples en PHP / python / perl / langage qui a une API DB.

Pour “tu peux faire un INSERT”, sans pouvoir répondre parfaitement (selon l'implémentation du SGDB), la réponse est OUI.

Une vue n'est juste pas sauvegardée pareil qu'une table, pour moi, c'est la seule différence… mais je ne suis pas non plus compétent en SQL (j'ai juste fait 2 fois des modules “Initiations aux bases de données”, le gros de ce que je connais, c'est spontex qui me l'a appris)


Avatar de Junk
Junk - 20 janvier 2010 - 15:06:09

C’est effectivement ce qu’on lit, mais je ne vois pas en quoi, et ça doit dépendre de l’implémentation.

Une vue n’est juste pas sauvegardée pareil qu’une table, pour moi, c’est la seule différence…

C'est conceptuellement different. Une vue est un aspect de ta DB au niveau abstrait, independemment d'implementation. Si tu as une entite “tests” (titre, resume, trnache de scores), et une entite “question” (question, reponses, et scores) comme dans ton modele, tu peux parler du “test avec les questions”, qui serait alors une vue. (c'est a dire ton SELECT avec la jointure, mais sauvegarde sous un nom).

En terme d'implementation, a la limite, ca serait une “table virtuelle”, plus qu'une table temporaire. C'est une maniere de “voir” (d'ou le nom) des donnees, et d'y acceder (souvent en lecture), mais ca ne contient pas de donnees.

Parfois la vue est “concrete”, c'est a dire que pour des questions d'optimisation, au lieu que ta vue soit juste une “requete sauvegardee”, on l'ecrit en dure dans une table, pour eviter d'avoir a lancer la requete a chaque fois – mais pour l'utilisateur ca doit etre transparent (c'est a dire qu'a chaque fois que tu change des donnees dans les tables sous-jacentes, tu dois mettre la vue concrete a jour bien comme il faut)....

Dans ce cas-la, oui, on utilise une table (loin d'etre temporaire), ca peut etre code a la main, ou certains systeme le font tout seul, mais meme dans ce cas la, ce n'est pas une table temporaire comme tu l'as utilisee.

Le truc important c'est que du point de vue de l'utilisateur, tu n'as qu'un seul ensemble de donnees : les donnees de la vue, meme si en dur c'est une copie, conceptuellement, sont les memes que celles des tables sous jacentes.

C'est pour ca que c'est different de la table temporaire que tu as utilisee, par ce que, a la deuxieme etape, tu supprime des entrees dans ta table temporaire – tu utilises le fait que ca soit une copie, justement pour copier, puis nettoyer. Si c'etait une vue, en supprimant dans la vue (si tant est que le systeme te laisse faire), tu aurais supprime les donnees sous jacentes (dans cotisoptgael et garaelem)

Si ca te parle plus, une vue, en gros, c'est un symlink. Tu vois ce que je veux dire?

En admettant que ce soit vrai, en créant une vraie table temporaire, tu peux faire ça. Car tu la crée avec les “données” puis tu fais des “ALTER TABLE” pour ajouter des colonnes en les initialisant comme tu veux.

Tout a fait, mais ce n'est pas une vue… je vois pas comment tu peux t'abstraire du probleme des FK, dans le truc des tests, en utilisant des vues/tables temp. (je te cite “Ou passer par une vue pour faire tout d’un coup. C’est donc vachement simple ^^” ).

faire un script en SQL pour la migration est une fausse bonne idée car les relations entre les objets doivent être paramétrées par des variables qui sont relou à gérer en SQL et BEAUCOUP plus simples en PHP / python / perl / langage qui a une API DB.

La je suis pas du tout d'accord – les deux ont des merites differents, et il faut choisir le bon outil pour la bonne tache. En l'occurence, pour ce type de taches (un one-shot pour rattraper des donnees manquantes a partir de texte), le faire en SQL pur se defend parfaitement. Ca a plein d'avantages que je ne listerai pas… Effectivement un script a pas mal d'avantages, ils sont differents, et aussi pas mal d'inconvenients, que je ne listerai pas non plus.

Dire “telle methode, c'est une fausse bonne idee, faut prendre telle autre”, surtout en avancant le contre argument du “des variables qui sont relou à gérer en SQL et BEAUCOUP plus simples en script” (comprendre – il faut connaitre le PL du systeme, et comme je le connais pas, j'en deduis que c'es plus facile dans des languages que je connais), c'est aborder le probleme par le petit bout de la lorgnette. Ca depend des cas, ca depend de la nature de ta migration, ca depend si c'est amene a etre reutilise, ca depend de la structure de donnees, ca depend de ce a quoi tu as access…


Avatar de mansuetus
mansuetus - 20 janvier 2010 - 21:37:05

Pour info, voila les deux bouts de code, j'ai viré la partie “formulaires” qui n'apporte rien…

Le premier parse le texte en entrée, et annonce les couilles. En outre, il préparre les données en tableau pour le second bout de code… qui ajoute.


        $page_type = "tests";
        require ("../haut.php");
        require ("functions_test.php");
        $to_parse = "";
        if ( empty ($_POST["to_parse"] ) )
        {
                if ($_POST["check"] != 36 )
                {
                        echo "Vous deviez mettre 36 dans la case combien font 6*6.";
                        require ("../bas.php");
                        exit;
                }
                if ( empty ($_POST["testname"]) )
                {
                        ?>
                                Tu n'as pas donne de nom a ton test !
                        <?php
                        require ("../bas.php");
                        exit;
                }
                do_form ($sauvegarde);
        }
        $to_parse  = stripslashes ( htmlentities ( $_POST["to_parse"] ) );
        $sauvegarde = $to_parse;
/* Parser internal variables */
        $qqa = 0.001;
        $position = 0;
/* compteurs pour les tableaux de questions/reponses a ajouter */
        $lastquestion = 1;
        $lastreponse = 1;
/* table au des questions/reponses a ajouter */
        $questions = array ();
        $reponses = array ();
/* question / reponse EN COURS de parsing */
        $question = array ();
        $reponse = array ();
/* tableau des labels */
        $labels = array ();
/* pour aider au parsing : */
        $ligne = 1;
        function is_already_labeled ( $label )
        {
                global $labels;
                $i = 0;
                if ( empty ( $label ) )
                {
                        return ( true );
                }
                while ( ! empty ( $labels[$i] ) )
                {
                        if ( $labels[$i] == $label )
                        {
                                return (true);
                        }
                        else
                        {
                                $i++;
                        }
                }
                return ( false );
        }
        function add_to_labels ( $label )
        {
                global $labels, $lastquestion, $ligne;
                // FIXME : v<8e>rifier qu'il n'y a pas d'espace.
                if ( ! is_already_labeled ( $label ) )
                {
                        $i = 0;
                        while ( ! empty ( $labels[$i] ) )
                        {
                                $i++;
                        }
                        $labels[$i] = $label;
                }
                else
                {
//                      echo "question $lastquestion, ligne $ligne, RE-declatation du label $label\n";
//                      require("../bas.php");
//                      exit;
                }
        }
        function alphanum ( $char )
        {
                switch ($char)
                {
                        case "a" : case "b" : case "c" : case "d" : case "e" : case "f" : case "g" : case "h" : case "i" :
                        case "j" : case "k" : case "l" : case "m" : case "n" : case "o" : case "p" : case "q" : case "r" :
                        case "s" : case "t" : case "u" : case "v" : case "w" : case "x" : case "y" : case "z" :
                        case "A" : case "B" : case "C" : case "D" : case "E" : case "F" : case "G" : case "H" : case "I" :
                        case "J" : case "K" : case "L" : case "M" : case "N" : case "O" : case "P" : case "Q" : case "R" :
                        case "S" : case "T" : case "U" : case "V" : case "W" : case "X" : case "Y" : case "Z" :
                        case "1" : case "2" : case "3" : case "4" : case "5" : case "6" : case "7" : case "8" : case "9" : case "0" :
                        case "&" : case ";" : case ":" : case "." : case "=" : case "+" : case "/" : case "\\" : case "," :
                        case '?' : case "!" : case "(" : case ")" : case "@" : case "'" : case "*" : case "-" :
                        case "\n" : case "\t" : case " " : case "\r" : return (true); break;
                        default : return (false);
                }
                // We should never reach here
die ("internal PHP error");
                        }
        function passe_question_d_apres ( )
        {
                global $lastquestion, $question, $questions, $labels;
                if ( $question["intitule"] != "")
                {
                        // Fixme : permissions multiples.
                        if ( ! is_already_labeled ( $question["permissions"] ) )
                        {
                                foreach ( $labels as $id => $label )
                                        echo "$id : >$label<\n";
                                echo "Erreur : question '" .$question["intitule"] ."' (position $lastquestion) demande une permission pas encore accordable : >" . $question["permissions"] ."<\n";
                                 do_form ($sauvegarde);
                        }
                        $questions[$lastquestion++] = $question;
                }
                $question = array (
                        "intitule" => "",
                        "permissions" => "");
        }
        function passe_reponse_d_apres ( )
        {
                global $lastreponse, $reponse, $reponses, $lastquestion, $ligne;
                if ( $reponse["intitule"] != "" )
                {
                        if ( ! empty ( $reponse["permissions"] ) )
                        {
                                if ( ! is_already_labeled ( $reponse["permissions"] ) )
                                {
                                        echo "question $lastquestion, ligne $ligne, requete de label " . $reponse["permissions"] ." NON defini\n";
                                         do_form ($sauvegarde);
                                }
                        }
                        if ( !empty ( $reponse["label"] ) )
                        {
                                add_to_labels ( $reponse["label"] );
                        }
                        $reponses[$lastreponse++] = $reponse;
                }
                $reponse = array (
                        "intitule" =>"",
                        "question" => $lastquestion,
                        "label" => "",
                        "permissions" => "",
                        "scores" => "" );
        }
        while ( ( $i = $to_parse[$position++] ) != NULL )
        {
                if ( ( $i == "\n" ) )
                {
                        $ligne++;
                }
//DEBUG 
//              echo $position . ' ' . $ligne . ' ' . $qqa . '<br />';
                if  ( (( $qqa <= 1 ) || ( $qqa == 2) ) && ( ( $i == " " ) || ( $i == "\n" ) || ( $i == "\t" ) || ( $i == "\r" )) )
                {
                        // On ignore un caractere NULL
                }
                elseif ( ( $qqa <= 1 ) && ( $i == "@" || $i == "*" ) )
                {
                        /* nouvelle question commence */
                        passe_question_d_apres();
                        $qqa = 1.1;
                }
                elseif ( $qqa == 1 && $i == "#" )
                {
//                      echo "Nouvelle REPONSE trouvee.\n";
                        passe_reponse_d_apres();
                        $qqa = 2;
                        // Attention, doublon OBLIG de 1.9
                }
                elseif ( $qqa == 1.1 )
                {
                        if ( $i == '[' )
                        {
                                /* on entre dans une condition */
                                $qqa = 1.2;
                        }
                        elseif ( alphanum ( $i ) )
                        {
                                $qqa = 1.9;
                                $position--;
                        }
                        else
                        {
                                echo "Ligne $ligne : attention, caractere non autorise dans la question '$i'. J'attendais [ ou un intitule.";
                                 do_form ($sauvegarde);
                        }
                }
                elseif ( $qqa == 1.2 )
                {
                        if ( $i == "]" )
                        {
                                // Fin des conditions !
                                $qqa = 1.8;
                        }
                        elseif ( alphanum ( $i ) )
                        {
                                $question["permissions"] .= $i;
                        }
                        else
                        {
                                echo "Ligne $ligne parse ERROR : caractere inattendu dans les conditions\n";
                                 do_form ($sauvegarde);
                        }
                }
                elseif ( $qqa == 1.8 )
                {
                        if ( alphanum ( $i ) )
                        {
                                $qqa = 1.9;
                                $question["intitule"] .= $i;
                        }
                        else
                        {
                                echo "Ligne $ligne caractere inattendu pour commencer une question $i";
                                 do_form ($sauvegarde);
                        }
                }
                elseif ( $qqa == 1.9 )
                {
                        if ( $i == "#" )
                        {
                                passe_reponse_d_apres();
//                              echo "Nouvelle REPONSE trouvee\n";              
                                $qqa = 2;
                        }
                        elseif ( alphanum ( $i ) )
                        {
                                $question["intitule"] .= "$i";
                        }
                        else
                        {
                                echo "Ligne $ligne : caractere inatendu &gt;$i&lt; dans l'intitule de la question";
                                 do_form ($sauvegarde);
                        }
                }
                elseif ( $qqa == 2 )
                {
                        if ( $i == '$' )
                        {
                                // Nouveau Label detecte
                                $qqa = 2.1;
                        }
                        elseif ( $i == '[' )
                        {
                                // Nouvelle zone de permissions detectee
                                $qqa = 2.2;
                        }
                        elseif ( alphanum ( $i ) )
                        {
                                //Reponse "toute bete", intitule...
                                $reponse["intitule"] .= $i;
                                $qqa = 2.4;
                        }
                        else
                        {
                                echo "caractere inattendu '$i' dans intitule de reponse";
                                 do_form ($sauvegarde);
                        }
                }
                elseif ( $qqa == 2.1 )
                {
                        if ( $i == '$' )
                        {
                                //Sortie de la zone de label
                                $qqa = 2.19;
                        }
                        elseif ( alphanum ( $i ) )
                        {
                                $reponse["label"] .= $i;
                        }
                        else
                        {
                                echo "caractere inattendu dans label $i";
                                 do_form ($sauvegarde);
                        }
                }
                elseif ( $qqa == 2.19 )
                {
                        if ( $i == '[' )
                        {
                                // Nouvelle zone de permissions detectee
                                $qqa = 2.2;
                        }
                        elseif ( alphanum ( $i ) )
                        {
                                $reponse["intitule"] .= $i;
                                //Reponse "toute bete", intitule...
                                // DOUBLON DE 2.1 !!
                                $qqa = 2.4;
                        }
                        else
                        {
                                echo "caractere inattendu $i dans intitule de reponse";
                                 do_form ($sauvegarde);
                        }
                }
                elseif ( $qqa == 2.2 )
                {
                        if ( $i == "]" )
                        {
                                // Sortie de la zone permission
                                $qqa = 2.3;
                        }
                        elseif ( alphanum ( $i ) )
                        {
                                $reponse["permissions"] .= $i;
                                // Conenu de permissions
                        }
                        else
                        {
                                echo "caractere INTERDIT dans la zone de permission : $i";
                                 do_form ($sauvegarde);
                        }
                }
                elseif ( $qqa == 2.3 )
                {
                        if ( alphanum( $i ) )
                        {
                                $reponse["intitule"] .= $i;
                                $qqa = 2.4;
                        }
                        else
                        {
                                echo "caractere INTERDIT dans l'intitule de la reponse : $i";
                                 do_form ($sauvegarde);
                        }
                }
                elseif ( $qqa == 2.4 )
                {
                        if ( $i == "{" )
                        {
                                // On va recevoir les scores
                                $qqa = 2.5;
                        }
                        elseif ( alphanum ( $i ) )
                        {
                                $reponse["intitule"] .= $i;
                                // Conenu de intitule de reponse
                        }
                        else
                        {
                                if ( $i == "#" )
                                {
                                        echo "Ligne $ligne : Attention, j'attends OBLIGATOIREMENT un score a la fin de toute reponse";
                                         do_form ($sauvegarde);
                                }
                                els                               {
                                        echo "Ligne $ligne : caractere INTERDIT dans la saisie de l'intitule de la reponse : $i";
                                         do_form ($sauvegarde);
                                }
                                //We should never reach here :p
                        }
                }
                elseif ( $qqa == 2.5 )
                {
                        if ( alphanum ( $i ) )
                        {
                                $reponse["scores"] .= $i;
                        }
                        elseif ( $i == '}' )
                        {
                                if ( ! parse_score ( $onsenfout,  $reponse["scores"] ) )
                                {
                                        echo "<br />Ligne $ligne : Score incorrect, ".  $reponse["scores"];
                                         do_form ($sauvegarde);
                                }
                                $qqa = 1;
                        }
                }
                else
                {
                        echo "Ligne $ligne : Parse error : erreur generale. caractere vu : &gt;$i&lt;, je sais pas commment le gerer qqa=$qqa";
                         do_form ($sauvegarde);
                }
                // echo "$qqa ";
        } // Fin While global -> on scanne le caractere d'apres
        passe_question_d_apres();
        passe_reponse_d_apres();

Ajout dans la DB :


              global $db;
                mysql_select_db ("tests", $db);
                $sql = "INSERT INTO sauvegarde_tests ( test_name, createur , cookie , test )
                VALUES (\"". $_SESSION["test_name"] ."\",\"" . $_SESSION["user_login"] ."\", \"" . $_COOKIE[$cookie_name] . "\", \"" . $_SESSION["test"] ."\")";
                mysql_query ($sql) or die ("erreur sauvegarde test : $sql");
                //Insertion effective ...
                if (! ($_SESSION["test_en_cours"] ) )
                {
                $equivalence = array();
                $id = $_SESSION["user_id"];
                if ( empty ( $id ) ) $id = 0;
                $sql = "INSERT INTO liste_tests 
                        ( nom, creation_date, description, creator_name, creator_id ) VALUES 
                        (\"" .  $_SESSION["test_name"] . "\", ".time(). ", \"" . $_SESSION["description"] . "\"
                        , \"". $_SESSION["user_login"] ."\", ". $id .")";
                $ret = mysql_query($sql) or die ("erreur insertion du test dans la DB. $sql");
                $_SESSION["test_id"] = mysql_insert_id ( $db ) ;
                foreach ( $questions_sav as $id => $value)
                {
                        $sql = "INSERT INTO questions (num, test, type, conditions, intitule) VALUES 
                        (\"$id\", \"".$_SESSION["test_id"]."\", 0, \"".$value["permissions"]."\",
                        \"" . $value["intitule"]."\")";
                        $ret = mysql_query ( $sql ) or die ("Erreur ajout de question $sql");
                        $equivalence[$id] = mysql_insert_id ( $db );
                }
                foreach ( $reponses_sav as $id => $value )
                {
                        $sql = "INSERT INTO reponses (test, label, conditions, scores, question, intitule) VALUES 
                        (\"".$_SESSION["test_id"]."\", \"".$value["label"]."\", \"".$value["permissions"]."\",\"".$value["scores"]."\", ".$equivalence[$value["question"]].",
                        \"".$value["intitule"]."\")";
                        $ret = mysql_query ( $sql ) or die ("Erreur ajout de reponse $sql");
                }
                        $_SESSION["test_en_cours"] = 1;
                        echo "<i>Insertion dans la base de donnee, sans soucis !</i>";
                }


Avatar de Junk
Junk - 20 janvier 2010 - 22:52:36

Il y a pas de regexp, en PHP? parce que la fonction alphanum, elle pique, non?


Avatar de mansuetus
mansuetus - 21 janvier 2010 - 00:47:24

Si, REGEXP existe… ... mais je ne connaissais pas ^^



Ajouter un post

Vous pourrez poster une réponse quand vous serez loggué
se connecter ou créer un compte