Alerte doublons + update
Tags :
Dernière réponse : dans Programmation
Bonjour
J'aimerai vérifier que mon champs "date" n'est pas déjà dans la base sinon ça retourne une erreur mais pas seulement.
J'aimerai en plus effectuer une modification dans la base, si la personne confirme qu'elle souhaite écraser le contenu précédent.
Je suis pour le moment que sur la partie "vérification" du champs qui ne fonctionne pas bien sur
. Je vous joints mon code pour information j'ai une boucle "for" qui me permet d'ajouter autant d'entré que d'utilisateurs car mon formulaire renvoie un listing d'utilisateur qui se trouve dans ma BDD.
J'espère être clair :x
En gras le code de vérification
<?php
if(isset($_POST['valider']))
{
$indice = $_POST['numIndice'];
$valider = $_POST['valider'];
$date = $_POST['date'];
function user_exists($date)
{
$sql = 'SELECT date FROM presence WHERE date = \'' . addslashes($date) . '\' LIMIT 1';
$res = mysql_query($sql) or die (mysql_error());
return (mysql_num_rows($res) == 1);
}
if(empty($_POST["date"]))
{
echo "Attention un des champs n'est pas correctement remplit.<a href='accueil.php'>Verifier</a>.";
}
else
{
if (user_exists($date))
{
echo('date deja enregistrer!<br />');
}
else
{
if ( $indice > 0 ) {
for ( $i=0; $i < $indice; $i++ )
{
$nservice=$_POST['nservice'.$i];
$agent=$_POST['agent'.$i];
$nchrono=$_POST['nchrono'.$i];
$etat=$_POST['etat'.$i];
$login=$_POST['login'.$i];
$requete ="INSERT INTO presence (id,nservice,date,agent,nchrono,etat,login) values ('','$nservice','$date','$agent','$nchrono','$etat','$login')";
mysql_query($requete);
}
mysql_close();
echo "La date à bien été prise en charge pour les ".$indice." agent";
}
}
else
echo "Merci de bien remplir le formulaire";
?>
vous pouvez retourner au <a href="accueil.php">menu principal</a>
Merci de votre aide future
J'aimerai vérifier que mon champs "date" n'est pas déjà dans la base sinon ça retourne une erreur mais pas seulement.
J'aimerai en plus effectuer une modification dans la base, si la personne confirme qu'elle souhaite écraser le contenu précédent.
Je suis pour le moment que sur la partie "vérification" du champs qui ne fonctionne pas bien sur
. Je vous joints mon code pour information j'ai une boucle "for" qui me permet d'ajouter autant d'entré que d'utilisateurs car mon formulaire renvoie un listing d'utilisateur qui se trouve dans ma BDD.J'espère être clair :x
En gras le code de vérification
<?php
if(isset($_POST['valider']))
{
$indice = $_POST['numIndice'];
$valider = $_POST['valider'];
$date = $_POST['date'];
function user_exists($date)
{
$sql = 'SELECT date FROM presence WHERE date = \'' . addslashes($date) . '\' LIMIT 1';
$res = mysql_query($sql) or die (mysql_error());
return (mysql_num_rows($res) == 1);
}
if(empty($_POST["date"]))
{
echo "Attention un des champs n'est pas correctement remplit.<a href='accueil.php'>Verifier</a>.";
}
else
{
if (user_exists($date))
{
echo('date deja enregistrer!<br />');
}
else
{
if ( $indice > 0 ) {
for ( $i=0; $i < $indice; $i++ )
{
$nservice=$_POST['nservice'.$i];
$agent=$_POST['agent'.$i];
$nchrono=$_POST['nchrono'.$i];
$etat=$_POST['etat'.$i];
$login=$_POST['login'.$i];
$requete ="INSERT INTO presence (id,nservice,date,agent,nchrono,etat,login) values ('','$nservice','$date','$agent','$nchrono','$etat','$login')";
mysql_query($requete);
}
mysql_close();
echo "La date à bien été prise en charge pour les ".$indice." agent";
}
}
else
echo "Merci de bien remplir le formulaire";
?>
vous pouvez retourner au <a href="accueil.php">menu principal</a>
Merci de votre aide future
Autres pages sur : alerte doublons update
Lassé par la pub ? Créez un compte
- | Alerter
- | Alerter
- | Alerter
Contenus similaires
- Php mysql select liste deroulante - Forum
- Mysql select dernier enregistrement - Forum
- Php mysql update - Forum
- Php mysql formulaire update - Forum
Hmm.. je viens de copier ton code dans ton précédent post, il y a l'air d'y avoir quelques éléments manquant vu qu'il manque deux }
Sinon, un conseil, c'est pour ton retour de la fonction :
return (mysql_num_rows($res) == 1)
remplace le par :
return (mysql_num_rows($res) >= 1)
Comme ça, au cas où il y a déjà 2 fois la même date pour une raison X ou Y, tu ne l'auras pas encore d'autres fois
Fais voir tout ton code pour voir où est le problème, et met ton code entre les balises [*code][/code] (sans l'étoile)
Sinon, un conseil, c'est pour ton retour de la fonction :
return (mysql_num_rows($res) == 1)
remplace le par :
return (mysql_num_rows($res) >= 1)
Comme ça, au cas où il y a déjà 2 fois la même date pour une raison X ou Y, tu ne l'auras pas encore d'autres fois
Fais voir tout ton code pour voir où est le problème, et met ton code entre les balises [*code][/code] (sans l'étoile)
- | Alerter
Alors voila mon code désolé du retard :x
Mon formulaire de saisie dans la BDD
mon fichier de traitement
Mon formulaire de saisie dans la BDD
<?php require_once('connexion.php'); ?>
<?php
$query_users = "SELECT * FROM utilisateurs,agent WHERE utilisateurs.nservice = '1' AND agent.nservice = '1'"; // Tri la table agent sur le champs Nservice
$users = mysql_query($query_users, $dbprotect) or die(mysql_error());
$indice = 0;
?>
<form action="crea.php" method="post">
Entrez la Date <input readonly type="text" name="date" value="">
<input type="button" value="Calendrier" onClick="displayCalendar(document.forms[0].date,'dd.mm.yyyy',this)">
<?php
while( $result = mysql_fetch_object( $users ) )
{
?>
<table width="495" border="1">
<tr>
<td>Agent:</td>
<td><input type="text" size="20" name="agent<?php echo $indice;?>" value="<?php echo ($result->nom);?> <?php echo ($result->prenom);?>"> <select name="etat<?php echo $indice;?>">
<option>Présent</option>
<option>Congès Annuels</option>
<option>Congès Exceptionnel</option>
<option>Mission</option>
<option>Récupération</option>
</select></td>
</tr>
<input type="hidden" name="nchrono<?php echo $indice;?>" value="<?php echo ($result->nchrono);?>">
<input type="hidden" name="login<?php echo $indice;?>" value="<?php echo ($result->login);?>">
<input type="hidden" name="nservice<?php echo $indice;?>" value="<?php echo ($result->nservice);?>">
<?php
$indice++;
}
?>
<input type="hidden" name="numIndice" value="<?php echo $indice;?>"/>
</table>
<input type="submit" value="valider" name="valider">
</form>
<a href="consultation.php">Consulter/Modifier</a>
<?php } // fin de l'affichage conditionnel?>
mon fichier de traitement
<?php require_once('connexion.php'); ?>
<?php
if(isset($_POST['valider']))
{
$indice = $_POST['numIndice'];
$valider = $_POST['valider'];
$date = $_POST['date'];
function user_exists($date)
{
$sql = 'SELECT `date` FROM presence WHERE date = \'' . addslashes($date) . '\' LIMIT 1';
$res = mysql_query($sql) or die ($sql.'<br />'.mysql_error());
return (mysql_num_rows($res) >= 1);
}
if (user_exists($date))
{
echo('date deja enregistrer!<br />');
echo('voulez vous vraiement continuer?<br />');
}
else
{
if ( $indice > 0 ) {
for ( $i=0; $i < $indice; $i++ )
{
$nservice=$_POST['nservice'.$i];
$agent=$_POST['agent'.$i];
$nchrono=$_POST['nchrono'.$i];
$etat=$_POST['etat'.$i];
$login=$_POST['login'.$i];
$requete ="INSERT INTO presence (id,nservice,date,agent,nchrono,etat,login) values ('','$nservice','$date','$agent','$nchrono','$etat','$login')";
mysql_query($requete);
}
mysql_close();
echo "La date à bien été prise en charge pour les ".$indice." agent";
}
}
else
echo "Merci de bien remplir le formulaire";
}
?>
vous pouvez retourner au <a href="accueil.php">menu principal</a>
- | Alerter
Ah pardon, j'avais pas fait attention que tu avais un LIMIT 1 dans ta requête SQL, donc tu pouvais laisser return (mysql_num_rows($res) == 1)
Par contre, tu n'as mis les `` qu'à un seul endroit dans ta requête SQL, mais les sur les deux "date".
Ensuite il y a l'air d'y avoir un soucis avec ton else final...
Ton else doit être associé à ton if(isset($_POST['valider'])), or là, il est avant la fermeture de ton if.
quelque chose comme ça devrait le faire :
Par contre, tu n'as mis les `` qu'à un seul endroit dans ta requête SQL, mais les sur les deux "date".
Ensuite il y a l'air d'y avoir un soucis avec ton else final...
Ton else doit être associé à ton if(isset($_POST['valider'])), or là, il est avant la fermeture de ton if.
quelque chose comme ça devrait le faire :
<?php require_once('connexion.php'); ?>
<?php
if(isset($_POST['valider']))
{
$indice = $_POST['numIndice'];
$valider = $_POST['valider'];
$date = $_POST['date'];
function user_exists($date)
{
$sql = 'SELECT `date` FROM presence WHERE `date` = \'' . addslashes($date) . '\' LIMIT 1';
$res = mysql_query($sql) or die ($sql.'<br />'.mysql_error());
return (mysql_num_rows($res) == 1);
}
if (user_exists($date))
{
echo('date deja enregistrer!<br />');
echo('voulez vous vraiement continuer?<br />');
}
else
{
if ( $indice > 0 ) {
for ( $i=0; $i < $indice; $i++ )
{
$nservice=$_POST['nservice'.$i];
$agent=$_POST['agent'.$i];
$nchrono=$_POST['nchrono'.$i];
$etat=$_POST['etat'.$i];
$login=$_POST['login'.$i];
$requete ="INSERT INTO presence (id,nservice,date,agent,nchrono,etat,login) values ('','$nservice','$date','$agent','$nchrono','$etat','$login')";
mysql_query($requete);
}
mysql_close();
echo "La date à bien été prise en charge pour les ".$indice." agent";
}
}
}
else
echo "Merci de bien remplir le formulaire";
?>
vous pouvez retourner au <a href="accueil.php">menu principal</a>
- | Alerter
- | Alerter
- | Alerter
- | Alerter
bah une fonction ou pas...
c'était juste pour te faire faire une requête SQL, tu récupères le résultat de la requête, tu le mets dans un tableau, et tu regardes les données qui sont récupérées.
Comme ça tu verras ce qui est vraiment retourné quand tu fais un SELECT date FROM presence WHERE date = $date
C'est plus clair ?
Parce que s'il te dit qu'il trouve une ligne alors qu'il n'y en a pas, il faudrait voir quelle est la ligne qu'il retourne, ça t'aidera à savoir ce qui plante.
c'était juste pour te faire faire une requête SQL, tu récupères le résultat de la requête, tu le mets dans un tableau, et tu regardes les données qui sont récupérées.
Comme ça tu verras ce qui est vraiment retourné quand tu fais un SELECT date FROM presence WHERE date = $date
C'est plus clair ?
Parce que s'il te dit qu'il trouve une ligne alors qu'il n'y en a pas, il faudrait voir quelle est la ligne qu'il retourne, ça t'aidera à savoir ce qui plante.
- | Alerter
En faite ça marche très bien je regardais la mauvaise bdd :x jvais arrêter le café au rhum
.
Je te remercie la partie vérification fonctionne très bien
.
Maintenant je vais m'attaquer à la partie UPDATE
Pour traiter l'UPDATE.
Quand j'ai le message:
echo('voulez vous vraiement continuer?<br />');
Je pensais mettre un href sur continuer avec une page PHP par exemple "update.php" et la je met mon traitement. Tu as une meilleur solution?
.Je te remercie la partie vérification fonctionne très bien
.Maintenant je vais m'attaquer à la partie UPDATE
Pour traiter l'UPDATE.
Quand j'ai le message:
echo('voulez vous vraiement continuer?<br />');
Je pensais mettre un href sur continuer avec une page PHP par exemple "update.php" et la je met mon traitement. Tu as une meilleur solution?
- | Alerter
J'ai commencé à faire ça mais j'ai une erreur à la ligne 32. Ma requete est en toute logique bonne et je pense avoir également besoin de ma boucle for.
<?php require_once('connexion.php'); ?>
<?php
if(isset($_POST['valider']))
{
$indice = $_POST['numIndice'];
$valider = $_POST['valider'];
$date = $_POST['date'];
if ( $indice > 0 ) {
for ( $i=0; $i < $indice; $i++ )
{
$nservice=$_POST['nservice'.$i];
$agent=$_POST['agent'.$i];
$nchrono=$_POST['nchrono'.$i];
$etat=$_POST['etat'.$i];
$login=$_POST['login'.$i];
$sql ="UPDATE presence SET
date='$date',
nservice='$nservice',
agent='$agent',
nchrono='$nchrono',
etat='$etat',
login='$login'";
mysql_query($requete);
}
echo "Mise à jour effectué";
}
else
echo "La mise $agrave; rencontr$eacute un problème";
?>
Vous pouvez retourner au <a href="accueil.php">menu principal</a>
- | Alerter
- | Alerter
- | Alerter
- | Alerter
- | Alerter
- | Alerter
- | Alerter
Une des solutions, serai que j'écrive dans mon URL les valeurs mais les exemples son très simplifier et ne corresponde pas du tout a mon code qui reprend des éléments de la BDD ainsi qu'une variable numIndice
Si je procède comme si dessous ça risque de ne pas marcher
D'après se que j'ai compris je devrai mettre ça
Si je procède comme si dessous ça risque de ne pas marcher
...monfichier.asp?param1=valeur1¶m2=valeur2...
D'après se que j'ai compris je devrai mettre ça
<a href="update.php?agent<?php echo $indice;?>=<?php echo ($result->nom);?> <?php echo ($result->prenom);?>">suivant</a>"<br />');
- | Alerter
Ici : http://ca2.php.net/manual/fr/reserved.variables.post.ph...
Sa fonction transforme toutes tes variables $_POST en QueryString (donc en ?param1=valeur1¶m2=valeur2...
Tu peux aussi regarder la remarque du 2ème commentaire qui s'applique à ce que tu fais.
Sinon, tu peux stocker les valeurs en session et donc les récupérer depuis la page suivante. Mais il faudra pour ça récupérer les valeurs de $_SESSION et pas $_POST.
(Désolé mais ça fait plus d'un an que j'ai pas fait de PHP, c'est pas tout frais)
Sa fonction transforme toutes tes variables $_POST en QueryString (donc en ?param1=valeur1¶m2=valeur2...
Tu peux aussi regarder la remarque du 2ème commentaire qui s'applique à ce que tu fais.
Sinon, tu peux stocker les valeurs en session et donc les récupérer depuis la page suivante. Mais il faudra pour ça récupérer les valeurs de $_SESSION et pas $_POST.
(Désolé mais ça fait plus d'un an que j'ai pas fait de PHP, c'est pas tout frais)
- | Alerter
Pour mon niveau les session sont plus simple.
J'ai tout remplacé par les session sur ma page créa ça fonctionne mais pas sur update
crea.php
update.php
J'ai tout remplacé par les session sur ma page créa ça fonctionne mais pas sur update
crea.php
<?php
if(isset($_POST['valider']))
{
$_SESSION['indice'] = $_POST['numIndice'];
$_SESSION['valider'] = $_POST['valider'];
$_SESSION['date'] = $_POST['date'];
function user_exists($date)
{
$sql = 'SELECT `date` FROM presence WHERE date = \'' . addslashes($date) . '\' LIMIT 1';
$res = mysql_query($sql) or die ($sql.'<br />'.mysql_error());
return (mysql_num_rows($res) == 1);
}
if (user_exists($date))
{
echo('La date que vous avez saisie est déjà enregistrer!<br />');
echo('Si vous souhaitez écraser le contenu précédent veuillez cliquer sur le lien "<a href="update.php">suivant</a>"<br />');
}
else
{
if ( $indice > 0 ) {
for ( $i=0; $i < $indice; $i++ )
{
$_SESSION['nservice'] = $_POST['nservice'.$i];
$_SESSION['agent'] = $_POST['agent'.$i];
$_SESSION['nchrono'] = $_POST['nchrono'.$i];
$_SESSION['etat'] = $_POST['etat'.$i];
$_SESSION['login'] = $_POST['login'.$i];
$requete ="INSERT INTO presence (id,nservice,date,agent,nchrono,etat,login) values ('','$nservice','$date','$agent','$nchrono','$etat','$login')";
mysql_query($requete);
}
mysql_close();
echo "La date à bien été prise en charge pour les ".$indice." agent ";
}
}
}
else
echo "Merci de bien remplir le formulaire";
?>
update.php
<?php
if(isset($_POST['valider']))
{
$_SESSION['indice'] = $_POST['numIndice'];
$_SESSION['valider'] = $_POST['valider'];
$_SESSION['date'] = $_POST['date'];
if ( $indice > 0 ) {
for ( $i=0; $i < $indice; $i++ )
{
$_SESSION['nservice'] = $_POST['nservice'.$i];
$_SESSION['agent'] = $_POST['agent'.$i];
$_SESSION['nchrono'] = $_POST['nchrono'.$i];
$_SESSION['etat'] = $_POST['etat'.$i];
$_SESSION['login'] = $_POST['login'.$i];
$requete ="UPDATE presence SET
date='$date',
nservice='$nservice',
agent='$agent',
nchrono='$nchrono',
etat='$etat',
login='$login'";
mysql_query($requete);
}
}
echo "Mise à jour effectué<br>";
}
else
echo "La mise à jour à rencontré un problème<br>";
?>
- | Alerter
Salut,
Bah le soucis sur ta page update, c'est que tu n'as pas de tableau $_POST, tu as juste des valeurs qui sont en session.
Donc, tu oublies ce que tu as en $_POST et tu te focalises que sur ce que tu as en $_SESSION, donc toutes tes initialisations de $_SESSION ne servent à rien dans cette page, vu que tu les as déjà en session.
Ensuite, dans ta page d'insertion, tu fais ça :
Dans ta configuration actuelle, il y a quelque chose qui est activée pour que ta variable $date soit égale à $_POST['date'], mais ce n'est pas forcément le cas...
Tu définies des variables en session, réutilise les quand tu fais ton insert.
Et pour finir, il faudra que tu te renseignes sur les injections SQL et sur leur protection si tu ne veux pas que l'on puisse supprimer toute ta base en utilisant tes requêtes INSERT ou UPDATE...
Bah le soucis sur ta page update, c'est que tu n'as pas de tableau $_POST, tu as juste des valeurs qui sont en session.
Donc, tu oublies ce que tu as en $_POST et tu te focalises que sur ce que tu as en $_SESSION, donc toutes tes initialisations de $_SESSION ne servent à rien dans cette page, vu que tu les as déjà en session.
Ensuite, dans ta page d'insertion, tu fais ça :
$_SESSION['nservice'] = $_POST['nservice'.$i];
$_SESSION['agent'] = $_POST['agent'.$i];
$_SESSION['nchrono'] = $_POST['nchrono'.$i];
$_SESSION['etat'] = $_POST['etat'.$i];
$_SESSION['login'] = $_POST['login'.$i];
$requete ="INSERT INTO presence (id,nservice,date,agent,nchrono,etat,login) values ('','$nservice','$date','$agent','$nchrono','$etat','$login')";
mysql_query($requete);
Dans ta configuration actuelle, il y a quelque chose qui est activée pour que ta variable $date soit égale à $_POST['date'], mais ce n'est pas forcément le cas...
Tu définies des variables en session, réutilise les quand tu fais ton insert.
Et pour finir, il faudra que tu te renseignes sur les injections SQL et sur leur protection si tu ne veux pas que l'on puisse supprimer toute ta base en utilisant tes requêtes INSERT ou UPDATE...
- | Alerter
Lassé par la pub ? Créez un compte