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 :

variable non prise en compte dans un INSERT php mysql


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de zool.bzh
    Homme Profil pro
    peintre industriel
    Inscrit en
    Octobre 2023
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : peintre industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2023
    Messages : 123
    Par défaut variable non prise en compte dans un INSERT php mysql
    Bonjour
    j'ai un problème de varible voici mon code expliqué:
    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
    <script type="text/javascript">
     
    function resolution() {
     
      document.location="<?php echo $_SERVER['PHP_SELF']; ?>?width="+screen.width+"&height="+screen.height;
     
    }
     
    </script>
     
    <?php
     
    if(!isset($_GET['width']) and !isset($_GET['height'])){
        echo "<script> resolution();</script>";
        }else{
     
        $data = $_GET['width'] . '*' . $_GET['height'];
      }
     
    $pdo = new PDO('mysql:host=ip;dbname=db', 'id', '****');
     
    $ip =  $_SERVER['REMOTE_ADDR'];
     
    $trik = $pdo -> prepare("SELECT * FROM conf");
    $trik-> execute();
    $pluk = $trik -> fetchAll();
     
    $tem = 0;
    //temoin a zero
     
    foreach ($pluk as $ray){
     
     
     
      if($ray['ip']==$ip){
     
    //si l'ip est deja dans la base :
    	$tem=1;
    //sinon $tem = 0 pour inserer la base
        }
    }
     
    //ma reolution s'affiche
    echo $data; 
     
    if ($tem==0){
     
    	$trok = $pdo -> prepare("INSERT INTO conf (ip, reso) VALUES ('$ip', '$data')");
        $trok-> execute();
    //$data n'est pas prise en compte alors que sip, si
          }
    ?>
    Que feriez-vous pour $data soit prise en compte ?

    ma table :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [CREATE TABLE `conf` (
      `ip` varchar(255) NOT NULL,
      `reso` varchar(255) NOT NULL,
      `id` int(11) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
     
    --
    -- Déchargement des données de la table `conf`
    --
     
    INSERT INTO `conf` (`ip`, `reso`, `id`) VALUES
    ('192.168.1.1', '234*345', 1),
    ('2a01:cb08:840e:f100:694a:df91:5654:2891', '1024*600', 2),  //ma résolution est répertoriée
    ('175.24.214.104', '', 3);   // toutes les autres sont nuls

  2. #2
    Membre chevronné
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 387
    Par défaut
    Bonjour,

    en effet votre code ne peut pas fonctionner comme vous semblez l'imaginer.

    Dans votre code, au premier affichage de la page,
    le script insère une ligne alors que le script ne connait pas déjà la résolution.
    Le script provoque une redirection côté client, via une fonction javascript.
    Lors de se second affichage, le script n’insérera pas la nouvelle ligne
    car une ligne avec cette ip existe déjà.

    Il me semble que vous tentez de faire de l'analytics, à confirmer,
    si tel est le cas, je ne saurais trop vous conseiller de vous tourner
    vers une solution open source.

    Autrement, quel que soit le besoin, il serait préférable de passer
    par une requête asynchrone javascript pour appeler le script
    d'insertion des informations.

    Plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript">
    function resolution() {
      document.location="<?php echo $_SERVER['PHP_SELF']; ?>?width="+screen.width+"&height="+screen.height;
    }
    </script>
    Vous auriez quelque chose tel que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
    var img = document.createElement("img");
    img.style.width="1px";
    img.style.height="1px";
    document.body.appendChild(img);
    img.src="/script pour insérer?width="+screen.width+"&height="+screen.height; 
    </script>
    Il est possible d'utiliser, à minima, les cookies de session pour éviter de multiples appels intempestif.

    Après il faut prendre garde à la valeur de $_SERVER['REMOTE_ADDR'] qui n'est pas de confiance.

    Il faudra aussi apprendre à utiliser des paramètres de requête sql, plutôt que de l'interpolation de variables.

    Finalement, il faut prendre le temps d'apprendre les possibilités offerte par SQL, notamment la fonction COUNT.

    tout un programme.

    Bonne journée.

  3. #3
    Membre confirmé Avatar de zool.bzh
    Homme Profil pro
    peintre industriel
    Inscrit en
    Octobre 2023
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : peintre industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2023
    Messages : 123
    Par défaut
    j'ai choisi la possibilité d'une image contre sa source pour avoir les valeurs dans l'url d'une manière asynchrone mais je ne comprend pas pourquoi ça ne fonctionne pas
    voici mon code :
    Code js : 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
    <script type="text/javascript">
    var img = document.createElement("img");
    img.style.width="1px";
    img.style.height="1px";
    document.body.appendChild(img);
    img.src="?width="+screen.width+"&height="+screen.height; 
    </script>
    <html>
    	<head>
        </head>
        <body>
     
    <?php 
       function get_ip_address() {
            if ( isset( $_SERVER['HTTP_X_REAL_IP'] ) ) {
               
             $ip= $_SERVER['HTTP_X_REAL_IP'];
           
             } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
                // Proxy servers can send through this header like this: X-Forwarded-For: client1, proxy1, proxy2
               
              $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];  // Make sure we always only send through the first IP in the list which should always be the client IP.
           
             } elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
               
              $ip =$_SERVER['REMOTE_ADDR'];
          
            }
    global $ip;
      }
       get_ip_address();
     
    if(isset($_GET['width']) and isset($_GET['height'])){
     
        $data = $_GET['width'] . '*' . $_GET['height'];
     
        } else { 
     
            echo "nodata";
     
        }
     
    echo $ip." ".$data;
     
    ?>
    </body><html>
    Pouvez-vous m'éclairer ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 387
    Par défaut
    Oui. En partant du principe qu'on démarre depuis http://le9emecercle.net/

    Vous vous assurez que ce bout de code JS est bien présent en bas de chaque page,
    dans la mesure où l'on souhaite un tracking exhaustif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
    var img = document.createElement("img");
    img.style.width="1px";
    img.style.height="1px";
    document.body.appendChild(img);
    img.src="/analytics.php?width="+screen.width+"&height="+screen.height; 
    </script>
    Vous allez rajouter un script analytics.php à la racine du site.

    Dans ce script, vous allez y mettre les instructions pour logger les paramètres d'affichage et d'ip.

    Code : 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
     
    <?php 
    session_cache_limiter('nocache');
     
    function get_ip_address() {
    	$ip = "";
    	$keys = ['HTTP_X_REAL_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'];
    	foreach( $keys as $key) {
    		if ( isset($_SERVER[$key]) ) {
    			$x = current(explode(",",$_SERVER[$key], 10));
    			$x = trim($x):
    			if(inet_pton($x)!==false) {
    				$ip = $x;
    				break;
    			}
    		}
    	}
    	return $ip;
    }
     
    $ip = get_ip_address();
     
    $data = "";
    if(isset($_GET['width']) && isset($_GET['height'])){
    	if (is_numeric($_GET['width']) && is_numeric($_GET['height'])) {
    		$data = $_GET['width'] . '*' . $_GET['height'];
    	}
    }
     
    if(strlen($ip)<1 || strlen($data)<1 {
    	exit;
    }
     
    $pdo = new PDO('mysql:host=ip;dbname=db', 'id', '****');
     
    $exists_query = $pdo->prepare("SELECT COUNT(ip) FROM conf WHERE ip=:ip");
    $ok = $exists_query->execute(['ip' => $ip]);
    if($ok===false) {
    	error_log("failed to select conf: {$exists_query->errorCode()} {$exists_query->errorInfo()}");
    	exit;
    }
    $exists_row = $exists_query->fetchAll();
    $exists = $exists_row[0][0]>0;
     
    if($exists) {
    	exit;
    }
     
    $insert_query = $pdo->prepare("INSERT INTO conf (ip, reso) VALUES (:ip, :data)");
    $ok = $insert_query->execute(['ip' => $ip, 'data'=>$data]);
    if($ok===false) {
    	error_log("failed to insert conf: {$insert_query->errorCode()} {$insert_query->errorInfo()}");
    	exit;
    }
    Je ne comprends pas trop cette table conf, mais bon, il me semble que les lignes devraient avoir une notion d'horodatage.

    Deux petites remarques au passage, dans view-source:http://le9emecercle.net/ Il y a un </head> perdu tel que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    </body>
      </head>
    </html>
    Vous avez mis une règle tel que width: 980; sur le body, il me semble que ce serait plus approprié de le mettre sur le .wrapper.

    * Notez que je ne l'ai pas testé, il y a probablement des coquilles.

    Bonne journée.

  5. #5
    Membre confirmé Avatar de zool.bzh
    Homme Profil pro
    peintre industriel
    Inscrit en
    Octobre 2023
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : peintre industriel
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2023
    Messages : 123
    Par défaut
    Encore merci

    Pour la table conf, elle me permet d'avoir des notions pour les configurations des mobile afin que la site soit adapté à toutes

  6. #6
    Membre chevronné
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 387
    Par défaut
    Vous pouvez utiliser ces références pour définir vos breakpoints css

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Breakpoint                Keyword        Dimension
    Small                          sm                  ≥576px
    Medium                    md                  ≥768px
    Large                          lg                    ≥992px
    Extra large                 xl                    ≥1200px
    Extra extra large       xxl                  ≥1400px
    Il y a peut être d'autres avis sur le sujet, vous pourrez toujours le corriger plus tard.

    Bonne journée.

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

Discussions similaires

  1. Variable non prise en compte dans l'url
    Par duffman39 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 20/10/2011, 16h33
  2. Variable non prise en compte dans un formulaire
    Par stomerfull dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2008, 14h36
  3. feuille de style non prise en compte dans un module
    Par Phenomenium dans le forum Zend Framework
    Réponses: 14
    Dernier message: 17/07/2008, 12h17
  4. Réponses: 1
    Dernier message: 08/08/2007, 11h26
  5. [MySQL] Variable pas prise en compte dans la requête
    Par Zenerox dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/04/2007, 21h54

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