[RESOLU] aide post

Petit nouveau ! | 9 Messages

13 mai 2022, 19:52

bonjour,

je viens vers vous car je débute dans le code aprés des heures et des heure de tuto, wiki j'avance doucement dans mon projet.
j ai un petit problème et je demande votre aide qui je pense sera résolue assez rapidement.
j'ai créé un tableau avec datatables en serverside tout fonctionne trés bien.
mon probleme c'est que je voudrais avoir un bouton pour faire un Bon de livraison en pdf j utilise HTML2PDF.
je suis au point ou quand je click sur le bouton imprimante il me renvoie les variables de mon POST_ID de mon tableau sql.
mais je ne sais pas comment les renvoyer en post vers une autre page php.

Code : Tout sélectionner

<?php include('db.php'); include('functions.php'); if (isset($_POST["post_id"])) { $idPost = $_POST["post_id"]; $result = get_Post_By_Id($idPost); $output = array(); if (count($result) > 0) { foreach ($result as $row) { $output["ndossier"] = $row["ndossier"]; $output["titre"] = $row["titre"]; $output["transporteur"] = $row["transporteur"]; $output["tirage"] = $row["tirage"]; $output["enlevement"] = $row["enlevement"]; $output["fabricant"] = $row["fabricant"]; $output["grammage"] = $row["grammage"]; } } echo json_encode($output); };

voici ma page php qui récupère mes variables.
je cherche a les renvoyer vers une autre pages php.
merci pour votre aide
je continue a chercher #-o

Mammouth du PHP | 2178 Messages

13 mai 2022, 21:20

pourquoi renvoyer vers une autre page ?
le script qui génère le pdf peut tout à fait aussi récupérer les données dans la base de données.

Petit nouveau ! | 9 Messages

14 mai 2022, 08:45

alors quand je dis renvoyer a une autre page, je me suis peut être pas bien expliqué.
pour l'instant j'ai mon tableau comme ceci:
ibb .co/phXc2Rb ( je ne peut pas poster l UR complet le forum ne me le permet pas )
les deux premier buttons sont pour l'Edition et la suppression, et le 3eme je cherche a créé un bl avec avec les variables en prenant l'id de la ligne.
mon idée était au click récupérer les variables vers un fichier php (celui ci écrit plus haut) pour les envoyer vers mon fichier bl.php.
après ce n'est peut être pas la bonne façon, mais je ne vois pas comment faire pour que au clic le PDF sélection dans la bdd avec l id de la ligne clické.

Mammouth du PHP | 2178 Messages

14 mai 2022, 15:10

le lien du 3ème bouton est quelque chose comme
<a href="bl.php?id=$id">bl</a>

dans le fichier bl.php, les données sont récupérées avec :
$result = get_Post_By_Id($id);
puis le pdf est généré.

Petit nouveau ! | 9 Messages

14 mai 2022, 19:25

oui j'ai un button comme ceci

Code : Tout sélectionner

$btn_print = '<button id="' . $p['idPost'] . '" name="print" class="btn btn-link btn-success btn-just-icon print"><i class="material-icons" class="print" >print</i></button>';
je n 'avais pas mis le href.
et avec le

Code : Tout sélectionner

$result = get_Post_By_Id($idPost);
je vais récupéré tout mes variables de la ligne de l'id directement dans mon bl.php?

Petit nouveau ! | 9 Messages

15 mai 2022, 08:49

alors j 'ai essayé ceci dans mon tableau:

Code : Tout sélectionner

// test pour impression $(document).on('click', '.print', function() { var post_id = $(this).attr("id"); $.ajax({ url: "../pdf/examples/example07.php", method: "POST", data: { post_id: post_id }, dataType: "json", }) });
et ce code a la base de ma page PDF:

Code : Tout sélectionner

<?php function get_Post_By_Id($idPost) { $bdd=new PDO ('mysql:host=localhost;dbname=firmin;charset=utf8','root',''); $statement = $bdd->prepare("SELECT * FROM post WHERE idPost = '" . $idPost . "' LIMIT 1"); $statement->execute(); $result = $statement->fetchAll(); return $result; } if (isset($_POST["post_id"])) { $idPost = $_POST["post_id"]; $result = get_Post_By_Id($idPost); $output = array(); if (count($result) > 0) { foreach ($result as $row) { $output["ndossier"] = $row["ndossier"]; $output["titre"] = $row["titre"]; $output["transporteur"] = $row["transporteur"]; $output["tirage"] = $row["tirage"]; $output["enlevement"] = $row["enlevement"]; $output["fabricant"] = $row["fabricant"]; $output["grammage"] = $row["grammage"]; } } echo json_encode($output); }; ?>
alors au click j'ai bien un post_id, mais il m'ouvre pas la page du pdf.
j'ai juste un post avec une réponse incompréhensible.

Mammouth du PHP | 2178 Messages

15 mai 2022, 09:22

un appel ajax n'est pas la bonne solution. il faut ouvrir une nouvelle url comme c'est fait lorsque l'on met un lien. il est possible de conserver votre bouton et se compliquer la vie avec du javascript, mais en appelant une url au lieu de cet appel ajax.

dans le code qui génère le pdf, passer par du json est inutile, les données sont dans le tableau. comme il y a un limit 1 (qui est superflu si l'id est bien unique), un simple fetch est une meilleure idée qu'un fetchall. ainsi, l'on peut faire :

$post = get_Post_By_Id($idPost);
echo $post['titre'];

le code de connexion à la bdd ne devrait pas être dans la fonction get_Post_By_Id.
si l'on fait :
echo get_Post_By_Id(1)['titre'];
echo get_Post_By_Id(2)['titre'];
cela va exécuter 2 fois la connexion à la base de données, dont une fois inutilement. s'il y a ce code dans toutes les fonctions analogues, le jour où il y a quelque chose à modifier, il n'y a pas à faire le changement à un seul endroit.

Petit nouveau ! | 9 Messages

15 mai 2022, 10:25

merci pour ta patience :D
alors j ai donc changer mon bouton comme ceci:

Code : Tout sélectionner

$(document).on('click', '.print', function() { var post_id = $(this).attr("id"); window.open('../pdf/examples/example07.php'); });
il m'ouvre bien une nouvelle page avec mon bl.
mais comment je peut maintenant envoyer mon $id_post en java? (je débute)

Mammouth du PHP | 1014 Messages

15 mai 2022, 11:07

java de broadway ? c'est js ou javascript, java n'est pas le même langage ;)

Au passage, la nomenclature PHP veut qu'on nomme les méthodes (les fonctions des classes) en camel case, sans undescore ;) autant si prendre dès le début pour bien faire :)

ma_Fonction = maFonction

Petit nouveau ! | 9 Messages

15 mai 2022, 15:18

oui en js, merci pour tes remarques.

Mammouth du PHP | 1014 Messages

15 mai 2022, 23:36

Je rejoins or1, l'utilisation du JS est inutile pour aller vers un lien, la balise HTML "a" fera très bien l'affaire.

Si tu souhaite continuer en JS, rajoute l'id du "post_id" en le concaténant à l'URL qui se trouve dans window.open.

https://developer.mozilla.org/fr/docs/W ... /Element/a
https://stackoverflow.com/questions/258 ... javascript

Petite info supplémentaire pour ton code PHP :
if (count($result) > 0) {
foreach ($result as $row) {
$output["ndossier"] = $row["ndossier"];
$output["titre"] = $row["titre"];
$output["transporteur"] = $row["transporteur"];
$output["tirage"] = $row["tirage"];
$output["enlevement"] = $row["enlevement"];
$output["fabricant"] = $row["fabricant"];
$output["grammage"] = $row["grammage"];
}
}
echo json_encode($output);
};
> le foreach est inutile vue que tu fais un LIMIT 1
> $output = $row; suffira pour assigner toutes les variables en une seule fois
> }; = } (en PHP, la virgule ne s'utilise pas après une accolade)

Petit nouveau ! | 9 Messages

16 mai 2022, 20:10

merci a vous deux.
je m'en suis finalement sorti avec un peu de recherche aussi :)
j'ai transformer mon Button comme ceci:

Code : Tout sélectionner

$(document).on('click', '.print', function() { var post_id = $(this).attr("id"); window.open ("../pdf/examples/BL-Firmin.php?post_id="+ post_id, "_blank"); });
et la page PDF comme ceci:

Code : Tout sélectionner

function get_Post_By_Id($idPost) { $statement = $bdd->prepare("SELECT * FROM post WHERE idPost = '" . $idPost . "' LIMIT 1"); $statement->execute(); $result = $statement->fetchAll(); return $result; } if (isset($_GET["post_id"])) { $idPost = $_GET["post_id"]; $result = get_Post_By_Id($idPost); $output = array(); if (count($result) > 0) { foreach ($result as $row) { $output = $row; } } } $newdate=date('d-m-Y', strtotime($output['enlevement']))
je n'arrivais pas a récupérer mes variables, j avais mis $_POST au lieu de $_GET, mais sur hmtl2pdf le debug est plus difficile #-o .
merci de m avoir guidé dans le droit chemin.
vous pouvez mettre le post en résolu

Mammouth du PHP | 1014 Messages

16 mai 2022, 21:04

C'est à toi de mettre en Résolu ;)

Petite remarque, la requête est sujette à l'injection SQL (faille SQL). N'importe qui pourrait modifier l'attribut id de l'élément HTML qui a la classe .print

Voir "injections SQL"

Je me répète, ton foreach sert à rien, "$output = $result" devrait faire l'affaire.

Petit nouveau ! | 9 Messages

16 mai 2022, 21:40

après ce sera en localhost donc "injections SQL" ...
aprés je vais tester en enlevant le foreach..
je suis nouveau d=sur le forum comment mettre en résolu?

Mammouth du PHP | 2178 Messages

16 mai 2022, 21:52

je suis nouveau d=sur le forum comment mettre en résolu?
" je m'en suis finalement sorti avec un peu de recherche aussi "