IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Insérer valeur récupérée en get dans base de données


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    Par défaut Insérer valeur récupérée en get dans base de données
    Bonjour,

    Je récupère ma valeur en get dans mon url https://www.xxxxxxx/inscription.php?id_pros=54351 soit https://www.xxxxxxx/inscription.php?id_pros=$id_pros depuis une page d'inscription et sur ma nouvelle page https://www.xxxxxxx/inscription2.php, je souhaite faire un enregistrement de cette variable récupérée en get dans ma table publications mais je n'y arrive pas alors que le contenu de ma variable s'affiche bien sur ma page. Lorsque je fais l'insertion dans ma table, j'ai un 0 à la place de la valeur de la variable qui devrait être 54351 dans ce cas.

    Voici mon code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php 
    include 'connect.php';
     
    $id_pros = $_GET['id_pros'];
    echo 'pros ici :';
    echo $id_pros;
     
    if(isset($_POST['upload']))
    {
    	foreach($_POST['code_publi'] as $code_publi) 
    	{
    		$cSql = "INSERT INTO publications VALUES ('','".$code_publi."','".$id_pros."', NOW())";
    		mysql_query($cSql) or die(mysql_error());
    }
     
    	mysql_close();						 
     
    }
    ?>

    Merci beaucoup pour votre aide

  2. #2
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    bonjour,

    1- il faudrait connaitre la structure de la table (surtout format des champs) pour en dire plus.
    ....."','".$id_pros."', ...... : ici, tu mets des guillemets autour, ce qui en fait une "chaine".
    Si le format est INT dans la table, ça ne va pas.

    2- tu peux/dois passer la données en POST via un <input type="hidden" />.
    Sinon, n’importe qui peut modifier la valeur dans l'URL.

    3- mysql_ est OBSOLÈTE depuis belle lurette.
    IL faut utiliser mysqli_ ou mieux : PDO.

    4- même avec mysql_, ON NE PASSE JAMAIS DIRECTEMENT des données dans les requêtes !!

  3. #3
    Membre confirmé
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    Par défaut
    Merci Jreaux62
    J'avais un int dans ma table pour le champ
    id int(11) Incrément automatique
    code_publication varchar(50)
    id_pros varchar(50)
    date_maj date

    Je l'ai modifié par un varchar, rien ne s'affiche mais je n'ai plus le 0. Et j'ai rajouté le champ hidden

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="id_pros" value="<?php echo $_POST['id_pros']; ?>">
    Mais je ne récupère pas toujours pas le contenu.

  4. #4
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    AVEC :
    • id INT(11) Incrément automatique
    • code_publication VARCHAR(50)
    • id_pros INT(11) -> si c'est un identifiant numérique, il faut INT, pas VARCHAR
    • date_maj DATE


    Ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php 
    include 'connect.php';
     
    if(isset($_POST['upload']) && !empty($_POST['id_pros']) && !_POST($_GET['code_publi']) )
    {
    	foreach($_POST['code_publi'] as $code_publi) 
    	{
    		$cSql = "INSERT INTO publications VALUES (NULL,'".mysql_real_escape_string($code_publi)."',".mysql_real_escape_string($id_pros).", NOW())";
    		mysql_query($cSql) or die(mysql_error());
    	}
    	mysql_close();
    }
    ?>
    • VALUES (NULL,.... : car id est auto-incrémenté (= il sera automatiquement incrémenté)
    • VALUES (0,.... fonctionne aussi.

  5. #5
    Membre confirmé
    Femme Profil pro
    Webmaster
    Inscrit en
    Novembre 2014
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Novembre 2014
    Messages : 60
    Par défaut
    Bonjour et merci beaucoup pour votre aide,
    Désolée de revenir si tardivement.

    Je n'ai pas réussi à récupérer ma variable $id_pros en $_POST ou $_SESSION, je n'y arrive qu'en rajoutant la variable dans l'url de mon script d'inscription, en GET, pas top mais j'ai essayé de sécuriser plus ou moins en attendant.

    Lors de la soumission de mon formulaire, l'insertion dans la base se fait mais je n'arrive toujours pas à insérer la valeur de ma variable $id_pros, elle reste à 0. Je ne vois pas comment la récupérer, je l'affiche bien début de page mais après je la perds. Est-ce qu'il faut que je fasse autrement au moment du foreach pour pouvoir l'insérer ?

    Voici mon code et merci beaucoup pour votre aide précieuse

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <?php 
    session_start();
     
    $id_pros = !empty($_GET['id_pros']) ? $_GET['id_pros'] : 0;
     
    $id_pros = $_GET['id_pros'];
    $id_pros = strip_tags($id_pros);
    $id_pros = stripslashes($id_pros);
    $id_pros = trim($id_pros);
     
     
    include 'con.php';
     
    echo "Pros1: ".$id_pros;
     
     
    if(isset($_POST['upload']))						
    {
     
    mysql_query("SET NAMES UTF8");
     
    			foreach($_POST['code_publi'] as $code_publi) {
     
    				$cSql2 = "INSERT INTO demande_publi VALUES ('','".mysql_real_escape_string($code_publi)."','" . mysql_real_escape_string($id_pros) . "', NOW())";
    				mysql_query($cSql2) or die(mysql_error());
     
    				$cSql5 = "UPDATE documentation SET qte_demande=qte_demande+1 WHERE code_publication_doc='".$code_publi."'";
     
    				mysql_query($cSql5) or die(mysql_error());	
     
    			}
     
    		  $exp = "xxxxxxxxx"; 
    		  $dest = 'xxxxxxxxxxxxxx';
    		  $entete .= 'From: ''< '.$exp.'>'."\n";
    		  $message .= "Demande de doc"."\n\n";
    		  $message .= "Email : ".$_POST['email']."\n\n";
    		  $message .= "Object : ".$_POST['objet']."\n\n";
    		  $message .= "\n\n";
    		  $message = utf8_decode($message); 		  
     
     
    		  if(mail($dest, $_POST['objet'], $message, $entete))
    		  {
    			echo "<br />";
    			echo"\n\n"; 
    			echo "<SCRIPT LANGUAGE=\"JavaScript\">document.location.href=\"xxxxxxxxxxxxxx\"</SCRIPT>";
    		   }
     
     
    	if ($data1[0] == 0) 
    	{
                session_start();
                $_SESSION['id_pros' ] = $data['id_pros'];            
                $_POST['login']    = $_POST['email'];
                $_POST['password'] = $_POST['password'];
                include "lo.php";
               	exit();
        }
     
    	mysql_close();						 
    }
     
    ?>

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cSql2 = "INSERT INTO demande_publi VALUES ('','".mysql_real_escape_string($code_publi)."','" . mysql_real_escape_string($id_pros) . "', NOW())";
    Ici rien ne dit que $id_pros tombe dans la bonne colonne. Du coup tu te retrouves peut-être avec une valeur par défaut à 0.

    Je te conseille de nommer systématiquement les colonnes utilisées par le INSERT. Cela permet d'être sûr de l'affectation et de faire évoluer ta table plus tard sans encombres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $code_publi = mysql_real_escape_string($code_publi);
    $id_pros = mysql_real_escape_string($id_pros);
    $sql = <<<SQL 
        INSERT INTO demande_publi
        SET
            colonne_code_publi = {$code_publi},
            colonne_id_pros = {$id_pros},
            colonne_timestamp = NOW()
        SQL;
    Ou avec la syntaxe traditionnelle (mais illisible) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $code_publi = mysql_real_escape_string($code_publi);
    $id_pros = mysql_real_escape_string($id_pros);
    $sql = <<<SQL 
        INSERT INTO demande_publi (colonne_code_publi, colonne_id_pros, colonne_timestamp)
        VALUES ({$code_publi}, {$id_pros}, NOW())
        SQL;

  7. #7
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cSql = "INSERT INTO publications VALUES ('','".$code_publi."','".$id_pros."', NOW())";
    Tu ne nommes pas les colonnes où les valeurs seront placées : INSERT INTO publications (code_publication, id_pros, ...) VALUES (...)

    Il est probable que ta colonne id_pros se retrouve non valorisée et qu'une valeur par défaut soit affectée.

    Comme le dit jreau il faut oublier mysql_, utilise plutôt PDO et pense à bien échapper tes valeurs avec PDO::quote(), ça donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql = <<<SQL
        INSERT INTO publications
        SET
            code_publication = {$pdo->quote($code_publi)},
            id_pros = {$pdo->quote($id_pros)}, -- Là on est sûr que $id_pros est bien affecté au bon endroit
            date_maj = NOW()
        SQL;
     
    echo "DEBUG : <pre>{$sql}</pre>";
     
    $pdo->query($sql);

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 313
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 313
    Billets dans le blog
    17
    Par défaut
    J'avais un int dans ma table pour le champ
    ...
    Je l'ai modifié par un varchar
    Pourquoi ? Si les valeurs id_pros sont des entiers il n'y a pas de raison de transformer ta colonne en VARCHAR.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insérer valeur dans base de données JBDC
    Par Mrlaurent90 dans le forum JDBC
    Réponses: 19
    Dernier message: 30/01/2011, 21h41
  2. insérer valeur d'une cellule dans un lien
    Par joniyyy dans le forum Excel
    Réponses: 3
    Dernier message: 17/01/2009, 18h05
  3. Réponses: 10
    Dernier message: 28/06/2007, 15h27
  4. insérer image dans base de données
    Par eriz dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 16/04/2007, 12h03
  5. Insérer Enregistrement dans Base de données
    Par TurricanII dans le forum JBuilder
    Réponses: 3
    Dernier message: 30/05/2006, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo