Webmaster Hub: ASP : Empêcher de sélectionner deux fois une même date - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

ASP : Empêcher de sélectionner deux fois une même date Noter : -----

#1 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 22 avril 2009 - 11:04

Bonjour à tous,

je suis en train de créer une application permettant de réserver du matériel dans une entreprise.

Pour cela, les utilisateurs doivent sélectionner le matériel et indiquer ensuite les dates de reservation. Bien entendu, le même appareil ne peut pas être réservé deux fois le même jour. J'aimerai donc qu'un message apparaisse si quelqu'un sélectionne une date déjà prise. Malheureusement, je ne sais pas du tout comment faire...

Voici le code de ma page :

<%
NoPretReservation = request.QueryString("NoPretReservation")
NomReservation = request.QueryString("NomReservation")
LoginReservation = request.QueryString("LoginReservation")
DateDebutReservation = request.QueryString("DateDebutReservation")
DateFinReservation = request.QueryString("DateFinReservation")
NoPretMateriel = request.QueryString("NoPretMateriel")
Valider = request.QueryString("Valider")

set RS = Server.CreateObject("ADODB.recordset")
ConnString ="driver={SQL Server}; server=XXXXX;uid=dbIntraInterHevs; pwd=XXX;database=XXX"

if request.QueryString("Supp") = "ok" then 
RS.Open "select * from PretReservation", ConnString, 2, 3, 8
RS.Find "NoPretReservation =" &NoPretReservation
RS.Delete
RS.Close

Response.Redirect("index.asp?nocategorie="&request.QueryString("nocategorie")&
"&NoPage=1501&nolangue="&request.QueryString("nolangue")&"&
noDomaine="&request.QueryString("noDomaine")&"&NoPretMateriel="&
NoPretMateriel)
end if
%>
<%
if Valider = "Valider" then

	RS.Open "select * from PretReservation", ConnString, 2, 3, 8
	RS.addnew()
	
	rs("DateDebutReservation") = DateDebutReservation
	rs("DateFinReservation") = DateFinReservation
	rs("NomReservation") = NomReservation
	rs("LoginReservation") = session("Login")
	rs("NoPretMateriel") = NoPretMateriel
	RS.update
	RS.close
%>
R&eacute;servation effectu&eacute;e !<br>
<br>
<a href="index.asp?nocategorie=<%=request.QueryString("nocategorie")%>&NoPage=1501&
nolangue=<%=request.QueryString("nolangue")%>&noDomaine=<%=request.QueryString("
noDomaine")%>&NoPretMateriel=<%=request.QueryString("NoPretMateriel")%>"
>Retour</a>
<%	
else
    RS.Open "select * from PretMateriel where NoPretMateriel="&NoPretMateriel, ConnString, 2, 3, 8 
%>
    <form name="FormMateriel" method="get" action="index.asp">
    <table border="0" cellpadding="0" cellspacing="5">
    <tr>
        <td valign="top" width="15%"><b>Mat&eacute;riel</b></td>
        <td valign="top"><b>:</b></td>
        <td valign="top"><b><%= rs("NomMateriel")%></b></td>
    </tr>
    <tr><td valign="top">&nbsp;</td></tr>
    <tr>
        <td valign="top" width="15%">Description</td>
        <td valign="top">:</td>
        <td valign="top" align="justify"><em><%= rs("DescriptionMateriel")%></em></td>
    </tr>
    <tr><td valign="top">&nbsp;</td></tr>
    <tr>
        <td valign="top" width="15%">Login</td>
        <td valign="top">:</td>
        <td valign="top"><%= session("login")%></td>    
    </tr>
    <tr><td valign="top">&nbsp;</td></tr>
    <input type="hidden" name="nocategorie" value="<%=request.QueryString("nocategorie")%>">
    <input type="hidden" name="NoPage" value="<%=request.QueryString("NoPage")%>">
    <input type="hidden" name="nolangue" value="<%=request.QueryString("nolangue")%>">
    <input type="hidden" name="noDomaine" value="<%=request.QueryString("noDomaine")%>">
    <input type="hidden" name="NoPretMateriel" value="<%=NoPretMateriel%>">
    <tr>
        <td valign="top">Nom</td>
        <td valign="top">:</td>
        <td valign="top"><input type="text" name="NomReservation"></td>
    </tr>
    <tr><td valign="top">&nbsp;</td></tr>
    <%session.lcid = 2048%>
    <tr>
        <td valign="top" width="15%">Date de d&eacute;but</td>
        <td valign="top">:</td>
        <td valign="top">
            <select name="DateDebutReservation">
            <%
            for i = 1 to 365
            DateDebut = date() + i
            %>
            <option value="<%= DateDebut %>"><%= DateDebut %></option>
            <%next%>
            </select>
        </td>        
    </tr>
    <tr><td valign="top">&nbsp;</td></tr>
    <tr>
        <td valign="top" width="15%">Date de fin</td>
        <td valign="top">:</td>
        <td valign="top">
            <select name="DateFinReservation">
            <%
            for i = 1 to 365
            DateFin = date() + i
            %>
            <option value="<%= DateFin %>"><%= DateFin %></option>
            <%next%>
            </select>
        </td>
    </tr>
    <tr><td valign="top">&nbsp;</td></tr>
    </table>
    <input type="submit" name="Valider" value="Valider"><input type="reset">
    </form>
    <%
    RS.Close 
    %>
    <a href="index.asp?nocategorie=<%=request.QueryString("nocategorie")%>&NoPage=1500&
nolangue=<%=request.QueryString("nolangue")%>&noDomaine=<%=request.QueryString("
noDomaine")%>">Retour</a>
    <hr>
    <%session.lcid = 1033%>
    <%RS.Open "select * from PretMateriel, PretReservation where PretMateriel.NoPretMateriel = PretReservation.NoPretMateriel and PretMateriel.NoPretMateriel="&NoPretMateriel&"  order by DateDebutReservation", ConnString, 2, 3, 8%>
    <%session.lcid = 2048%>
    <p class="titre2">Dates r&eacute;serv&eacute;es :</p>
    <%if rs.eof = true then%>
    	Il n'y a aucune réservation pour l'instant.
    <%else%>
    <table border="0" bordercolor="#047cb4" cellpadding="5" cellspacing="0">
    <tr>
    	<td align="center" width="25%">&nbsp;</td> 
    	<td align="center"><b>D&eacute;but</b></td>
        <td align="center"><b>Fin</b></td>
        <td align="center" width="25%">&nbsp;</td>
    </tr>    
    <%do while rs.eof = false%>
    <%if rs("DateFinReservation") >= date then%>
    <tr>
        <td align="center" width="25%">&nbsp;</td>    	
    	<td align="center"><%=rs("DateDebutReservation")%></td>
        <td align="center"><%=rs("DateFinReservation")%></td>
        <td align="center" width="25%"><%if rs("LoginReservation") = session("Login") then%><a href="index.asp?nocategorie=<%=request.QueryString("nocategorie")%>&NoPage=1501&
nolangue=<%=request.QueryString("nolangue")%>&noDomaine=<%=request.QueryString("
noDomaine")%>&NoPretMateriel=<%=rs("NoPretMateriel")%>&NoPretReservation=<
%=rs("NoPretReservation")%>&Supp=ok">Effacer</a><%else%>&nbsp;
<%end if%></td>
    </tr>
    <%end if%>
    <%
	rs.movenext
	loop
	%>
    </table>
  <%end if 
  RS.Close
  Set rs = nothing
end if  
%>


Et voici à quoi ressemble ma page :

[IMG=http://img14.imageshack.us/img14/3259/reservv.jpg][/IMG]
[IMG=http://img14.imageshack.us/img14/reservv.jpg/1/w573.png][/IMG]


Pouvez-vous m'aider ?

Merci beaucoup ;)
0

#2 L'utilisateur est hors-ligne   Portekoi 

  • Calimérosateur / Dictationneur
  • Groupe : Admin
  • Messages : 3 647
  • Inscrit(e) : 12-janvier 05
  • Genre:Homme
  • Localisation:Meaux
  • Société:CGD

Posté 22 avril 2009 - 13:30

Bonjour,

Si la donnée est stockée en base, pourquoi ne pas allez la chercher ?
Dim sql
sql = "select date_matos from matable where lacle = '" & lacle & "'"
set rs = ConnString.execute(sql)
if not rs.eof then
'mon traitement si le matériel est déjà pris
else
'sinon on insert
end if


Remarques en passant :
1 - Evite de faire du "select *". Sélectionne les champs dont tu as besoin
2 - Rs.Addnew et autre : pas super terrible. Utilise plutôt le SQL comme si dessous :

'Update ou insert ou autre...
sql = "update ma table set monchp = '"&mavaleur&"' where lacle = "& cle &""
set rs = connstring.execute(sql)


Ensuite, renomme connstring en "conn", tu gagneras du temps.

Pour finir, utilises les includes et fais des fonctions ou Sub.

Bon courage


Portekoi
0

#3 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 22 avril 2009 - 15:01

Merci beaucoup pour votre réponse !

J'ai essayé d'aller chercher la date sur la base mais le message d'erreur suivant apparait :

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '.2009'. 

/src/ReservationMateriel/Materiel.asp, line 25


Le problème doit sûrement venir du fait que dans la base les dates sont stockées de la manière suivant : "17.04.2009 00:00:00"

Savez-vous comment faire pour régler ce problème ?

Merci
0

#4 L'utilisateur est hors-ligne   Portekoi 

  • Calimérosateur / Dictationneur
  • Groupe : Admin
  • Messages : 3 647
  • Inscrit(e) : 12-janvier 05
  • Genre:Homme
  • Localisation:Meaux
  • Société:CGD

Posté 22 avril 2009 - 15:13

Re,

Si vous êtes sous Sql Server, la date doit être ainsi :05/04/2007 15:48:33

il faut remplacer les "." par des "/" dans ta requête avec la fonction ASP : replace soit :

sql = "select truc from bidule where cle = '"&cle&"' and madate = '"&replace(madate, ".", "/") &"'"
set rs = ...

0

#5 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 22 avril 2009 - 15:18

Re,

pourtant, dans ma base, les données sont comme ceci : "23.04.2009 00:00:00"...

Comment pourrais-je faire pour modifier ça ?

Merci
0

#6 L'utilisateur est hors-ligne   Portekoi 

  • Calimérosateur / Dictationneur
  • Groupe : Admin
  • Messages : 3 647
  • Inscrit(e) : 12-janvier 05
  • Genre:Homme
  • Localisation:Meaux
  • Société:CGD

Posté 22 avril 2009 - 15:25

Tu as bien un format datetime ?

C'est quoi ta version de Sql Server ? Quelle langue?
0

#7 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 22 avril 2009 - 15:32

Non j'ai le format "smalldatetime". Je vais essayer de le changer.

J'ai SQL Server 2005, en français.
0

#8 L'utilisateur est hors-ligne   Portekoi 

  • Calimérosateur / Dictationneur
  • Groupe : Admin
  • Messages : 3 647
  • Inscrit(e) : 12-janvier 05
  • Genre:Homme
  • Localisation:Meaux
  • Société:CGD

Posté 22 avril 2009 - 15:43

Je ne connais pas sous 2005 mais une chose, n'oublie pas de mettre des quotes (') pour entourer ta date :

sql = "select champ from table where madate = '"&madate&"'"

0

#9 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 22 avril 2009 - 15:48

J'ai modifié le format des champs et ajouté les quotes. Voici l'erreur qui apparait :


Citation

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

/src/ReservationMateriel/Materiel.asp, line 25

0

#10 L'utilisateur est hors-ligne   Portekoi 

  • Calimérosateur / Dictationneur
  • Groupe : Admin
  • Messages : 3 647
  • Inscrit(e) : 12-janvier 05
  • Genre:Homme
  • Localisation:Meaux
  • Société:CGD

Posté 22 avril 2009 - 16:25

Fais un response.Write de ta requête.
0

#11 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 24 avril 2009 - 09:40

Bonjour,

excusez-moi pour le retard, j'ai eu un empêchement...

Je crois qu'il y a un problème avec la solution que vous me proposez. Dans ma base de données, je stocke uniquement la date de début de la réservation et la date de fin et non pas toutes les dates réservées...

Cela pose donc un problème non ?
0

#12 L'utilisateur est hors-ligne   Portekoi 

  • Calimérosateur / Dictationneur
  • Groupe : Admin
  • Messages : 3 647
  • Inscrit(e) : 12-janvier 05
  • Genre:Homme
  • Localisation:Meaux
  • Société:CGD

Posté 24 avril 2009 - 09:45

Euh non, il suffit de faire une requete pour trouver si la date demandée est supérieure à la date début et inférieure à la date de fin :)

sql = "select monchamp from matable where madatedebut <= '"& mavardate &"' and madatefin >= '"& mavardate &"' and macle = '"& macle &"'"

0

#13 L'utilisateur est hors-ligne   Portekoi 

  • Calimérosateur / Dictationneur
  • Groupe : Admin
  • Messages : 3 647
  • Inscrit(e) : 12-janvier 05
  • Genre:Homme
  • Localisation:Meaux
  • Société:CGD

Posté 27 avril 2009 - 08:40

As tu avancé? Si tu as du code, montre le moi si tu veux :)
0

#14 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 18 juin 2009 - 09:27

Bonjour,

désolé de ne plus avoir répondu, on m'a chargé d'un autre projet qui m'a pris pas mal de temps.

J'ai cependant trouvé une solution à mon problème, voici le code :

RS.Open "select * from PretMateriel, PretReservation where ((DateDebutReservation <= '"&DateDebutReservation&"' and DateFinReservation >= '"&DateDebutReservation&"') or (DateDebutReservation <= '"&DateFinReservation&"' and DateFinReservation >= '"&DateFinReservation&"') or (DateDebutReservation >= '"&DateDebutReservation&"' and DateFinReservation <= '"&DateFinReservation&"') ) and  PretReservation.NoPretMateriel="&NoPretMateriel&" and PretMateriel.NoPretMateriel ="&NoPretMateriel, ConnString, 2, 3, 8


Merci beaucoup pour l'aide apportée.
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)