[RESOLU] weekend et jours feriés

Mammouth du PHP | 702 Messages

28 août 2012, 10:19

Bonjour à tous, j'ai un script qui marche sous la forme de scenario avec ^plusieurs dates.

En fait tout est cherché dans la base de donnée.

Le soucis c'est que la date enregistrée ne peut être égale ni à un jours ferié ni à un weekend.

J'ai déjà la liste des jours fériés concernés dans la base de donnée.

Le soucis c'est que je ne sais pas comment procéder pour le changement en fait.

voici le code que j'utilise lors de l'enregistrement sur ma base de donnée.
<?php
//var_dump($_POST['data']) ;

if (isset($_POST['liasse']))  {
$value = $_POST['data'] ; 

foreach($value as $key => $array)
{
 
        $sql = 'INSERT INTO agenda SET
		liasse = "'.mysql_real_escape_string($_POST['liasse']).'",
        code_s = "'.mysql_real_escape_string($array['code_s']).'",
        date_action = "'.date('Y-m-d',strtotime($array['date'])).'", 
        libelle = "'.mysql_real_escape_string($array['titre']).'",
        action = "'.mysql_real_escape_string($array['action']).'",
		description = "'.mysql_real_escape_string($array['libelle']).'",
		n_doss = "'.mysql_real_escape_string($_POST['n_doss']).'",
		qualite = "'.mysql_real_escape_string($_POST['qualite']).'"
		';
mysql_query($sql) or die(__LINE__.mysql_error().$sql);

}

}
echo "<script language='javascript'>window.close()</script>";
?>
Je pensais passer par un strreplace mais la fonction me semble peut adapter.

Je pensais aussi passer par javascript mais le soucis c'est que si la personne le désactive même si
c'est plutôt rare dans la base de donnée j'aurais des traitements agendés à des weekends et qui ne seront
pas fait.

Du coup je ne sais pas comment procéder.


Par avance merci pour votre aide.

Eléphant du PHP | 229 Messages

28 août 2012, 11:36

Bonjour,
Pour savoir si c'est le week end tu regarde si je jour est un samedi ou un dimanche.
$datetime = strftime('%A %d %B %Y', strtotime('$ta_date));
%A affiche lundi, mardi etc....

Bon codage.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 août 2012, 11:56

yop plutot $numero = date("w", strtotime($ladate));

et si $numero === 0 ou $numero === 6 tu rejete (plus d'info dans la doc de la fonction date ;)

Attention à la syntaxe :)


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 229 Messages

28 août 2012, 12:57

=== égale en genre et en valeur

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 août 2012, 13:24

En type, oui sinon le zéro peux être confondu avec false ou null
Il en faut peu pour être heureux ......

Mammouth du PHP | 702 Messages

28 août 2012, 14:42

en fait j'ai un script que j'ai fais pour changer les dates si elles sont du weekend au jour suivant.

Mais il ne fonctionne pas.

je ne sais pas pourquoi.

J'ai donc bien mis le tout dans la balise du body avec l'action onload.

voila le code en question:[javascript]<script type="text/javascript">
function getdate()
{
var items = new Array();
var itemCount = document.getElementsByClassName("date");

for(var i = 0; i < itemCount.length; i++)
{
items = document.getElementById("date" + (i+1)).value;
}

return items;

for(var i = 0; i < itemCount.length; i++)
{
items = document.getElementById("date" + (i+1)).value;
var itemDtParts = item.split("-");
var itemDt = new Date(itemDtParts[2], itemDtParts[1] - 1, itemDtParts[0]);
if (itemDt.getDay() == 6 || itemDt.getDay() == 0) {
aler('weekend!');
}
}
}
</script>
[/javascript]

je ne sais pas trop comment procéder.

Je n'ai pas de messages d'erreur, du coup rien ne s'affiche dans la console et je reste avec ce code
qui ne fonctionne pas.

Pour tester j'ai mis une alert mais elle n'est même pas renvoyée.

L'idéal c'est que les jours du weekend soient transformés en lundi. que ce soit le samedi ou le dimanche.

Par avance merci pour votre aide.

ViPHP
ViPHP | 2577 Messages

28 août 2012, 15:50

A part le fait qu'il manque un t à alert('weekend'), je ne vois pas d'erreur de syntaxe.

Il y a aussi un problème de logique avec le return items avant la dernière boucle.

Mammouth du PHP | 702 Messages

28 août 2012, 16:04

j'ai essayé comme cela mais les jours ne changent pas je ne comprends pas pourtant tout semble ok non?[javascript]<script type="text/javascript">
function getdate()
{
var items = new Array();
var itemCount = document.getElementsByClassName("date");

for(var i = 0; i < itemCount.length; i++)
{
items = document.getElementById("date" + (i+1)).value;
}



for(var i = 0; i < itemCount.length; i++)
{
items = document.getElementById("date" + (i+1)).value;
var itemDtParts = items.split("-");
var itemDt = new Date(itemDtParts[2], itemDtParts[1] - 1, itemDtParts[0]);
if (itemDt.getDay() == 6) {

itemCount.value = (itemDt.getDate() < 9 ? "0" : "")+ (itemDt.getDate() + 2)+ "-" +(itemDt.getMonth() < 9 ? "0" : "") + (itemDt.getMonth() + 1) + "-" + itemDt.getFullYear();

}
if (itemDt.getDay() == 0)
{

itemCount.value = (itemDt.getDate() < 9 ? "0" : "")+ (itemDt.getDate() + 1)+ "-" +(itemDt.getMonth() < 9 ? "0" : "") + (itemDt.getMonth() + 1) + "-" + itemDt.getFullYear();
}
return items;
}
</script> [/javascript]

ViPHP
ViPHP | 2577 Messages

28 août 2012, 16:23

itemCount.value => items.value ? (mais je suis une quiche en javascript)

Mammouth du PHP | 702 Messages

28 août 2012, 16:47

non, en fait ça ne fonctionne pas de la sorte.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 août 2012, 22:22

C'est quoi le html qui va avec tous ça ?

j'ai pas l'impression que tu fasse des modifications la :s

as tu testé JQuery ou un autre framework JS qui pourrait te simplifier un peu la vie ? :)


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 702 Messages

29 août 2012, 07:47

Bonjour voici le code utilisé.
<form action="<?php echo (isset($_POST['go'])) ? 'go2.php' : '#'; ?>"
method="post">
    <input type="hidden" name="liasse" value="<?php echo $_GET['liasse']; ?>"
    />
    <input type="hidden" name="n_doss" value="<?php echo $_GET['n_doss']; ?>"
    />
    <table id="box-table-a">
        <tr>
            <th scope="col">
                <input name="data[<?php echo ++$i; ?>][code_s]" type="text" value="CODE S"
                size="10">
            </th>
            <th scope="col">
                <input name="data[<?php echo $i; ?>][libelle]" type="text" value="LIBELLE"
                size="30">
            </th>
            <th scope="col">
                <input name="data[<?php echo $i; ?>][action]" type="text" value="ACTION"
                size="15">
            </th>
            <th scope="col">
                <input name="data[<?php echo $i; ?>][libelle]" type="text" value="DESCRIPTION"
                size="40">
            </th>
            <th scope="col">
                <input type="text" name="data[<?php echo $i; ?>][date]" value="DATE D'ACTION"
                size="12">
            </th>
            <th scope="col">
                <input type="text" name="data[<?php echo $i; ?>][date]" value="VALIDATION"
                size="12">
            </th>
            <th scope="col"><strong>ETAT</strong>
            </th>
        </tr>
        <?php while($row=m ysql_fetch_assoc($qry)): ?>
            <tr>
                <td>
                    <input name="data[<?php echo ++$i; ?>][code_s]" type="text" value="<?php echo $row['code_s'];?>"
                    size="10">
                </td>
                <td>
                    <input name="data[<?php echo $i; ?>][libelle]" type="text" value="<?php echo $row['libelle']; ?>"
                    size="30">
                </td>
                <td>
                    <input name="data[<?php echo $i; ?>][action]" type="text" value="<?php echo $row['action']; ?>"
                    size="15">
                </td>
                <td>
                    <input name="data[<?php echo $i; ?>][libelle]" type="text" value="<?php echo $row['description']; ?>"
                    size="40">
                </td>
                <td>
                    <script type="text/javascript">
                        //<![CDATA[
                        window.addEvent('domready', function () {
                            myCal1 = new Calendar({
                                'data[$i][date]': 'd-m-Y'
                            }, {
                                direction: 0,
                                tweak: {
                                    x: 6,
                                    y: 0
                                }
                            });
                        });
                        //]]>
                    </script>
                    <input type="text" name="data[<?php echo $i; ?>][date]" class="date"
                    id="date<?php echo $i; ?>" value="<?php 


echo date('d-m-Y',strtotime($row['date_action'])) ;

 ?>" size="12">
                </td>
                <td nowrap>
                    <input type="text" name="data[<?php echo $i; ?>][date_validation]" id="data[<?php echo $i; ?>][date_validation]"
                    value="<?php if($row['date_validation']=='0000-00-00') {echo 'Non trait&eacute;' ; }
 else {
echo (date('d-m-Y',strtotime($row['date_validation']))); }
 ?>" size="12">
                </td>
                <td nowrap>
                    <?php if($row[ 'date_validation']=='0000-00-00' AND strtotime($row[
                    'date_action'])>strtotime(date('Y-m-d'))) {?><a href="edit-action.php?id=<?php echo $row['id'] ; ?>&n_doss=<?php echo $row['n_doss'] ; ?>&liasse=<?php echo $_GET['liasse'] ?>&qualite=<?php echo $_GET['qualite'] ?>"><img src="images/gtk-edit.png" width="24" height="24"></a> 
                        <a
                        href="validate-action.php?id=<?php echo $row['id'] ; ?>&n_doss=<?php echo $row['n_doss'] ; ?>&liasse=<?php echo $_GET['liasse'] ?>&qualite=<?php echo $_GET['qualite'] ?>">
                            <img src="images/go.gif" width="24" height="24">
                            </a> <a href="delete-action.php?id=<?php echo $row['id'] ; ?>&n_doss=<?php echo $row['n_doss'] ; ?>&liasse=<?php echo $_GET['liasse'] ?>"
                            onClick="return confirm('voulez vous vraiment supprimer cette action ?')"><img src="images/trash-paper.png" width="24" height="24"></a>
                            <?php
                            } elseif($row[ 'date_validation']=='0000-00-00' AND strtotime($row[
                            'date_action'])<=strtotime(date( 'Y-m-d'))) {?><a href="#" onClick="return confirm('Vous ne pouvez pas &eacute;diter ou changer la date d\'une action appartenant à votre passif !')"><img src="images/gtk-edit.png" width="24" height="24"></a> 
                                <a
                                href="validate-action.php?id=<?php echo $row['id'] ; ?>&n_doss=<?php echo $row['n_doss'] ; ?>&liasse=<?php echo $_GET['liasse'] ?>&qualite=<?php echo $_GET['qualite'] ?>">
                                    <img src="images/go.gif" width="24" height="24">
                                    </a> <a href="#" onClick="return confirm('Vous ne pouvez pas supprimer une action appartenant à votre passif !')"><img src="images/trash-paper.png" width="24" height="24"></a>
                                    <?php
                                    } else { ?>
                                        <img src="images/tick_48.png" width="24" height="24">
                                        <?php } ?>
                </td>
            </tr>
            <?php endwhile; ?>
                </td>
                </tr>
    </table>

Mammouth du PHP | 702 Messages

29 août 2012, 08:55

en fait le problème est dans ces lignes:

[javascript]if (itemDt.getDay() == 6) {

itemCount.value = itemDt.getDate()+ "-" + (itemDt.getMonth() < 9 ? "0" : "") + (itemDt.getMonth() + 1) + "-" + itemDt.getFullYear();


}
if (itemDt.getDay() == 0) {

itemCount.value = itemDt.getDate()+ "-" + (itemDt.getMonth() < 9 ? "0" : "") + (itemDt.getMonth() + 1) + "-" + itemDt.getFullYear();

}[/javascript]

elle devrait changer vetrs le sprochain lundi que ce soit samedui ou dimanche mais les jours restent les même

Mammouth du PHP | 702 Messages

29 août 2012, 09:14

j'ai essayé ainsi [javascript]
document.getElementById('date').value = (itemDt.getDate() < 9 ? "0" : "")+ (itemDt.getDate()+2)+ "-" + (itemDt.getMonth() < 9 ? "0" : "") + (itemDt.getMonth() + 1) + "-" + itemDt.getFullYear();[/javascript]

mais ça ne fonctionne pas aussi j'ai fais comme ça [javascript] itemCount.value = (itemDt.getDate() < 9 ? "0" : "")+ (itemDt.getDate()+2)+ "-" + (itemDt.getMonth() < 9 ? "0" : "") + (itemDt.getMonth() + 1) + "-" + itemDt.getFullYear();
[/javascript]

ça fonctionne bien mais que lorsque je clic après au bout d'une microsecondes les dates reprennent leur valeurs originales.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 août 2012, 09:22

je te conseil de tester la chose sur chrome et d'utiliser l'extension developper qui te permettras de debug ton JS et donc de suivre ce qui se passe ;)



@+
Il en faut peu pour être heureux ......