Bonjour,
Voilà je m'explique. Je suis en train de faire un backoffice très simple, mais je voudrais pouvoir dupliquer (ou cloner) des informations déjà entrer dans ma base.
Alors, j'ai vu qu'il était possible de le faire avec la méthode _clone(), mais je ne vois pas vraiment comment le réaliser. Voilà ce que j'ai trouvé :

<?php
class SubObject 
{
  static $instances = 0;
  public $instance;
  public function __construct() {
    $this->instance = ++self::$instances;
  }
  public function __clone() {
    $this->instance = ++self::$instances;
  }
}
class MyCloneable 
{
  public $objet1;
  public $objet2;
  function __clone() 
  {    
    // Force la copie de this->object, sinon
    // il pointera vers le même objet.
    $this->object1 = clone $this->object1;
  }
}
$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;

print("Objet original :\n");
print_r($obj);
print("Objet cloné :\n");
print_r($obj2);
?>

Au final, je voudrais qu'une ligne de mon tableau se termine par un bouton (ex: copier la ligne) et qu'elle s'ajoute à ma base de données avec un ID différent.

Merci de votre aide...

4 réponses


Vallyan
Réponse acceptée

La seule chose qu'il faut que tu envoies c'est l'id de la ligne a dupliquer.
En SQL, tu fais a la fois une requête d'insertion (pour ajouter la nouvelle ligne) et une requête de lecture (pour récupérer les valeurs a ajouter depuis la ligne de référence):

insert into my_table( col1, col2 ) select col1, col2 from my_table where id=?;
---------------------------------
insert la nouvelle ligne ------------------------------------------
                                   récupère les valeurs a insérer grâce a un select
                                    qui utilise l'id de la ligne de reference

La façon dont tu envoies la requête vers le serveur dépend de ton code: un simple lien avec l'id de la ligne a dupliquer en get fonctionnerait, mais tu peux aussi faire un formulaire pour envoyer l'id en post.

Tu utilises un ORM ? parce que sinon pour enregistrer une nouvelle ligne dans ta bdd il n'y a pas necessairement besoin de cloner un objet, tu peux le faire directement en SQL:

insert into my_table( col1, col2 ) select col1, col2 from my_table where id=?;
mirael86
Auteur

Ok, mais du coup je procède comment pour que mon bouton récupère les informations de mon tableau ? Vu que ce n'est pas un formulaire...

Pour ajouter quelque chose à ma table je le fais avec un formulaire du type :

<!--JE SUIS SUR LA PAGE TEST.PHP-->
<form method='POST' action='insert.php'>
    <input type="text" name="col1"/>
    <input type="text" name="col2"/>
    <input type"submit" value="OK"/>
</form>

et après je fais ça dans ma page insert.php :

<?php
header('Location:test.php');
require "page de connexion à ma BDD";
    mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
    mysql_select_db(DB_BDD);
    extract($_POST);
    $sql="INSERT INTO my_table (col1,col2) VALUES ('$col1','$col2')";
    $req = mysql_query($sql) or die ('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());   
?>

Donc je ne t'avoue que je ne sais pas trop comment envoyer des choses dans la table "my_table" après une ligne d'un tableau. Est-ce-qu'il faut que je renvoie le lien avec une balise <a> (ça me semble quand même bizarre!!) :

<a href="copy.php">

vers copy.php

<?php
header('Location:test.php');
$sql="insert into my_table( col1, col2 ) select col1, col2 from my_table where id={$_GET'id']}";
?>

Merci de ton aide, mais comme tu le vois, je commence avec le php et je ne suis pas encore très à l'aise !

mirael86
Auteur

Ah ok... Il faudrait donc que je fasse un lien du type :

<a href="copy.php?id={$data'id']}">

Super Merci... J'ai compris c'est super!!