 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| 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=...&actiune=continut">';
echo 'Adaugat cu succes.';
} else {
echo '<meta http-equiv=refresh content="2; url=...&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 |
|
| |
|