[ASP] Qu'est ce qui ne marche pas dans mon code ? ( simple )

Qu'est ce qui ne marche pas dans mon code ? ( simple ) [ASP] - ASP - Programmation

Marsh Posté le 30-06-2004 à 09:05:22    

Comme ça ça marche :
 

Code :
  1. <!-- #include file="_connexion.asp"-->
  2. <%
  3. dim nb
  4. nb=0
  5. SQL="SELECT * FROM abonnes WHERE email='" & Request.form("email" ) & "'"
  6. Set RS = server.createobject("ADODB.Recordset" )
  7. RS.Open SQL,Conn , 3, 3
  8. RS.Move(Ndeb)
  9. while not RS.eof
  10.    ' affiche le champ
  11.    nb=1
  12.    ' fiche suivante
  13.    RS.MOVENEXT
  14. wend
  15. RS.close
  16. Response.redirect "infospersos.asp?email=" & Request.form("email" )
  17. %>


 
Comme ça ça marche plus :
 

Code :
  1. <!-- #include file="_connexion.asp"-->
  2. <%
  3. dim nb
  4. nb=0
  5. SQL="SELECT * FROM abonnes WHERE email='" & Request.form("email" ) & "'"
  6. Set RS = server.createobject("ADODB.Recordset" )
  7. RS.Open SQL,Conn , 3, 3
  8. RS.Move(Ndeb)
  9. while not RS.eof
  10.    ' affiche le champ
  11.    nb=1
  12.    ' fiche suivante
  13.    RS.MOVENEXT
  14. wend
  15. RS.close
  16. if nb=0
  17. Conn.execute("INSERT INTO abonnes (email) VALUES ('" & Request.form("email" ) & "') " )
  18. end if
  19. Response.redirect "infospersos.asp?email=" & Request.form("email" )
  20. %>


 
QQn peut m"expliquer pkoi ? merci d'avance!

Reply

Marsh Posté le 30-06-2004 à 09:05:22   

Reply

Marsh Posté le 30-06-2004 à 09:12:45    

j'ai rajouté ça en fait :  
 

Code :
  1. if nb=0
  2.      Conn.execute("INSERT INTO abonnes (email) VALUES ('" & Request.form("email" ) & "') " )
  3.   end if

Reply

Marsh Posté le 30-06-2004 à 09:46:44    

nb= nb + 1  
 
toi tu lui dit nb=1 et après tu recherche nb=0 ???

Reply

Marsh Posté le 30-06-2004 à 09:55:29    

oui ça veut dire que si il y a une ligne qui correspond a cette requete, je passe nb à 1 donc je ne fais pas l'insertion plus bas, ça revient au meme je pense de faire nb=nb+1 ( j'ai essayé et ça ne passe pas non plus )

Reply

Marsh Posté le 30-06-2004 à 10:00:17    

N'est ce pas:

Code :
  1. if nb=0 then


 
En tout cas, c'est comme ça en VB.
 
Edit: le gras n'a pas pris...


Message édité par JihemAir le 30-06-2004 à 10:00:59
Reply

Marsh Posté le 30-06-2004 à 10:03:19    

merci pour ta réponse j'ai essayé mais ça passe tjrs pas :(

Reply

Marsh Posté le 30-06-2004 à 10:13:16    

Essaie en passant par une variable:
 
strSQL = "INSERT INTO abonnes (email) VALUES ('" & Request.Form("email" ) & "') "
Conn.Execute strSQL

Reply

Marsh Posté le 30-06-2004 à 10:15:55    

tjr rien :( mais j'ai l impression que mon erreur est dans le if / end if pq qd je fais :

Code :
  1. if nb=0 
  2.          nb=1 
  3.     end if


 
ça ne marche pas non plus ...

Reply

Marsh Posté le 30-06-2004 à 10:17:18    

La structure du if c'est
 

Code :
  1. if condition then
  2.     instructions
  3. else
  4.      instructions
  5. end if


 
j'ai un petit doute sur le end if, à savoir si ce n'est pas en un seul mot ??


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 30-06-2004 à 10:22:04    

si j'attache le end et le if ce n'est plus reconu comme une fonction par mon interpreteur html ...

Reply

Marsh Posté le 30-06-2004 à 10:22:04   

Reply

Marsh Posté le 30-06-2004 à 10:23:06    

Puisqu'on te dis:
if b=0 then

Reply

Marsh Posté le 30-06-2004 à 10:23:38    

Par contre le then est obligatoire. Ce serait bien également si tu nous donnait les messages d'erreur


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 30-06-2004 à 10:25:13    

JiHemAir et Lord ii > oui pour le then j'ai testé et repondu a JiHemAir que ça ne fonctionnait pas plus ...

Reply

Marsh Posté le 30-06-2004 à 10:26:10    

Impossible d'afficher la page  
Il y a un problème avec la page que vous essayez d'atteindre ; elle ne peut pas être affichée.  
 
--------------------------------------------------------------------------------
 
Essayez de la manière suivante :
 
Ouvrez la page de démarrage www.****.fr et recherchez des liens vers les informations voulues.  
Cliquez sur le bouton  Actualiser ou réessayez ultérieurement.
 
Cliquez sur  Rechercher pour trouver des informations sur Internet.  
Vous pouvez également consulter une liste de sites apparentés.  
 
 
HTTP 500 - Erreur interne de serveur  
Internet Explorer


Message édité par seb-belfort le 30-06-2004 à 10:26:40
Reply

Marsh Posté le 30-06-2004 à 10:32:52    

seb-belfort a écrit :

JiHemAir et Lord ii > oui pour le then j'ai testé et repondu a JiHemAir que ça ne fonctionnait pas plus ...

Oui mais bon, faut le mettre quand même. As tu essayé en passant par une variable ?

Reply

Marsh Posté le 30-06-2004 à 10:34:09    

oui je l'ai laissé je pense aussi qu'il faut le mettre, j'ai essayé aussi en passant par une variable

Reply

Marsh Posté le 30-06-2004 à 10:37:20    

T'as les droits pour écrire dans ta base ?

Reply

Marsh Posté le 30-06-2004 à 10:44:24    

oui parceque je l'ai fait sur une autre page ...

Reply

Marsh Posté le 30-06-2004 à 10:46:04    

si je fais ça ça ne marche pas non plus :

Code :
  1. <!-- #include file="_connexion.asp"-->
  2. <%
  3. dim nb
  4. nb=0
  5. SQL="SELECT * FROM abonnes WHERE email='" & Request.form("email" ) & "'"
  6. Set RS = server.createobject("ADODB.Recordset" )
  7. RS.Open SQL,Conn , 3, 3
  8. RS.Move(Ndeb)
  9. ' tant qu'il reste des fiches
  10. while not RS.eof
  11.    nb=1
  12.    RS.MOVENEXT
  13. wend
  14. if nb=0 then
  15. Response.write("ok" )
  16. end if
  17. Response.redirect "infospersos.asp?email=" & Request.form("email" )
  18. %>

Reply

Marsh Posté le 30-06-2004 à 10:49:26    

Il faudrait surtout que tu obtiennes des messages d'erreurs plus explicites, je pense que cela devrait te faciliter la vie


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 30-06-2004 à 10:50:11    

Déja, ca plante où et avec quel message d'erreur ?
 
Ensuite, n'utilise JAMAIS la méthode .move(), surtout avec le mode de connection qui est utilisé en ASP, dans un programme VB avec le bon type de recordset, à la limite...
 
A la place, met :
 
errorMsg = ""
for i = 1 to Ndeb
   if rs.EOF then
      errorMsg = "Fin du recordset dépassé !"
      exit for
   else
      rs.MoveNext
   end if
next
 
if errorMsg <> "" then
   rs.Close
   Response.Write errorMsg
   Response.End
end if


Message édité par Arjuna le 30-06-2004 à 10:50:22
Reply

Marsh Posté le 30-06-2004 à 10:51:28    

Pour avoir un vrai message d'erreur :
1) Sur IIS, active l'affichage des messages d'erreur (normalement c'est par défaut)
2) Dans IE, désactive les messages d'erreur simplifiés (outils > option internet > avancées)


Message édité par Arjuna le 30-06-2004 à 10:51:40
Reply

Marsh Posté le 30-06-2004 à 10:54:00    

A mon avis, RS.Move(Ndeb) ne sert à rien. (Ndeb) n'est pas déclaré. En plus, si RS est vide, tu plantes là.
Ensuite, je ferai:
Do While not RS.eof
  RS.MoveNext
Loop
 
Edit: Barbecued !


Message édité par JihemAir le 30-06-2004 à 10:56:03
Reply

Marsh Posté le 30-06-2004 à 10:57:46    

ouf merci j'ai les messages d'erreur :
 
ADODB.Recordset error '800a0bcd'  
 
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.  
 
/newsletter/validation.asp, line 8  
 
( dslé je suis en mini reunion en mm tps )

Reply

Marsh Posté le 30-06-2004 à 11:01:16    

Je suis de l'avis de JiHemAir et de Arjuna, il faut supprimer ce rs.move(Ndeb) se situant avant la boucle while.


---------------
La bave du crapaud n'empèche pas la caravane de passer .
Reply

Marsh Posté le 30-06-2004 à 11:03:16    

Il faut aussi tester ton recordset après la lecture:
If Rs.BOF And Rs.EOF Then --> Rs est vide.
  Requete Ajout

Reply

Marsh Posté le 30-06-2004 à 11:12:45    

sinon euh...
 
"select count(*) nbA from abonnes where email = '" & Replace(Request.Form("email" ), "'", "''" ) & "'"
 
Ensuite, pas besoin de tester quoi que ce soit...
 
if rs("nbA" ) = 0 then
   cnx.execute "insert ..."
else
   response.write "t'es déjà inscrit abrutis !"
end if
 
 
 
En effet, count() retournera toujours une ligne, même s'il n'y a rien :
 
select count(*) from dual where 1 = 0
 
=> Ca retourne une ligne avec 0, alors que DUAL est une table fictive, et que 1 = 0 ca a tendance a toujours être faux...


Message édité par Arjuna le 30-06-2004 à 11:19:13
Reply

Marsh Posté le 30-06-2004 à 11:14:06    

Pour la petite histoire, en plus ce sera infiniment plus rapide.

Reply

Marsh Posté le 30-06-2004 à 11:15:15    

Merci ça marche grace a vous tous !! super merci encore :

Code :
  1. <!-- #include file="_connexion.asp"-->
  2. <%
  3. SQL="SELECT * FROM abonnes WHERE email='" & Request.form("email" ) & "'"
  4. Set RS = server.createobject("ADODB.Recordset" )
  5. RS.Open SQL,Conn , 3, 3
  6. ' tant qu'il reste des fiches
  7. Do While not RS.eof
  8.   RS.MoveNext
  9. Loop
  10. If Rs.BOF And Rs.EOF Then
  11. Conn.execute("INSERT INTO abonnes (email) VALUES ('" & Request.form("email" ) & "') " )
  12. end if
  13. Response.redirect "infospersos.asp?email=" & Request.form("email" )
  14. %>

Reply

Marsh Posté le 30-06-2004 à 11:16:30    

Arjuna > merci pour ta solution , si j'ai le temps j'esserai de faire comme ça ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed