Jump to content
php.lv forumi
knauzers

PHP kalnedārs ar dropdown

Recommended Posts

Sveiki, esmu iesācējs programmēšanā.

Ir dinamiski (PHP) veidots kalendārs, ar dropdown izvēlni katrā no mēneša dienām. Nepieciešams datumu un dropdown izvēlēto opciju aizsūtīt uz SQL tabulu. Ir problēmas tieši ar dropdown value nosūtīšanu. Principā nosūtīta visām mēneša dienām tiek pēdējās dienas dropdown izvēle. Saprotu, ka kaut kur pietrūkst kāds LOOPS.

Varbūt ir kādi padomi / norādījumi, kā šis būtu korekti jārealizē?

Paldies jau iepriekš!

Share this post


Link to post
Share on other sites

Sorry, kods šāds:

<?php
date_default_timezone_set('Europe/Riga');
if (isset($_GET['ym'])) {
    $ym = $_GET['ym'];
} else {
    $ym = date('Y-m');
}
$timestamp = strtotime($ym . '-01');
if ($timestamp === false) {
    $ym = date('Y-m');
    $timestamp = strtotime($ym . '-01');
}
$today = date('Y-m-j', time());
$html_title = date('Y / m', $timestamp);
$prev = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)-1, 1, date('Y', $timestamp)));
$next = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)+1, 1, date('Y', $timestamp)));
$day_count = date('t', $timestamp);
 
$str = date('w', mktime(0, 0, 0, date('m', $timestamp), 0, date('Y', $timestamp)));
$weeks = array();
$week = '';
$week .= str_repeat('<td></td>', $str);
for ( $day = 1; $day <= $day_count; $day++, $str++) {
     
    $date = $ym . '-' . $day;
     
    if ($today == $date) {
        $week .= '<td class="today">' . $day;
    } else {
        $week .= '<td>' . $day;
    }

    $week .= '<br>';
    $week .= '<select name="name">';
    $week .= '<option value="test">test</option>';
    $week .= '<option value="test2">test2</option>';
    $week .= '</select>';

$test3=$_POST['name'];

 

        $link = mysqli_connect("localhost", "root", "xxx", "yyy");
        
        // Check connection
        if($link === false){
            die("ERROR: Could not connect. " . mysqli_connect_error());
        }

        // Attempt insert query execution
        
        $sql = "INSERT INTO dezuranti (Col1, Col2) VALUES ('$date', '$test3)";


        if(mysqli_query($link, $sql)){
            echo "Records were updated successfully.";
        } else {
            echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
        }


        // Close connection
        mysqli_close($link);

 

    if ($str % 7 == 6 || $day == $day_count) {
        if ($day == $day_count) {
            // Add empty cell
            $week .= str_repeat('<td></td>', 6 - ($str % 7));
        }
        $weeks[] = '<tr>' . $week . '</tr>';
        // Prepare for new week
        $week = '';
    }
}        

 

Tālāk ir HTML būvēta tabula iekš formas un Submit poga, lai to visu aizsūtītu uz SQL tabulu.

Share this post


Link to post
Share on other sites

Tur neesi sapratis dažas lietas! Kods, kas uztaisa to <select> tagu un kods, kas saņem un saglabā datus DB, ir divas dažādas koda daļas. No sākuma serveris uztaisa HTML kodu, ko attēlo pārlūks un tajā brīdī nav nekādas darbības ar datu saglabāšanu. Datus saglabā vēlāk, kad pārlūkā tiek submitota forma un serveris saņem datus otru reizi! Tu esi saglabāšanu iekļāvis jau <select> izveidošanas ciklā.

Sadali tā: koda sākumā izliec pārbaudi, vai ir nosūtīti dati:

if (isset($_POST['name'])) {
	$test3=$_POST['name'];
	$link = ...
	...
	// Close connection
	mysqli_close($link);
}

..., bet pašu <select> ieliec <form> tagos, kā arī ieliec tur iekšā pogu <input type="submit"/>

Share this post


Link to post
Share on other sites

Tu domā celt <select> tagu (un visu tā saturu) zem HTML koda, iekš formas? Vai tādā gadījumā es nepazaudēšu dropdown izvēli visās mēneša dienās, ko man šobrīd nodrošina PHP?

Sorry, ja mani jautājumi ir muļķīgi, vēl apgūstu vielu... :)

Share this post


Link to post
Share on other sites

Ko nozīmē "zem HTML koda"? Pašlaik tev ciklā HTML sagatavošanas laikā, apmēram 30 reizes tiek veidota DB konekcija un izsaukts kļūdains SQL pieprasījums! 

Visticamāk, esi izslēdzis error_reporting, jo tur kaudzei ar kļūdām būtu jāparādās.

Share this post


Link to post
Share on other sites

Tur tā lieta, ka skripts izpildās veiksmīgi, SQL tabulā iegūstu $date vērtības 01-12-2018, 02-12-2018 ..... 31-12.2018, taču $test3 vērtība visām atbilstošajām decembra dienām ir viena un tā pati - pēdējās mēneša dienas dropdown value. Idejiski:

Vēlamais rezultāts:

01-12-2018 -> x

02-12-2018 -> y

03-12-2018 -> z

Esošais rezultāts:

01-12-2018 -> z

02-12-2018 -> z

03-12-2018 -> z

Otra koda daļa, kuru iepriekš neieliku:

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>TITLE</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet">
    <style>
        .container {
            font-family: 'Noto Sans', sans-serif;
            margin-top: 10px;
            width: auto;
        }
        .button {
            height: 70px;
            width: 30%;
            color: black;
            font-size: 13px;
            background-color: #A9F5E1;
            text-align:center;
            margin-left:600px;
        }
        .button:hover {
            background-color: #01DFA5;
            color: black;
        }
        h3 {
            margin-bottom: 100px;
        }
        th {
            height: 10px;
            text-align: center;
            font-size: 19px;
        }
        td {
            height: 10px;
            background-color: #A9F5E1;
            font-style: italic;
            font-size: 13px;
            font-weight: bold;
        }
        .today {
            background: orange;
        }   
    </style>
</head>
<body style="background-color:#0B4C5F;">
    <div class="container">
        <h2 style="color:#01DFA5">NOSAUKUMS   <a href="?ym=<?php echo $prev; ?>">&lt;</a> <?php echo $html_title; ?> <a href="?ym=<?php echo $next; ?>">&gt;</a></h2>
       <form method="post">
           <table class="table table-bordered" >
            <tr bgcolor="#01DFA5">
                <th>Pr</th>
                <th>Ot</th>
                <th>Tr</th>
                <th>Ce</th>
                <th>Pi</th>
                <th style="color:red">Se</th>
                <th style="color:red">Sv</th>

            </tr>
            <?php
                foreach ($weeks as $week) {
                    echo $week;
                }

 

 

            ?>
        </table>
               <input class="button" type="submit" value="Submit!">
    </form>
    </div>
</body>
</html>


 

Share this post


Link to post
Share on other sites

Kaut kā ir sajūta, ka kods, ko esi iekopējis, nedaudz atšķiras no tā, kuru esi izpildījis.

14 hours ago, knauzers said:

taču $test3 vērtība visām atbilstošajām decembra dienām ir viena un tā pati - pēdējās mēneša dienas dropdown value

Nu bet pareizi - tā vērtība tiek aizpildīta no pēdējā POST visiem vienāda! Katrā skripta izpildes laikā $_POST['name'] vērtība ir viena un tā pati!

Share this post


Link to post
Share on other sites
8 hours ago, e-remit said:

Kaut kā ir sajūta, ka kods, ko esi iekopējis, nedaudz atšķiras no tā, kuru esi izpildījis.

Nu bet pareizi - tā vērtība tiek aizpildīta no pēdējā POST visiem vienāda! Katrā skripta izpildes laikā $_POST['name'] vērtība ir viena un tā pati!

Tad jautājums, kā lai šo padara dinamisku? Es, protams, nesagaidu gatavu kodu, bet vismaz virzienu... :)

Share this post


Link to post
Share on other sites
5 hours ago, knauzers said:

Tad jautājums, kā lai šo padara dinamisku?

 

On 12/18/2018 at 3:40 PM, e-remit said:

Sadali tā: koda sākumā izliec pārbaudi, vai ir nosūtīti dati:


if (isset($_POST['name'])) {
	$test3=$_POST['name'];
	$link = ...
	...
	// Close connection
	mysqli_close($link);
}

 

 

Share this post


Link to post
Share on other sites
On 12/21/2018 at 1:52 PM, e-remit said:

Atgriežos pie problēmas risināšanas.

Ar Tevis ieteikto metodi esmu turpat, kur biju - joprojām iegūstu šo:

On 12/13/2018 at 5:03 PM, knauzers said:

Principā nosūtīta visām mēneša dienām tiek pēdējās dienas dropdown izvēle.

 

 

Share this post


Link to post
Share on other sites

Atgriežos pie problēmas risināšanas.

Ar Tevis ieteikto metodi esmu turpat, kur biju - joprojām iegūstu šo:

 

On 12/21/2018 at 12:29 AM, e-remit said:

taču $test3 vērtība visām atbilstošajām decembra dienām ir viena un tā pati - pēdējās mēneša dienas dropdown value

Varbūt kods kā tāds vairs nav tūnējams un ir, tā teikt, izsmēlis sevi ,līdz ar to jādomā kas fundamentāli savādāks?

Share this post


Link to post
Share on other sites
52 minutes ago, knauzers said:

Ar Tevis ieteikto metodi esmu turpat, kur biju

un, kāds ir aktuālais kods?

Share this post


Link to post
Share on other sites

Kods:

<?php


// Set your timezone
date_default_timezone_set('Europe/Riga');
// Get prev & next month
if (isset($_GET['ym'])) {
    $ym = $_GET['ym'];
} else {
    // This month
    $ym = date('Y-m');
}
// Check format
$timestamp = strtotime($ym . '-01');
if ($timestamp === false) {
    $ym = date('Y-m');
    $timestamp = strtotime($ym . '-01');
}
// Today
$today = date('Y-m-j', time());
// For H3 title
$html_title = date('Y / m', $timestamp);
// Create prev & next month link     mktime(hour,minute,second,month,day,year)
$prev = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)-1, 1, date('Y', $timestamp)));
$next = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)+1, 1, date('Y', $timestamp)));
// You can also use strtotime!
// $prev = date('Y-m', strtotime('-1 month', $timestamp));
// $next = date('Y-m', strtotime('+1 month', $timestamp));
// Number of days in the month
$day_count = date('t', $timestamp);
 
// 0:Sun 1:Mon 2:Tue ...
$str = date('w', mktime(0, 0, 0, date('m', $timestamp), 0, date('Y', $timestamp)));
//$str = date('w', $timestamp);
// Create Calendar!!
$weeks = array();
$week = '';
// Add empty cell
$week .= str_repeat('<td></td>', $str);
for ( $day = 1; $day <= $day_count; $day++, $str++) {
     
    $date = $ym . '-' . $day;
     
    if ($today == $date) {
        $week .= '<td class="today">' . $day;
    } else {
        $week .= '<td>' . $day;
    }


    $week .= '<select name="name" style="background-color:#01A9DB;">';
    $week .= '<option value="0">...</option>';
    $week .= '<option value="A">A</option>';
    $week .= '<option value="B">B</option>';
    $week .= '<option value="C">C</option>';
    $week .= '<option value="D">D</option>';
    $week .= '<option value="E">E</option>';
    $week .= '<option value="F">F</option>';
    $week .= '</select>';
    $week .= '</td>';


    if (isset($_POST['name'])) {
    $test=$_POST['name'];
         $link = mysqli_connect("localhost", "root", "xxx", "yyy");
        
        // Check connection
        if($link === false){
            die("ERROR: Could not connect. " . mysqli_connect_error());
        }

        // Attempt insert query execution
        
         $sql = "INSERT INTO d ez ura n ti (Col1, Col2 ) VALUES ('$date', '$test)";


        if(mysqli_query($link, $sql)){
            echo "Records were updated successfully.";
        } else {
            echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
        }


        // Close connection
        mysqli_close($link);
}

        

 

   

 
    // End of the week OR End of the month
    if ($str % 7 == 6 || $day == $day_count) {
        if ($day == $day_count) {
            // Add empty cell
            $week .= str_repeat('<td></td>', 6 - ($str % 7));
        }
        $weeks[] = '<tr>' . $week . '</tr>';
        // Prepare for new week
        $week = '';
    }
}        

 


?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>TITLE</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet">
    <style>
        .container {
            font-family: 'Noto Sans', sans-serif;
            margin-top: 10px;
            width: auto;
        }
        .button {
            height: 70px;
            width: 30%;
            color: black;
            font-size: 13px;
            background-color: #A9F5E1;
            text-align:center;
            margin-left:600px;
        }
        .button:hover {
            background-color: #01DFA5;
            color: black;
        }
        h3 {
            margin-bottom: 100px;
        }
        th {
            height: 10px;
            text-align: center;
            font-size: 19px;
        }
        td {
            height: 10px;
            background-color: #A9F5E1;
            font-style: italic;
            font-size: 13px;
            font-weight: bold;
        }
        .today {
            background: orange;
        }   
    </style>
</head>
<body style="background-color:#0B4C5F;">
    <div class="container">
        <h2 style="color:#01DFA5">NOSAUKUMS   <a href="?ym=<?php echo $prev; ?>">&lt;</a> <?php echo $html_title; ?> <a href="?ym=<?php echo $next; ?>">&gt;</a></h2>
       <form method="post">
           <table class="table table-bordered" >
            <tr bgcolor="#01DFA5">
                <th>Pr</th>
                <th>Ot</th>
                <th>Tr</th>
                <th>Ce</th>
                <th>Pi</th>
                <th style="color:red">Se</th>
                <th style="color:red">Sv</th>

            </tr>
            <?php
                foreach ($weeks as $week) {
                    echo $week;
                }
        

            ?>
        </table>
               <input class="button" type="submit" value="Submit!">
    </form>
    </div>
       
<br>
<br>  
    <table style="width:15%;bgcolor:white">
        <tr>
            <td style="background-color:#FA5882;width:60px;">.</td>
            <td>Operativas lietas</td>
        </tr>
        <tr>
            <td style="background-color:#F3F781;width:60px;">.</td>
            <td>Projekti</td>
        </tr>
        <tr>
            <td style="background-color:#01A9DB;width:60px;">.</td>
            <td>Dienas dezurants</td>
        </tr>
    </table>
</body>
</html>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...