Gros soucis apparemment mineurs avec base de données

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 : Gros soucis apparemment mineurs avec base de données

Re: Gros soucis apparemment mineurs avec base de données

par etienneitoto » 06 sept. 2010, 10:54

Je continue parce que j'ai d'autres soucis....

Lorsque j'envoie une requête prepare, puis execute, il ne m'envoie pas systématiquement ce que je demande, je ne comprends pas pourquoi.
J'ai un formulaire, dont certains champs sont obligatoires, mais pas d'autres.
Lorsque je ne remplis que les champs obligatoires, ça envoie tout vers le serveur, et d'autres fois non, sans que je comprenne pourquoi ! Y a-t-il une raison ?

Voici mon code d'envoi, qui marche de façon aléatoire.
Côté base de données, tout est en entier, sauf les dates (DateDepart, DateArrivee, etc...), MdP,, Precisions et tous les champs de Nom à Mail, qui sont des TXT.

Merci de votre aide précieuse !
$req=$bdd->prepare('INSERT INTO '.$base.' (Dossier, MdP, FormulaireRecu, FormulaireLu, MailEnvoyeLogement, Nom, Prenom, Adresse,
		 Ville, Telephone, Fax, Portable, Mail, ChoixLogement, ChoixFormule, ChoixConfort, NombreCouples, NombreHommes, NombreDames,
		NombreEnfants10,NombreEnfants5,NombreReligieux,NombreChauffeurs,NombreChambresIndividuelles,NombreChambresDoublesCouples,
		NombreChambresDoubles2Lits,NombreChambresTriples3Lits,NombreChambresTriplesFamille,NombreChambresQuadruples,DateArrivee,DateDepart,Audience, DateAudience, Precisions, Contribution) VALUES (
		:dossier, :mdp, :formulairerecu,:formulairelu, 
		:mailenvoye, 
		:nom, 
		:prenom, 
		:adresse,
		:ville,
		:telephone, 
		:fax, 
		:portable, 
		:mail, 
		:choixlogement, 
		:choixformule, 
		:choixconfort,
		:ncouples, 
		:nhommes, 
		:ndames, 
		:nenfdix, 
		:nenfcinq, 
		:nrel, 
		:nchauf, 
		:nci, 
		:ncdc, 
		:ncddeux, 
		:ncttrois, 
		:nctf, 
		:ncq,
		:datearrivee,
		:datedepart,
		:audience,
		:dateaudience,
		:precisions,
		:contribution		
		)');
		$req->execute(array(
		'dossier'=>$numero_dossier,
		'mdp'=>$mdp,
		'formulairerecu'=> $formulaire_recu,
		'formulairelu' => $formulaire_lu,
		'mailenvoye' => $mail_envoye,
		'nom' => $nom,
		'prenom' => $prenom,
		'adresse' => $adresse,
		'ville' => $ville,
		'telephone' => $telephone,
		'fax' => $fax,
		'portable' => $portable,
		'mail' => $mail,
		'choixlogement' => $choix_logement,
		'choixformule' => $choix_formule,
		'choixconfort' => $choix_confort,
		'ncouples' => $nombre_couples,
		'nhommes' => $nombre_hommes,
		'ndames' => $nombre_dames,
		'nenfdix' => $nombre_enfants10,
		'nenfcinq' => $nombre_enfants5,
		'nrel' => $nombre_religieux,
		'nchauf' => $nombre_chauffeurs,
		'nci' => $nombre_individuelles,
		'ncdc' => $nombre_doublescouple,
		'ncddeux' => $nombre_doubles2lits,
		'ncttrois' => $nombre_triples3lits,
		'nctf' => $nombre_triplesfamille,
		'ncq' => $nombre_quadruples,
		'datearrivee'=>$date_arrivee,
		'datedepart'=>$date_depart,
		'audience'=>$audience,
		'dateaudience'=>$date_audience,
		'precisions'=>$precisions,
		'contribution' => $contribution
		));

Re: Gros soucis apparemment mineurs avec base de données

par etienneitoto » 05 sept. 2010, 22:41

Grand merci !

Re: Gros soucis apparemment mineurs avec base de données

par Ganesh » 05 sept. 2010, 12:53

Bonjour,

Je pense que tu te compliques la vie pour pas grand chose.
A priori, ce que tu souhaites faire est de supprimer l'enregistrement n°1, puis de décrémenter d'un tous les enregistrements restant et enfin de rajouter l'enregistrement n°100. Tu as sans doute une bonne raison de vouloir procéder ainsi et je suis assez curieux de la connaître :)

Il suffit donc de traduire en SQL ce qui est écrit ici en français (d'où l'intérêt d'écrire ce que l'on souhaite avant de se lancer dans le code)
supprimer l'enregistrement n°1
DELETE FROM DossiersRecents WHERE NumeroOrdre = 1 
décrémenter d'un tous les enregistrements restant
UPDATE DossiersRecents SET NumeroOrdre = NumeroOrdre - 1
Et l'insertion pour finir du dernier dossier pour finir.

Gros soucis apparemment mineurs avec base de données

par etienneitoto » 04 sept. 2010, 12:23

Bonjour je suis nouveau sur le forum.

Je suis en train de faire un intranet, et il est pas mal avancé. Je suis en train de galérer parce que le programme ne fait pas ce que je lui demande...! Je m'explique. J'ai une table qui contient tous les deniers dossier créés. Je ne veux pas qu'il y ait plus de 100 entrées (ici 5 pour simplifier). Du coup au moment d'enregistrer un nouveau dossier, si c'est le 100ème, je supprime le premier de la liste et je décale tout, parce que les dossiers récents sont insérés à la fin de la table. Je procède de la façon suivante :
1. Copie de table DossiersRecents vers une table Temporaire
2. Boucle for qui fait des update pour chaque ligne : elle copie la ligne 2 de Temporaire vers la ligne 1 de DossiersRecents, etc... on a donc bien décalé
3. Je supprime la dernière ligne de DossiersRecents
4. Je supprime la table Temporaire
5. Je peux enregistrer la nouvelle entrée

Seulement voilà... j'ai des soucis.
1. La table ne veut pas se créer, pourtant quand je copie la partie du code qui la créé dans un autre programme php, ça le fait
2. Admettons que la table existe déjà (je la créé sous phpmyadmin), il refuse de copier les lignes de Temp vers Dossiers Recents, rien ne se fait

Bref je ne comprends pas, pouvez-vous m'aider ?

Je copie ci-dessous la partie de code que j'ai extraite dans un programme indépendant, l'algorithme de décalage.
<?php

//méthode 1
$host = 'localhost';
$user = '***';
$pass = '***';
$db = '***';
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());


//connexion à la base de données
try
	{$bdd = new PDO('mysql:host=localhost;dbname=***', '***', '***'); }
catch(Exception $e)
	{die('Erreur : '.$e->getMessage());}
	
//création de la base de données temporaire	
mysql_query('CREATE TABLE Temporaire AS SELECT * FROM DossiersRecents');

			
for($i=2;$i<=4;$i++){
			$reponse = $bdd->query('SELECT Dossier, Nom, Prenom, Ville, MoisArrivee, AnneeArrivee,NumeroOrdre FROM Temporaire Where NumeroOrdre='.$i.'');
			$donnees = $reponse->fetch();
			$dossiertemp=$donnees['Dossier'];
			$nomtemp=$donnees['Nom'];
			$prenomtemp=$donnees['Prenom'];
			$villetemp=$donnees['Ville'];
			$moisarriveetemp=$donnees['MoisArrivee'];
			$anneearriveetemp=$donnees['AnneeArrivee'];
			$numeroordretemp=$donnees['NumeroOrdre'];
			$numeroordretemp=$numeroordretemp-1;
			echo $nomtemp; echo $prenomtemp;  echo $villetemp; echo $dossiertemp;
			
			//puis on copie :il s'agit d'essais de copie
			mysql_query('UPDATE DossiersRecents SET Dossier=4 WHERE NumeroOrdre= '.$id.'');
			mysql_query('UPDATE DossiersRecents SET Nom=5 WHERE NumeroOrdre= '.$id.'');
			mysql_query('UPDATE DossiersRecents SET Prenom=6 WHERE NumeroOrdre= '.$id.'');
			mysql_query('UPDATE DossiersRecents SET Ville=7 WHERE NumeroOrdre= '.$id.'');
			mysql_query('UPDATE DossiersRecents SET MoisArrivee=8 WHERE NumeroOrdre= '.$id.'');
			mysql_query('UPDATE DossiersRecents SET AnneeArrivee=9 WHERE NumeroOrdre= '.$id.'');
			mysql_query('UPDATE DossiersRecents SET Dossier=10 WHERE NumeroOrdre= '.$id.'');
			
			//j'ai tout mis en commentaire, mais ça ne marche pas plus qu'au-dessus
			//mysql_query('UPDATE DossiersRecents SET Dossier='.$dossiertemp.' WHERE NumeroOrdre= '.$id.'');
			//mysql_query('UPDATE DossiersRecents SET Nom='.$nomtemp.' WHERE NumeroOrdre= '.$id.'');
			//mysql_query('UPDATE DossiersRecents SET Prenom='.$prenomtemp.' WHERE NumeroOrdre= '.$id.'');
			//mysql_query('UPDATE DossiersRecents SET Ville='.$villetemp.' WHERE NumeroOrdre= '.$id.'');
			//mysql_query('UPDATE DossiersRecents SET MoisArrivee='.$moisarriveetemp.' WHERE NumeroOrdre= '.$id.'');
			//mysql_query('UPDATE DossiersRecents SET AnneeArrivee='.$anneearriveetemp.' WHERE NumeroOrdre= '.$id.'');
			
			
				
			//et on supprime la dernière ligne et la table temporaire : la suppression de la table fonctionne, elle... je l'ai mise en commentaire tout de même pour les besoins de mes essais des débuggage
			mysql_query('DELETE FROM DossiersRecents  WHERE NumeroOrdre=5');
			//mysql_query('DROP TABLE Temporaire');
			}
			?>