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

Langage PHP Discussion :

Script PHP qui n'a aucun effet


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Script PHP qui n'a aucun effet
    Bonjour,

    Je ne comprends pas en quoi mon script ne fonctionne pas. Il permet de copier les attributs d'une bdd pour créer une page avec ces memes attributs dans une atre bdd ( un autre site drupal ) tout en testant si la page n'existe pas deja.

    Voici le code :

    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
     
    use Drupal\Core\DrupalKernel;
    use Symfony\Component\HttpFoundation\Request;
    use Drupal\node\Entity\Node;
     
    // base DANS laquelle on va copier les lignes
    $requete2 = $bddCRNL->prepare("SELECT nid FROM node"); // on récupère les id (déjà copiés)
    $res2 = $requete2->fetchAll();
     
    $list_ids = array();
    foreach($res2 as $row2){
     $list_ids[] = $row2['id'];
    }
    $list_ids = ( !empty($list_ids) )? implode( ',', $list_ids) : ''; //  les id (déjà copiés), séparés par des virgules
     
    // base de départ : on ne prend que les lignes non-existantes
    $requete3 = $bddDYCOG->prepare("SELECT * FROM node WHERE nid NOT IN (".$list_ids.")");   // (PAS dans les id déjà copiés)
    $res3 = $requete3->fetchAll();
     
    foreach($res3 as $row3){
    	$ajouter = "oui"; // FORCEMENT
    	// on ajoute .......
     	$autoloader = require_once 'autoload.php';
     
    					  $kernel = new DrupalKernel('prod', $autoloader);
     
    					  $request = Request::createFromGlobals();
    					  $response = $kernel->handle($request);
    					  $response->send();
     
    					$caracteristiques = $bddDYCOG->prepare("SELECT node.type, node__body.langcode, title, body_value, body_format FROM node, node__body, node_field_data WHERE node.nid=node__body.entity_id AND node_field_data.nid=nod.nid");
    					$carac = $caracteristiques->fetchAll();
     
    					  $node = Node::create([
    					  'type' => $carac['node.type'],
    					  'langcode' => $carac['node__body.langcode'],
    					  'created' => REQUEST_TIME,
    					  'changed' => REQUEST_TIME,
    					  'uid' => 1,
    					  'title' => $carac['title'],
    					  'body' => [
    					    'summary' => '',
    					    'value' => $carac['body_value'],
    					    'format' => $carac['body_format'],
    					  ],
    								]);
    					  $node->save();
    }
    Je n'obtiens aucune erreur quand je l'execute dans ma console, mais rien ne se passe. J'ai utilisé l'error_log mais il ne m'affiche rien.

    Des idées ? Merci

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Y aurait pas un problème de quotes dans cette requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete3 = $bddDYCOG->prepare("SELECT * FROM node" WHERE nid NOT IN (".$list_ids."));
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Re
    Bonsoir,

    Oui pardon je venais de tester la requete sans la condition, je vais edit le code. Sans cette erreur rien ne se passe également.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Re
    Alors je viens de trouver pourquoi ca ne fonctionne pas, mais je n'arrive pas a resoudre le probleme. Après avoir fait la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $caracteristiques = $bddDYCOG->prepare("SELECT node.type, node__body.langcode, title, body_value, body_format FROM node, node__body, node_field_data WHERE node.nid=node__body.entity_id AND node_field_data.nid=node.nid");
    $caracteristiques->execute();
    $carac = $caracteristiques->fetchAll();
    J'essaie d'afficher les données avec un echo (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $carac['node.type'];
    ) mais ca ne fonctionne pas. Pourtant la requete est juste, je l'ai testé avec phpmyadmin, elle me retourne bien des valeurs pour chaque attribut. Mais quand j'essaie de les récuperer ca ne fonctionne pas, du coup mon programme ne fait rien car il tourne avec des champ vides.

    Une idée ?

    edit : il n'y a qu'une seule ligne et donc qu'un seul node.type retourné, c'est juste pour tester, c'est pour ca que je n'ai pas mis de boucle pour afficher

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    fetchAll retourne un tableau de lignes, utilise plutôt fetch (ça récupère uniquement la 1ere ligne mais si tu n'as qu'une seule ligne de toute façon...)
    Et regarde ce qu'il y a dans $carac avec un var_dump($carac)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Re
    En effet, merci. J'ai modifié mon code et tout fonctionne.
    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
    use Drupal\node\Entity\Node;
    use \Drupal\file\Entity\File;
    foreach($res3 as $row3){
     
     
     
     
    $test = $bddDYCOG->query("SELECT node.type, node__body.langcode, title, body_value, body_format FROM node, node__body, node_field_data WHERE node.nid=node__body.entity_id AND node_field_data.nid=node.nid");
    while($carac = $test->fetch())
    {
    		$node = Node::create([
    	 				'type' => $carac['type'],
    				  'langcode' => $carac['langcode'],
    				  'created' => REQUEST_TIME,
    					  'changed' => REQUEST_TIME,
    					  'uid' => 1,
    					  'title' => $carac['title'],
    					  'body' => [
    					    'summary' => '',
    					    'value' =>  $carac['body_value'],
    					    'format' =>  $carac['bodyformat'],
    					  ],
    								]);
    					  $node->save();}
    }
    Je me heurte directement a un nouveau probleme que je ne comprends pas : apparemment lorsque j'utilise le create de la classe Node dans le while du foreach, et bien la classe Node n'est pas trouvé, pourtant j'ai bien ajouté un use Drupal\node\Entity\Node;

    La classe n'est pas visible car l'appel de la methode est dans un foreach ?? Je ne vois pas le probleme

  7. #7
    Invité
    Invité(e)
    Par défaut
    Il semblerait qu'il manque un antislash pour ton use.

    use \Drupal\node\Entity\Node;
    Dernière modification par Invité ; 21/10/2016 à 11h54.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Re
    J'ai essayé avec et ca ne change rien

  9. #9
    Invité
    Invité(e)
    Par défaut
    Juste pour préciser au cas où, j'avais fais une typo dans mon post précédent, l'antislash est juste avant le drupal, pas le use.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2016
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Re
    Oui t'inquiète j'avais compris ^^.

    J'ai finalement modifié mon script pour aborder le problème autrement et ca fonctionne, je n'ai pas résolu le problème de base et ca restera un mystere x)

    J'ai enlevé le foreach et modifié deux ou trois choses :
    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
      use Drupal\node\Entity\Node;
      use \Drupal\file\Entity\File;
    $caracteristiques = $bddDYCOG->query("SELECT node.type, node__body.langcode, title, body_value, body_format FROM node, node__body, node_field_data WHERE node.nid=node__body.entity_id AND node_field_data.nid=node.nid AND node_field_data.title NOT IN (".$list_ids.")");
     
     
    while($carac=$caracteristiques->fetch()){
        $node = Node::create([
     	 				'type' =>  $carac['type'],
    					  'langcode' =>  $carac['langcode'],
    				  'created' => REQUEST_TIME,
    					  'changed' => REQUEST_TIME,
    					  'uid' => 1,
    					  'title' => $carac['title'],
    					  'body' => [
    					    'summary' => '',
    					    'value' => $carac['body_value'],
    					    'format' => $carac['bodyformat'],
    					  ],
    								]);
    					  $node->save();

    Voila merci quand même !

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

Discussions similaires

  1. Stopper un script php qui se prend pour superman
    Par supergrey dans le forum Langage
    Réponses: 2
    Dernier message: 08/06/2007, 22h12
  2. Script php qui inclu une page au hasard
    Par adri5656 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 12/04/2007, 02h00
  3. [SQL] Script PHP qui marche pas !
    Par Diabless6 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/02/2007, 16h28
  4. Page de login -- script PHP qui ne marche pas
    Par Alexlesilex dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 24/04/2006, 16h32
  5. Réponses: 6
    Dernier message: 16/01/2006, 15h24

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