Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

comparare date [rezolvat]
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Incepători
Subiectul anterior :: Subiectul următor  
Autor Mesaj
danielsen



Data înscrierii: 14/Feb/2004
Mesaje: 104
Locație: Cluj-Napoca

Trimis: Joi Mai 15, 2008 10:00 am    Titlul subiectului: comparare date [rezolvat]  

Am un formular cu cateva campuri printre care si niste <select>-uri cu data publicarii si data limita a afisarii unui articol. As vrea ca, atunci cand un utilizator alege data publicarii mai mare decat data limita, sa nu trimita formularul, iata cum arata:

Cod: <?php
...
case 'adauga-articol':

if (isset($_POST['salvare'])) {

$interogare = "INSERT INTO articole (titlul, ..., publicat_zi, publicat_luna, publicat_an, end_zi, end_luna, end_an) VALUES ('{$_POST['publicat_zi']}', '{$_POST['publicat_luna']}', '{$_POST['publicat_an']}', '{$_POST['end_zi']}', '{$_POST['end_luna']}', '{$_POST['end_an']}')";
$id = mysql_insert_id();

if (@mysql_query ($interogare)) {
  echo '<meta http-equiv=refresh content="2; url=...&amp;actiune=continut">';
      echo 'Adaugat cu succes.';
} else {
      echo '<meta http-equiv=refresh content="2; url=...&amp;actiune=adauga-articol">';
      echo 'Eroare';
}
} else {
?>

<form action="..." method="POST">
zi <select name="publicat_zi">
      <option value="1">1</option>
      <option value="2">2</option>
      ...
      <option value="31">31</option>
</select>

luna <select name="publicat_luna">
      <option value="1">1</option>
      <option value="2">2</option>
      ...
      <option value="12">12</option>
</select>

an <select name="publicat_an">
      <option value="2008">2008</option>
      <option value="2009">2009</option>
      ...
      <option value="2017">2017</option>
</select>

<br />

zi <select name="end_zi">
      <option value="1">1</option>
      <option value="2">2</option>
      ...
      <option value="31">31</option>
</select>

luna <select name="end_luna">
      <option value="1">1</option>
      <option value="2">2</option>
      ...
      <option value="12">12</option>
</select>

an <select name="end_an">
      <option value="2008">2008</option>
      <option value="2009">2009</option>
      ...
      <option value="2017">2017</option>
</select>

<br />

<input type="submit" ... name="salvare" value="salvare" />
</form>

<?php
}
break;
?>

am incercat ceva de genul:
if (($_POST['publicat_an'] && $_POST['publicat_luna'] && $_POST['publicat_zi']) > ($_POST['end_an'] && $_POST['end_luna'] && $_POST['end_zi'])) {
echo 'Data publicarii nu poate fi mai mare decat data limita';
}

Dar nu merge asa. Am nevoie sugestii unde si cum se face comparatia. Daca s-ar putea face chestia asta in javascript ar fi si mai bine, daca nu, raman la php.
Sus  
Copyright



Data înscrierii: 17/Dec/2006
Mesaje: 860
Locație: Bucuresti

Trimis: Joi Mai 15, 2008 2:38 pm    Titlul subiectului:  

Cod:
<form action="" method="POST" id="iform">
......................................
......................................
window.onload = function(){      
      
   document.getElementById('iform').onsubmit = function(){      
      if(this.publicat_zi.value > this.end_zi.value ||
         this.publicat_luna.value > this.end_luna.value ||
         this.publicat_an.value > this.end_an.value){         
         alert('Data publicarii nu poate fi mai mare decat data limita');
         return false;
      }
   }
}
......................................
......................................
if ($_POST['publicat_an'] > $_POST['end_an']  ||
    $_POST['publicat_luna'] > $_POST['end_luna'] ||
    $_POST['publicat_zi']) > $_POST['end_zi']) {
echo 'Data publicarii nu poate fi mai mare decat data limita';
}
 

Later.
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1801
Locație: Sibiu

Trimis: Joi Mai 15, 2008 3:28 pm    Titlul subiectului:  

Copyright a scris: Cod:
<form action="" method="POST" id="iform">
......................................
......................................
window.onload = function(){      
      
   document.getElementById('iform').onsubmit = function(){      
      if(this.publicat_zi.value > this.end_zi.value ||
         this.publicat_luna.value > this.end_luna.value ||
         this.publicat_an.value > this.end_an.value){         
         alert('Data publicarii nu poate fi mai mare decat data limita');
         return false;
      }
   }
}
......................................
......................................
if ($_POST['publicat_an'] > $_POST['end_an']  ||
    $_POST['publicat_luna'] > $_POST['end_luna'] ||
    $_POST['publicat_zi']) > $_POST['end_zi']) {
echo 'Data publicarii nu poate fi mai mare decat data limita';
}
 
publicat_an = 2007
publicat_luna = 12
publicat_zi = 20

end_an = 2008
end_luna = 05
end_zi = 01

in aceste conditii ambele if-uri returneaza true. Desi 20.12.2007 e inainte de 01.05.2008.

Danielsen, poti folosi codul lui Copyright, cu 2 modificari:
in js: Cod: if(this.publicat_an.value + this.publicat_luna.value + this.publicat_zi.value > this.end_an.value + this.end_luna.value + this.end_zi.value) ...
in php: Cod: if ($_POST['publicat_an'] . $_POST['publicat_luna'] . $_POST['publicat_zi'] > $_POST['end_an'] . $_POST['end_luna'] . $_POST['end_zi']) ...

//edit: se pare ca am postat cam in acelasi timp. In codul meu original se strecurase o greseala, acum e ok.

//later edit: danielsen, ca sa iti mearga codul bine, trebuie ca luna si ziua sa fie de 2 cifre, adica de forma 01, 02, 03, nu 1, 2, 3.
Sus  
danielsen



Data înscrierii: 14/Feb/2004
Mesaje: 104
Locație: Cluj-Napoca

Trimis: Joi Mai 15, 2008 3:28 pm    Titlul subiectului:  

Super, merci, merge, dar tocmai asta am incercat sa evit, comparatia intre fiecare valoare in parte.

Daca am publicat_an > end_an e ok sa atentioneze, dar daca luna si ziua au aceleasi conditii, atunci cand introduc un articol pt data de 25.08.2008 si limita la 2.09.2008, nu ma va lasa fiindca publicat_zi.value > end_zi.value, dar data intreaga 25.08.2008 nu este mai mare decat 2.09.2008, si e o problema. Am incercat sa inversez conditiile cu an || luna || zi in loc de zi || luna || an, dar nu pare sa conteze prea mult in js, fata de mysql unde care ordinea campurilor conteaza.

Nu se poate extrage valorile din publicat_an.value, publicat_luna.value, publicat_zi.value si apoi concatenate cumva sa formeze o data de forma 00-00-0000 si apoi sa se faca comparatia intre date? Nu stiu sa fac asta in js, nu prea cunosc sintaxa, dar ca idee asa cred ca as face.
Sus  
danielsen



Data înscrierii: 14/Feb/2004
Mesaje: 104
Locație: Cluj-Napoca

Trimis: Joi Mai 15, 2008 3:29 pm    Titlul subiectului:  

Asta-i :D Vad ca mi-a raspuns mihaita intre timp... a ghicit problema. Incerc imediat.
Sus  
danielsen



Data înscrierii: 14/Feb/2004
Mesaje: 104
Locație: Cluj-Napoca

Trimis: Joi Mai 15, 2008 8:11 pm    Titlul subiectului:  

Toate bune si frumoase, dar am nevoie de conditie ca toate valorile (sau cel putin ziua la fiecare) astea sa fie diferite de 0.

Cod: <script type="text/javascript">
  window.onload = function() {
  document.getElementById('iform').onsubmit = function() {
     if (this.publicat_an.value + this.publicat_luna.value + this.publicat_zi.value > this.end_an.value + this.end_luna.value + this.end_zi.value) {
        alert('Atentie! Data publicarii nu poate depasi data limita a afisarii articolului!');
        return false;
     }
  }
}
</script>

Am incercat cu fiecare in parte
if ((this.publicat_an.value > 0) + (this.publicat_luna.value > 0)...
cum se poate scrie altfel?
daca data publicarii (ziua != 0) > data limita (ziua != 0) sa afiseze mesajul. Deci daca ziua = 0, sa lase in pace, nu vreau sa afiseze mesajul. Cum ii asta in js? Valorile trebuie scrise in ghilimele?
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1801
Locație: Sibiu

Trimis: Vin Mai 16, 2008 9:48 am    Titlul subiectului:  

Cod:
 <script type="text/javascript">
  window.onload = function() {
  document.getElementById('iform').onsubmit = function() {
     var ziAsInt = parseInt(this.publicat_zi.value);
     if (ziAsInt != 0 && !isNaN(ziAsInt))
       if (this.publicat_an.value + this.publicat_luna.value + this.publicat_zi.value > this.end_an.value + this.end_luna.value + this.end_zi.value) {
         alert('Atentie! Data publicarii nu poate depasi data limita a afisarii articolului!');
         return false;
     }
  }
}
</script>
Sus  
dechim



Data înscrierii: 10/Mai/2005
Mesaje: 656
Locație: Drobeta Turnu Severin

Trimis: Vin Mai 16, 2008 9:58 am    Titlul subiectului:  

Aici
Cod:
....
if (this.publicat_an.value + this.publicat_luna.value + this.publicat_zi.value > this.end_an.value + this.end_luna.value + this.end_zi.value) {
...

corect e :
Cod:
...
if (10000*this.publicat_an.value + 100*this.publicat_luna.value + this.publicat_zi.value > 10000*this.end_an.value + 100*this.end_luna.value + this.end_zi.value) {
...

Se vor compara datele ca numar dar in format AAAALLZZ
Sus  
mihaitha



Data înscrierii: 04/Mai/2007
Mesaje: 1801
Locație: Sibiu

Trimis: Vin Mai 16, 2008 10:00 am    Titlul subiectului:  

dechim, gresit. Trust me, m-am lovit de problema asta. In JS String-ul e tata lor. 10 + '1' = '101'. Va face concatenarea cum trebuie (+ e si operator de concatenare stringuri).
Sus  
dechim



Data înscrierii: 10/Mai/2005
Mesaje: 656
Locație: Drobeta Turnu Severin

Trimis: Vin Mai 16, 2008 11:44 am    Titlul subiectului:  

Da Mihaitha, asa e, n-am observat ca-s string-uri. Ideea e ca si eu m-am lovit si dupa parseInt(camp) mi-a functionat fara probleme. E ok !
Sus  
danielsen



Data înscrierii: 14/Feb/2004
Mesaje: 104
Locație: Cluj-Napoca

Trimis: Vin Mai 16, 2008 8:55 pm    Titlul subiectului:  

Super, de data asta merge cum vreau. Thanks Mihaitha, cum ai zis tu, merge.
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Incepători
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community