Importez un texte dans une bdd en le changant toutes les 3 fois

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Importez un texte dans une bdd en le changant toutes les 3 fois

Re: Importez un texte dans une bdd en le changant toutes les 3 fois

par Spols » 04 nov. 2016, 09:01

$import = "UPDATE city SET description = '".$texte[$i]."' WHERE name= '".$ligne['name']."'";
echo $import.'<br>';
$import = $bdd->query($sql);

Changer le nom de ta variable de requète c'est un bon début, mais si tu envoi à ta base de donnée la requète de sélection tu n'enregistre rien c'est sur.
$import = $bdd->query($import);

Re: Importez un texte dans une bdd en le changant toutes les 3 fois

par yoann38 » 03 nov. 2016, 22:09

Re,
Bon ca y'est on vas finir pas y arrivé il est vrai qu'en sortant de la boucle c'est déjà mieux :)
Mais je fait un echo de la req pour voir et les résultat semble correct mais en bdd ca ne s'importe pas et la je ne vois pas pourquoi.
Exemple de retour de la requete:
UPDATE city SET description = 'texte 1' WHERE name= 'test'
UPDATE city SET description = 'texte 2' WHERE name= 'Ambérieux-en-Dombes'
UPDATE city SET description = 'texte 3' WHERE name= 'Ambléon'
.....

Donc mon code:
// Selection des champs et de la table
$sql = 'SELECT name FROM city'; // on recupere tous les ids de la table
$req = $bdd->query($sql);

$i=1;

$texte=array();  // On cree un tableau avec nos textes
$texte[1] = 'texte 1';
$texte[2] = 'texte 2';
$texte[3] = 'texte 3';

while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ // on parcourt toutes les entrees de la table



$import = "UPDATE city SET description = '".$texte[$i]."' WHERE name= '".$ligne['name']."'";
 echo $import.'<br>';
  $import = $bdd->query($sql);
   if($i < 3){ // si on est pas encore au 3eme texte on passe au texte suivant
      $i++;
   }
   else{ // sinon on revient au premier
      $i = 1;
   }
}
Merci à vous encore

Re: Importez un texte dans une bdd en le changant toutes les 3 fois

par Spols » 03 nov. 2016, 09:42

si tu utilise le même nom de variable dans la condition de ta boucle et au sein de celle-ci, seule la première itération fonctionnera normalement.
Il faut que tu change un des 2 noms de variable $req

Il faut aussi que tu définisse ton $i = 0 avant ta boucle sinon tu le redéfini à chaque itération et donc il ne variera pas. test textes peuvent aussi être défini avant la boucle

petit plus, tu peux éviter toute la partie avec un if $i> 3 en le laissant incrémenter simplement et en prenant le modulo 3 de $i
$i % 3 vaut 0 pour tous les multiple de 3, 1 pour tous les nombres multiple de 3 + 1 et 2 pour les multiples de 3 + 2
les multiple de 3 + 3 sont des multiple de 3 donc le modulo vaut 0. c'est bien plus clair dans un code, et plus facile à maintenir par la suite si un jour tu as 4 textes

Re: Importez un texte dans une bdd en le changant toutes les 3 fois

par yoann38 » 03 nov. 2016, 08:16

Re,
J'ai n'ai donc plus de problème mais je vois qu'en affichant ma requete c'est toujours la même qui s'éxécute à savoir sur la première ville de la bdd et c'est tout....
// Selection des champs et de la table
$sql = 'SELECT name FROM city'; // on recupere tous les ids de la table
$req = $bdd->query($sql);

while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ // on parcourt toutes les entrees de la table

$i=1;
$texte=array();  // On cree un tableau avec nos textes
$texte[1] = 'texte 1';
$texte[2] = 'texte 2';
$texte[3] = 'texte 3';

$req = "UPDATE city SET description = '".$texte[$i]."' WHERE name= '".$ligne['name']."'";
 echo $req;
  $req = $bdd->query($sql);
   if($i < 3){ // si on est pas encore au 3eme texte on passe au texte suivant
      $i++;
   }
   else{ // sinon on revient au premier
      $i = 1;
   }
}

Re: Importez un texte dans une bdd en le changant toutes les 3 fois

par or 1 » 02 nov. 2016, 22:12

$req = $bdd->query($sql);
$req = "UPDATE city SET description = '".$texte[$i]."' WHERE name= '".$ligne['name']."'";

Re: Importez un texte dans une bdd en le changant toutes les 3 fois

par yoann38 » 02 nov. 2016, 21:50

Quelque chose comme:
Je me retrouve avec une erreur:

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\dev\texte-opti.php on line
22
$texte=array();  // On cree un tableau avec nos textes
$texte[1] = 'texte 1';
$texte[2] = 'texte 2';
$texte[3] = 'texte 3';
  
// Selection des champs et de la table
$sql = 'SELECT name FROM city'; // on recupere tous les ids de la table
$req = $bdd->query($sql);
  
  // On insere les infos
$i=1;
while($ligne = $req->fetch(PDO::FETCH_ASSOC)){ // on parcourt toutes les entrees de la table
  $req = "UPDATE city SET description = '".$texte[$i]."' WHERE name= '".$ligne['name']."'";
  echo $req;
  $bdd->query($req)or die('Problème lors de l\'insertion');
   if($i < 3){ // si on est pas encore au 3eme texte on passe au texte suivant
      $i++;
   }
   else{ // sinon on revient au premier
      $i = 1;
   }
}

?>
Je ne vois pas trop à quoi ca correspond :/

Re: Importez un texte dans une bdd en le changant toutes les 3 fois

par @rthur » 02 nov. 2016, 01:59

Effectivement, il manquait une partie : "noter dans une variable" :-)

En clair :
- avant ta boucle while :
1) tu crées un tableau (par exemples $tablo_textes) avec les 3 valeurs des textes que tu veux mettre.
2) tu crées une variable (par exemple $id_texte) qui aura pour valeur 0

- dans ta boucle,
1) tu affiches le texte $tablo_textes[$id_texte], à noter que j'avais initialisé la variable $id_texte à 0 car les index d'un tableau commences à 0
2) tu incrémentes $id_texte de 1 et si après l'avoir incrémenté il est > 2 alors tu le remets à 0

Est-ce que c'est + clair pour toi ?

Re: Importez un texte dans une bdd en le changant toutes les 3 fois

par yoann38 » 01 nov. 2016, 21:29

J'ai donc quelquechose comme ça maintenant :
// Importation de texte différents toutes les 3 fois
	$texte_city = 'texte 1';

	// Selection des champs et de la tablr
	$sql = 'SELECT name FROM city LIMIT 0,15';
	$req = $bdd->query($sql);

	// On affiche les infos
	while($ligne = $req->fetch(PDO::FETCH_ASSOC)){  
	echo $texte_city.' - '.$ligne['name'].'<br>';
	
	}
J'ai pas trop compris l'histoire de :
Et ensuite, pour détecter le passage à 3, ce que je ferrais c'est de noter le texte que tu as utilisé précédemment et donc tu utilises le suivant (ou le 1er si tu étais au 3ème)

Re: Importez un texte dans une bdd en le changant toutes les 3 fois

par @rthur » 01 nov. 2016, 20:27

Bonjour,

Avant de le faire avec ton insertion en BDD, essaye juste de le faire avec une boucle et du texte (echo)
Ça te permettra de tester et debuguer + facilement.

Tu auras besoin de faire une boucle sur l'ensemble de tes villes donc soit avec un while, for, foreach... en fonction de comment sont récupérées les villes.
Et ensuite, pour détecter le passage à 3, ce que je ferrais c'est de noter le texte que tu as utilisé précédemment et donc tu utilises le suivant (ou le 1er si tu étais au 3ème)

Importez un texte dans une bdd en le changant toutes les 3 fois

par yoann38 » 01 nov. 2016, 20:05

Bonjour tout le monde,
Voilà je vous expose mon problème je souhaite integrer un texte en bdd, mais je souhaite que le texte s'integrer toutes les 3 fois.
J'ai l'idée mais ça coince, exemple:

on intégrer mon premier texte, pour la premiere ville
ensuite le deuxiéme texte pour la seconde ville
ensuite le troisième texte pour la 3 eme ville et on recommence l'opération
1er texte pour la 4 eme ville ....

Mais je ne vois pas comment faire ce système:
voilà ce que j'ai:
<?php
// Importation de texte différents toutes les 3 fois
$texte_city = [];
$texte_city[0] = 'texte 1';
$texte_city[1] = 'texte 2';
$texte_city[2] = 'texte 2';


// Insertion
$req = $bdd->prepare("INSERT INTO `city` (description) VALUES ('$description')");
$req->execute(array(
              'description' => $texte_city
               )) or die('Problème lors de l\'insertion');
     
?>
Merci à vous