Envoi formulaire

Fermé
Tintin - Modifié le 10 oct. 2021 à 01:31
jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 - 13 oct. 2021 à 15:42
Salut, j'ai un problème, j'espère que tu peux m'aider, le code du formulaire, chaque fois qu'un membre envoi le formulaire, j'aimerais introduire le $_session[id] du tableaux user (déjà inscrit) pour que je vois qui a envoyé cette formulaire qui vas apparetre dans un autre tableau formulaire

Code:
<?php
session_start();
$bdd = new PDO('mysql:host=localhost;dbname=basedonnee', 'root', '');
if(!$_SESSION['tex']){
    header('Location: text.php');
}

if(isset($_POST['submit'])){
  if(!empty($_POST['nom']) AND !empty($_POST['email']) AND !empty($_POST['text1']) AND !empty($_POST['text2']) AND !empty($_POST['text3']) AND !empty($_POST['text4'])){
    $nom = htmlspecialchars($_POST['nom']);
    $email = htmlspecialchars($_POST['email']);
    $text1 = htmlspecialchars($_POST['text1']);
    $text2 = htmlspecialchars($_POST['test2']);
    $text3 = htmlspecialchars($_POST['test3']);
    $text4 = htmlspecialchars($_POST['test4']);

    $insererTransaction = $bdd->prepare('INSERT INTO table1(nom, email, text1, test2, test3, test4) VALUES(?, ?, ?, ?, ?, ?)');
    $insererTransaction->execute(array($nom, $email, $text1, $test2, $test3, $test4));

    $succes = "lablablablablablabla ";
  }else{
    $erreur = "lablablablablablabla";
  }
  if(isset($_FILES['file'])){
      $tmpName = $_FILES['file']['tmp_name'];
      $name = $_FILES['file']['name'];
      $size = $_FILES['file']['size'];
      $error = $_FILES['file']['error'];

      $tabExtension = explode('.', $name);
      $extension = strtolower(end($tabExtension));

      $extensions = ['jpg', 'png', 'jpeg', 'gif'];
      $maxSize = 400000;

      if(in_array($extension, $extensions) && $size <= $maxSize && $error == 0){

          $uniqueName = uniqid('', true);

          $file = $uniqueName.".".$extension;
          
          move_uploaded_file($tmpName, './upload/'.$file);

          $req = $bdd->prepare('INSERT INTO table1 (name) VALUES (?)');
          $req->execute(array($name));

          echo "";
      }
      else{
          echo "";
      }
  }  
  
}
?>

<!DOCTYPE html>
<html lang="pt">

   <meta charset="utf-8">

</head>


    <section id="container">

        <header class="header black-bg">
            <!--logo start-->
            <a href="index.php" class="logo"><b>text<span>text</span></b></a>
            
        </header>
        
                      <?php
                      if(isset($succes)) {
                      echo '<font color="blue">'.$succes."</font>";
                      }
                      ?>
                      <?php
                      if(isset($erreur)) {
                      echo '<font color="red">'.$erreur."</font>";
                      }
                      ?>
                      <hr>
                      <form method="POST" action="" enctype="multipart/form-data">
                        <div class="top-margin">
                 <label>nom completo <span class="text-danger">*</span></label>
                 <input type="text" name="nom" class="form-control">
                   </div>
                   <br />
                   <div class="top-margin">
                 <label>Email <span class="text-danger">*</span></label>
                 <input type="email" name="email" class="form-control" value="<?php if(isset($mail)) { echo $mail; } ?>" />
                   </div>
                   <br />
                        <div class="row top-margin">
                          <div class="col-sm-6">
                            <label>Endereço da test4<span class="text-danger">*</span></label>
                            <input type="text" name="text1" class="form-control">
                          </div>
                          <div class="col-sm-4">
                            <label>test2 <span class="text-danger">*</span></label>
                            <input type="text" name="test2" class="form-control" value="">
                          </div>
                        </div> 
                        <br /><br />           
                        <div class="row top-margin">
                          <div class="col-sm-3">
                            <label>test3(kzs) <span class="text-danger">*</span></label>
                            <input type="number" name="test3" class="form-control" value="">
                          </div>
                          <div class="col-sm-3">
                            <label> compravativo <span class="text-danger">*</span> </label>
                            <input type="file" name="file" />
                          </div>
                        </div>
                        <br /><br />  
                        <div class="row top-margin">
                          <div class="col-sm-6">
                            <label>test4 <span class="text-danger">*</span></label>
                            <select select name="test4" required>
                              <option selected hidden value=""></option>
                              <option value="btc">BTC</option>
                              <option value="bnb">BNB</option>
                              <option value="trx">TRX</option>
                              <option value="xlm">XLM</option>
                              <option value="usdt-tcr20">USDT-TRC20</option>
                            </select>
                          </div>
                        </div> 
                        <br />
                          <div class="panel-footer">
                              <input value="Submit" type="submit" name="submit" name="file" class="btn btn-primary pull-right">
                          </div>
                        </div>
                      </form>
                    </div>
                  </div>
                </div>
            
          
</body>
</html>


Message modifié par la modération
Pour une lecture plus facile du code, à l'avenir utilisez les balises, VOIR CETTE PAGE

4 réponses

jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675
10 oct. 2021 à 09:25
Bonjour
Ok. Et quel est le souci ?
Qu'as tu essayé ? Sur quoi bloques tu ?

0
Je besoin d'aide, quand un user envois le formulaire, il peut changer de nom ou autre donnée pour se faire passer pour quelqu'un d'autre, j'aimerais que quand un user(enregistré dans la table user) envoi le formulaire son id ou son pseudo soit signaler sans qu'il est nécessaire de répète dans un autre tableau y, pour me permettre de récupérer les données du user et la ficher pour chaque user
0
Et le la partie de l'envoi du fichier, dans la table, il se créer un autre id, on dirait la même personne envoi deux formulaires en même temps, un avec le donnée nom etc... Mais sens le file, et un autre avec le file mais sans les informations, c'est un peu en désordre, j'aimerais harmoniser le code
0
jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675 > Tintin
11 oct. 2021 à 11:37
Pour ce souci, c'est lié à tes requêtes...
Tu fais deux fois un INSERT. ..

Soit tu revois ton code pour ne faire qu'un seul INSERT
Soit tu modifies la seconde requête pour faire un UPDATE

Moi je partirai sur une seule requête .. comme ceci
<?php

//démarrage SESSIONS
session_start();

//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//Redirection si l'utilisateur n'est pas connecté
if (!$_SESSION['tex']) {
  header('Location: text.php');
  exit;
}

//connexion à la bdd + activation des éventuelles erreurs PDO
// voir ce lien : https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
try {
  $bdd = new PDO('mysql:host=localhost;dbname=basedonnee', 'root', '');
// Activation des erreurs PDO
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
  die('Erreur : ' . $e->getMessage());
}

//récupération "propre" des variables AVANT de les utiliser
//l'instruction htmlspecialcharsne s'utilise que pour de l'affichage... jamais pour "protéger" les variables avant insertion en bdd !!
//A la place, on utilisera du ternaire
$nom = !empty($_POST['nom']) ? $_POST['nom'] : NULL;
$email = !empty($_POST['email']) ? $_POST['email'] : NULL;
$text1 = !empty($_POST['text1']) ? $_POST['text1'] : NULL;
$text2 = !empty($_POST['text2']) ? $_POST['text2'] : NULL;
$text3 = !empty($_POST['text3']) ? $_POST['text3'] : NULL;
$text4 = !empty($_POST['text4']) ? $_POST['text4'] : NULL;

if (isset($_POST['submit'])) {
  //on vérifie les champs obligatoires
  if ($nom && $email) {

    $filePath = "";
    if (isset($_FILES['file'])) {
      $tmpName = $_FILES['file']['tmp_name'];
      $name = $_FILES['file']['name'];
      $size = $_FILES['file']['size'];
      $error = $_FILES['file']['error'];

      $tabExtension = explode('.', $name);
      $extension = strtolower(end($tabExtension));

      $extensions = ['jpg', 'png', 'jpeg', 'gif'];
      $maxSize = 400000;

      if (in_array($extension, $extensions) && $size <= $maxSize && $error == 0) {
        $uniqueName = uniqid('', true);
        $file = $uniqueName . "." . $extension;
        if (!move_uploaded_file($tmpName, './upload/' . $file)) {
          echo "Erreur lors du chargement du fichier :" . $file;
        } else {
          $filePath = './upload/' . $file;
        }
      }
    }
    //préparation de la requête et des variables
    $sql = 'INSERT INTO table1(nom, email, text1, test2, test3, test4,name) VALUES(?, ?, ?, ?, ?, ?,?)';
    $datas = array($nom, $email, $text1, $test2, $test3, $test4, $filePath);
    //Execution de la requete
    try {
      $requete = $bdd->prepare($sql);
      $requete->execute($datas);
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }

    $result = "Success !!!";
  } else {
    $result = "Merci de remplir tous les champs obligatoires";
  }

  echo $result;
}
?>
0
Tintin > jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024
11 oct. 2021 à 20:49
Merci pour le code, le file et le formulaire sont bien aligné dans la table, ????


Mon plus grand souci c'est avec l'insert into ( j'aimerais que quand quand un user envoi le formulaire, son userId s'affiche dans la table 2 par exemple, para prêt, me donner la possibilité de récupérer les données du user, savoir qui envoie, comme la transaction, récupérer et en faire comme un historique de user par apport à son session[id] ou quelque chose tu me conseilles,

Exemple: quand quelqu'un envoie le formulaire (réf: de mon petit code en base) avec le session[id] dans la table son id dans la table user, apparaît dans la table 2, j'arrive pas à l'adapter à l'autre formulaire????help jordan

Je ne sais pas si tu me comprends bien

<Input type="hidden" name="userId" >
<Textarea name="text" ></textarea>

<?PHP
If (isset($_POST['submit']))
{
if ($con->query("insert into table2 (text,userId) values ('$_POST[text]','$_POST[userId]')")){
écho
}else
écho
}
?>
0
jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675 > Tintin
11 oct. 2021 à 20:52
Si la variable se trouve déjà en session, tu n'as pas besoin de passer par un input hidden.
Et il te suffit de l'ajouter dans ta requête insert...

C'est vrai que ton français est compliqué à comprendre... Si au moins tu essayais de coder toi-même puis de nous montrer ce que tu as fait nous pourrions éventuellement t'aider à le corriger.
0
Je parle la langue portugaise


Je suis à cours d'idée, je ne sais pas comment te faire comprendre, je veux te donner un exemple:

Dans un site web de e-commerce par exemple, quand un user fait une commande,
Deux table:
Table 1: (ou il y a les données du user quand il a fait l'inscription, id, nom, pseudos etc...)

Table 2: (ou vont les données du user quand il fait la commande, id_table2, adresse, montant etc... Et le userId qui se référe au session[id], en quelques sorte le userId SELECT INTO table1 )

Pour après, pouvoir récupérer les Données du table 2, et afficher pour le user avec l'id=1 par exemple
C'est possible?
0
jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675
Modifié le 11 oct. 2021 à 23:57
Je suis à cours d'idée, je ne sais pas comment te faire comprendre,

La réciproque est vraie ...

Tu nous parles du session[id] .. donc ... on peut partir du principe que :
- Ton utilisateur est déjà identifié
- Tu as stocké son id dans une variable de session.


quand un user envoi le formulaire, son userId s'affiche dans la table 2

Donc tu fais une requête INSERT dans ta table 2 et tu utilises le contenu de ta variable de session pour connaitre l'id de l'utilisateur...

Je vais te donner ce à quoi devrait ressembler ton code .. sinon je pense qu'on va y passer la semaine ...

Donc :
<?php
session_start(); // démarrage session à placer au début de chacun de tes scripts php


//récupération de l'id qui se trouve en session
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;

// récupération variable post
$text = !empty($_POST['text']) ? $_POST['text'] : NULL;

 //préparation de la requête et des variablesnsert 
    $sql = 'INSERT INTO table2(text,userId) VALUES(?, ?)';
    $datas = array($text,$id);
    //Execution de la requete
    try {
      $requete = $bdd->prepare($sql);
      $requete->execute($datas);
    } catch (Exception $e) {
      // en cas d'erreur :
      echo " Erreur ! " . $e->getMessage();
      echo " Les datas : ";
      print_r($datas);
    }
0
Je voulais d'abord te remercier pour ton aide et la patience que t'as????

Je veux tenter être explicite:
J'ai table membre ou il y a des utilisateurs enregistrés (comme donnée, nom, pesudo, user_id etc...)

Et la table 2 ou les membre peuvent envoyer le formulaire (avec comme donnée, txt1, userId etc...)

Quand un membre accéder au page formulaire et qu'il envoi, je veux lié les deux table membre et table 2, le userId du table membre et table 2 soit la même,

Select into membre where userId = session[id]

Regarde ce code, le problème dans la base de données je reçois rien

<?php
session_start();
$bdd = new PDO('mysql:host=localhost;dbname=bdata', 'root', '');
if(!$_SESSION['id']){
header('Location: page.php');
}
if(isset($_SESSION['id'])){
$requser = $bdd->prepare("SELECT * FROM tb_user WHERE userId = ?");
$requser->execute(array($_SESSION['id']));

if(isset($_POST['submit'])){
if(!empty($_POST['nome']) AND !empty($_POST['email']) AND !empty($_POST['text1']) AND !empty($_POST['text2']) AND !empty($_POST['text3'])){
$nome = htmlspecialchars($_POST['nome']);
$email = htmlspecialchars($_POST['email']);
$text1 = htmlspecialchars($_POST['text1']);
$text2 = htmlspecialchars($_POST['text2']);
$text3 = htmlspecialchars($_POST['text3']);
$userId = htmlspecialchars($_POST['userId']);


$insererTransaction = $bdd->prepare('INSERT INTO transactionv(nome, email, text1, text2, text3, userId) VALUES(?, ?, ?, ?, ?, ?)');
$insererTransaction->execute(array($nome, $email, $text1, $text2, $text3, $userId, $_SESSION['id']));

$succes = " bien envoyer <a href=\"http://google.com\">Proceguir </a>";
}else{
$erreur = "veuillez completer tous les champs";
}
}
}
?>
0
jordane45 Messages postés 38201 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2024 4 675
13 oct. 2021 à 15:42
Quand tu postes du code sur le forum, tu dois utiliser les BALISES DE CODE.
Explications ( à lire entièrement !!!) disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Ensuite :
A quoi ( ou qui devrais-je dire) correspond la valeur contenue dans le champ : $_POST['userId']
A qui correspond la valeur contenue dans la variable de session $_SESSION['id'] ?
C'est le même id... ou l'id de deux utilisateurs différents ?


Et enfin,
Comme tu fais du PDO, il faudra activer l'affichage des erreurs PDO dans ta connexion et placer CHAQUE requête dans un bloc try/catch
Voir explications ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Reviens nous voir avec le code modifié et les réponses aux questions que je viens de te poser...
0