• User Attivo

    conteggio giorni per compleanno

    Salve,
    ho questo codice per calcolare i giorni rimanenti per il compleanno, funziona benissimo, il problema e che se lascio vuoto il campo "birthday" mi genera un errore

    [PHP]
    <?php
    $birthday = $row['birthday'];

    // get date of birthday this calendar year // count day remaing for birthday
    $parts = explode('-', $birthday, 2);
    $birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
    $today = new DateTime('midnight today');

    if ($birth_date < $today) {
    // next birthday is in one year
    $birth_date->modify("+1 Year");
    }

    // get number of days days remaining
    $diff = $birth_date->diff($today);

    if ($diff->days > 0) {
    echo "There are " . $diff->days . " day remaining until your birthday.";
    } else {
    echo '<font color="blue">' . "Happy birthday!" . '</font>';
    }

    ?>
    [/PHP]

    ecco il codice errore

    Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (2019- 00:00:00) at position 4 (-): Unexpected character' in .... on line 239

    line 239

    [PHP]
    $birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
    [/PHP]

    come fixare questo codice?:bho:


  • Moderatore

    Ciao Alex,

    devi fare due cose:

    1. Non dare per scontato che $row["birthday"] sia valorizzato

    Cambia

    $birthday = $row['birthday'];

    con

    $birthday = isset($row['birthday']) ? $row['birthday'] : NULL;

    (Se lo script gira su PHP 7+ puoi abbreviare con: )

    $birthday = $row['birthday'] ?? NULL;

    Questo ti permette di valorizzare la variabile con il suo valore se ne ha uno, altrimenti la setta a NULL.

    1. Devi eseguire tutto il codice solo se $birthday non è NULL, racchiudi tutto dentro un if, il codice finale sarà:

    [PHP]<?php
    $birthday = isset($row['birthday']) ? $row['birthday'] : NULL;
    if($birthday !== NULL){
    $parts = explode('-', $birthday, 2);
    $birth_date = new DateTime(date('Y') . '-' . $parts[1] .' 00:00:00');
    $today = new DateTime('midnight today');
    if ($birth_date < $today) {
    $birth_date->modify("+1 Year");
    }
    $diff = $birth_date->diff($today);
    if ($diff->days > 0) {
    echo "There are " . $diff->days . " day remaining until your birthday.";
    } else {
    echo '<font color="blue">' . "Happy birthday!" . '</font>';
    }
    }
    ?> [/PHP]


  • User Attivo

    Funziona perfettamente 🙂
    avrei un'altra richiesta, vorrei visualizzare i compleanni della data corrente (se ci sono) o settimanale (se non presenti) degli attori nel mio database nella pagina iniziale, con queste specifiche:
    visualizzare
    nome
    eta'
    foto
    link alla scheda (id)
    questi i campi
    nomeimage varchar(45)
    foto varchar(100)
    birthday date

    come devo strutturare il codice?, non so' da dove cominciare

    per l'eta' ho questo code gia' postato in un altro thread

    [PHP]
    <?php // code calcolo eta' by altraSoluzione by Ultima from forum GT

    $datanascita = $row['birthday'];

    $dateOfBirth = $datanascita;
    $today = date("Y-m-d");
    $diff = date_diff(date_create($dateOfBirth), date_create($today));

    ?>[/PHP]

    Grazie Marco 🙂


  • User Attivo

    con questo riesco ad estrarre i nomi

    [PHP]
    <?php

    require_once("connetti.php");
    

    // just returns the actor having a birthday
    function birthday_today() {
    $result = mysql_query("SELECT nome FROM actor WHERE MONTH(birthday) = MONTH(NOW()) AND DAY(birthday) = DAY(NOW())");
    $actor = array();
    while ($row = mysql_fetch_assoc($result))
    $actor[] = $row['nome'];
    return $actor;
    }

    // make a unordered-list out of the actor having birthday
    $ul = "<ul>";
    foreach(birthday_today() as $nome)
    $ul .= "<li>$nome</li>";
    $ul .= "</ul>";

    echo $ul;
    ?>

    [/PHP]

    dovrei integrare adesso questo + l'eta'

    [PHP]
    <td class="text-center"><?php if($row['foto'] != ""): ?>
    <img src="image_upload/actor/uploads/<?php echo $row['foto']; ?>" width="110px" height="130px" style="border:1px solid #333333;">
    <?php else: ?>
    <img src="image_upload/actor/images/nophoto170.png" width="100px" height="130px" style="border:1px solid;">
    <?php endif; ?></td>

    <td class="text-left"><?php echo "<a href="cinema.php?id=" . $row['actor_id'] . "">" . $row['nome'] . "</a>";?></td>

    [/PHP]

    qualcuno mi aiuta?:?:bho:


  • User Attivo

    risolto 🙂


  • User Attivo

    risolto mah...vorrei visualizzare i risultati in ordine orizzontale, come fare?

    codice parziale

    [PHP]

    <div class="col-xs-12 col-sm-9">
    <div class="panel panel-default">
    <div class="panel panel-heading"><h3>Birthday from Today or 1 Week</h3></div>

    <div class="padded-panel"><div class="row"><div class="col-sm-12">

    <?php

    require_once("connetti.php");
    

    // just returns the actor having a birthday

    $query = mysql_query("SELECT * FROM actor WHERE
    

    (CASE
    WHEN DATE_FORMAT(birthday, '%m-%d') < DATE_FORMAT(NOW(), '%m-%d')
    THEN CONCAT(DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 YEAR), '%Y-'), DATE_FORMAT(birthday, '%m-%d'))
    ELSE CONCAT(DATE_FORMAT(NOW(), '%Y-'), DATE_FORMAT(birthday, '%m-%d'))
    END)
    BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 WEEK) ORDER BY birthday asc ");
    while($row=mysql_fetch_array($query)){
    ?>

    <div class="castbox"><p><?php echo '<img src="image_upload/actor/uploads/' . $row['foto'] . '" alt="" height="180" width="150"'?>

    <?php echo $row ['nome'] ?><br><?php echo "<a href="cinema.php?id=" . $row['actor_id'] . "">" ."<br>". $row['nome'] ."<br>". $row ['birthday'] . "</a>";?></a><br><i>

    [/PHP]

    adesso visualizzo cosi

    image