Probleme sql/php
Ninib
-
macgawel Messages postés 676 Statut Membre -
macgawel Messages postés 676 Statut Membre -
Bonjour,
alors voila j'ai 2 tables dans une base : Fiches et Fiches_resolu
Ce que je voudrait faire c'est passer une ligne de la première vers la deuxieme en procédant comme ceci :
-je récupère les données d'une ligne en m'aidant d'un numéro d'id (auto-incrémenté lors de l'ajout d'une ligne).
-je creer une nouvelle ligne dans la deuxieme table avec ces données
-je supprime la ligne dans la première table.
Et il y a un probleme lors de la deuxieme opération, en précisant que la première fonctionne.
Je vous met le code php que j'ai, le problème se situe lors du deuxieme isset je suppose, et j'ai aucune confiance en mes guillemets dans les requetes:
Au début on suppose qu'on a cliqué sur le bouton 'envoyer', en ayant renseigné un id par formulaire.
Le problème que je rencontre est que je n'ai aucun message d'erreur mais il ne se passe strictement rien, la base de données est inchangée.
----------------------------------------------------------------------------------------------
<?php
if(isset($_POST['envoyer'])){
$id = $_POST['id'];
if(!empty($id)){
$lien=connexionBD();
$requete=("SELECT * FROM Fiches WHERE Id=$id");
$res=executionRequete($requete,$lien);
$row=mysql_fetch_assoc($res);
echo "Voulez-vous déplacer cette ligne ?";
echo "<br>";
echo "<table>";
echo '<tr>
<td>'.$row['Id'].'</td>
<td>'.$row['Utilisateur'].'</td>
<td>'.$row['Poste'].'</td>
<td>'.$row['Date'].'</td>
<td>'.$row['Descriptif'].'</td>
</tr>';
echo "</table>";
echo "<form action='deplacer.php' method='post'>
<input type ='submit' value='Oui' name='oui' /><br>
<input type ='submit' value='Non' name='non' />
</form>";
if(isset($_POST['oui'])){
$requete2=("INSERT INTO Fiches_resolu VALUES('','".$row['Utilisateur']."','".$row['Poste']."','".$row['Date']."','".$row['Descriptif']."');");
$requete3=("DELETE from Fiches where Id=".$row['Id'].";");
$res2=executionRequete($requete2,$lien);
$res3=executionRequete($requete3,$lien);
if(!$res2) {
echo "Erreur d'écriture dans la deuxième table!";
if(!res3){
echo "Erreur de suppression dans la première table!";
} else echo "<FONT color=\"red\">Requêtes prises en compte!</FONT>";
}
deconnexionBD($lien);
}
} else echo "Le champ <b>Id</b> n'est pas rempli.";
}
?>
alors voila j'ai 2 tables dans une base : Fiches et Fiches_resolu
Ce que je voudrait faire c'est passer une ligne de la première vers la deuxieme en procédant comme ceci :
-je récupère les données d'une ligne en m'aidant d'un numéro d'id (auto-incrémenté lors de l'ajout d'une ligne).
-je creer une nouvelle ligne dans la deuxieme table avec ces données
-je supprime la ligne dans la première table.
Et il y a un probleme lors de la deuxieme opération, en précisant que la première fonctionne.
Je vous met le code php que j'ai, le problème se situe lors du deuxieme isset je suppose, et j'ai aucune confiance en mes guillemets dans les requetes:
Au début on suppose qu'on a cliqué sur le bouton 'envoyer', en ayant renseigné un id par formulaire.
Le problème que je rencontre est que je n'ai aucun message d'erreur mais il ne se passe strictement rien, la base de données est inchangée.
----------------------------------------------------------------------------------------------
<?php
if(isset($_POST['envoyer'])){
$id = $_POST['id'];
if(!empty($id)){
$lien=connexionBD();
$requete=("SELECT * FROM Fiches WHERE Id=$id");
$res=executionRequete($requete,$lien);
$row=mysql_fetch_assoc($res);
echo "Voulez-vous déplacer cette ligne ?";
echo "<br>";
echo "<table>";
echo '<tr>
<td>'.$row['Id'].'</td>
<td>'.$row['Utilisateur'].'</td>
<td>'.$row['Poste'].'</td>
<td>'.$row['Date'].'</td>
<td>'.$row['Descriptif'].'</td>
</tr>';
echo "</table>";
echo "<form action='deplacer.php' method='post'>
<input type ='submit' value='Oui' name='oui' /><br>
<input type ='submit' value='Non' name='non' />
</form>";
if(isset($_POST['oui'])){
$requete2=("INSERT INTO Fiches_resolu VALUES('','".$row['Utilisateur']."','".$row['Poste']."','".$row['Date']."','".$row['Descriptif']."');");
$requete3=("DELETE from Fiches where Id=".$row['Id'].";");
$res2=executionRequete($requete2,$lien);
$res3=executionRequete($requete3,$lien);
if(!$res2) {
echo "Erreur d'écriture dans la deuxième table!";
if(!res3){
echo "Erreur de suppression dans la première table!";
} else echo "<FONT color=\"red\">Requêtes prises en compte!</FONT>";
}
deconnexionBD($lien);
}
} else echo "Le champ <b>Id</b> n'est pas rempli.";
}
?>
A voir également:
- Probleme sql/php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Logiciel sql - Télécharger - Bases de données
- Jointure sql ✓ - Forum MySQL
- Requete sql pix - Forum PHP
5 réponses
Bonjour.
Où est la fonction executionRequete ?
Tu peux essayer de faire :
Ca devrait te donner un message d'erreur...
Sinon, ce ne serait pas plus simple de rajouter un champ Resolu dans ta table Fiches ?
Où est la fonction executionRequete ?
Tu peux essayer de faire :
$res1=executionRequete($requete1,$lien) or die ('Erreur dans la requête : '.mysql_error() );
Ca devrait te donner un message d'erreur...
Sinon, ce ne serait pas plus simple de rajouter un champ Resolu dans ta table Fiches ?
Tu as un message d'erreur ? Ou un des echo que tu as codé ('Erreur...') ?
Je ne maîtrise pas trop, donc je vais peut-être dire une connerie :
Ca ne pourrait pas être lié à ta toute première requête (le SELECT) ?
Genre, tu ne fermes pas ta connexion, et du coup la ligne que tu récupère par le SELECT ne peut pas être DELETE ?
Je ne maîtrise pas trop, donc je vais peut-être dire une connerie :
Ca ne pourrait pas être lié à ta toute première requête (le SELECT) ?
Genre, tu ne fermes pas ta connexion, et du coup la ligne que tu récupère par le SELECT ne peut pas être DELETE ?
Tu as un message d'erreur ? Ou un des echo que tu as codé ('Erreur...') ?
Qu'est-ce que tu as fait, qui ne change rien ?
je viens de trouver une alternative, ca moins bien mais ca marche.
J'ai viré la confirmation de déplacement (oui/non) qui faisait qu'on rechargeait la page, du coup je perdais toutes les variables passées par la première requete.
Ca marche mais c'est brutal du coup, enfin c'est pas grave.
Par contre maintenant, une dernière chose, ce n'est pas bien important mais, imaginon que j'ai 3 ligne dans la table Fiches. J'ai déplacé la 2e et donc du coup les Id passent de 1 à 3, ya aps moyen que ca se mette normal ?
J'ai viré la confirmation de déplacement (oui/non) qui faisait qu'on rechargeait la page, du coup je perdais toutes les variables passées par la première requete.
Ca marche mais c'est brutal du coup, enfin c'est pas grave.
Par contre maintenant, une dernière chose, ce n'est pas bien important mais, imaginon que j'ai 3 ligne dans la table Fiches. J'ai déplacé la 2e et donc du coup les Id passent de 1 à 3, ya aps moyen que ca se mette normal ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pour la confirmation, tu peux :
- Passer par du JavaScript (un message de confirmation. Avantage : tu restes dans la page)
- Stocker tes données, dans le $_SESSION par exemple, et utiliser du php.
Pour ton problème d'Id :
Ca dépend un peu de ta base, mais normalement, si c'est un champ auto-incrémenté tu ne peux rien faire.
Tu pourrais repasser toute ta base dans une "moulinette" pour renuméroter, mais :
- Ca risque de te poser des problèmes : imagine que deux personnes archivent quasiment en même temps la fiche n° 2. Personne 1 archive la fiche 2 => tu renumérotes => Personne 2 archive la (nouvelle) fiche 2 !
- C'est compliqué à gérer avec ta table d'archivage (tu risques de te retrouver avec plusieurs fiches n°2)
- Passer par du JavaScript (un message de confirmation. Avantage : tu restes dans la page)
- Stocker tes données, dans le $_SESSION par exemple, et utiliser du php.
Pour ton problème d'Id :
Ca dépend un peu de ta base, mais normalement, si c'est un champ auto-incrémenté tu ne peux rien faire.
Tu pourrais repasser toute ta base dans une "moulinette" pour renuméroter, mais :
- Ca risque de te poser des problèmes : imagine que deux personnes archivent quasiment en même temps la fiche n° 2. Personne 1 archive la fiche 2 => tu renumérotes => Personne 2 archive la (nouvelle) fiche 2 !
- C'est compliqué à gérer avec ta table d'archivage (tu risques de te retrouver avec plusieurs fiches n°2)
Mais elles fonctionnent très bien car je fais deja plusieurs truc avec cette base.
Par contre justement j'ai fait une deuxième table pour ne pas laisser encombrée la première et pour que la deuxième serve aussi d'historique