Jump to content
php.lv forumi
knauzers

PHP kalnedārs ar dropdown

Recommended Posts

Šobrīd konfigurācija:

$sql = "INSERT INTO dezuranti VALUES " .$implodeArray. "ON DUPLICATE KEY UPDATE vertiba = VALUES(vertiba)";


Rezultāts - pie katra Submit man tabula tiek pārrakstīta, atstājot tikai pēdējo submitoto vērtību.

Share this post


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

Un, kur tieši ir problēma kodu izlabot tā, lai tabulu nav jāpārraksta?

Problēma ir tādā, ka manā skatījumā kods ir korekts. :

Īsti nav skaidrs, kura daļa no koda pārraksta tabulu (par cik tiek izmantots INSERT INTO + ON DUPLICATE KEY UPDATE)? Jo TRUNCATE kā sql funkciju es jau no koda esmu aizvācis...

Share this post


Link to post
Share on other sites

Jautājums ir, kur kodā ir kļūda, ka katrs nākamais pieprasījums pārraksta tabulu no jauna?

Koda daļa:

// INSERT LOOP

        if (isset($_POST['day_1'])) {
        
            $sql_parts = [];
            for ( $day = 1; $day <= $day_count; $day++) {
                $date = $ym . '-' . $day;
    
               $test = null;
        $key = 'day_' . $day;
        if (isset($_POST[$key])) {
            $test = $_POST[$key];
            }
            $sql_parts[] = "('$date', '$test')";
            }
            if ($sql_parts) {
                $link = mysqli_connect("localhost", "root", "xxx", "yyy");
            if ($link === false) {
            die("Maintenance code #1234.");
            }

            $implodeArray = implode(',', $sql_parts);
        $sql = "INSERT INTO dezuranti VALUES " .$implodeArray. "ON DUPLICATE KEY UPDATE Dezurants = VALUES(Dezurants)";

 


            if (mysqli_query($link, $sql)){
                    echo "<p> <font color=#01DFA5> <b><i>title!</i></b></font> </p>";
            } else {
                echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
            }
                mysqli_close($link);
                }
        }

 

Share this post


Link to post
Share on other sites

Cik dienas tev tiek padotas POST pieprasījumā? Ja visas dienas nav vienā,  POST pieprasījuma dienā, tad tabulas aktuālais mēnesis tiek patīrīts, jo ciklā tu savāc POST datus no visām dienām, ieskaitot tās, kas nav padotas.

Share this post


Link to post
Share on other sites

POST konfigs:

       <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>

 

 

Share this post


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

foreach ($weeks as $week)

un, kas tev iekš $weeks?

Share this post


Link to post
Share on other sites
6 minutes ago, e-remit said:

un, kas tev iekš $weeks?

// 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 .= '<br>';
    $week .= '<select name="day_' . $day . '" 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 .= '</select>';
    $week .= '</td>';

 
    // 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 = '';
    }
}       

Share this post


Link to post
Share on other sites

Viss strādā, kā tu esi uzrakstījis! Sanāk tā, ka tu:
1) Atver lapu pirmo reizi un visās izvēlnēs ir 0.
2) 2. datumā izvēlies B un saglabā. Rezultātā DB tev tiek ierakstīts, ka visos datumos ir 0, izņemot 2., kurā ir B.
3) Pēc pārlādes lapa atveras un visās izvēlnēs atkal ir 0.
4) 3. datumā izvēlies A un saglabā. DB visos datumos, bet ieskaitot 2. tiek ierakstīts 0, izņemot 3., kurā ir A.
T.i. tu pats pārraksti 2. datumu ar 0 un brīnies, ka "tabula tiek pārrakstīta".

Vietā, kur tev tiek sagatavots <select>, pie vajadzīgā option, kurš atbilst DB vērtībai, tev jāieraksta <option value="B" selected>.

Share this post


Link to post
Share on other sites
42 minutes ago, e-remit said:

Viss strādā, kā tu esi uzrakstījis! Sanāk tā, ka tu:
1) Atver lapu pirmo reizi un visās izvēlnēs ir 0.
2) 2. datumā izvēlies B un saglabā. Rezultātā DB tev tiek ierakstīts, ka visos datumos ir 0, izņemot 2., kurā ir B.
3) Pēc pārlādes lapa atveras un visās izvēlnēs atkal ir 0.
4) 3. datumā izvēlies A un saglabā. DB visos datumos, bet ieskaitot 2. tiek ierakstīts 0, izņemot 3., kurā ir A.
T.i. tu pats pārraksti 2. datumu ar 0 un brīnies, ka "tabula tiek pārrakstīta".

Vietā, kur tev tiek sagatavots <select>, pie vajadzīgā option, kurš atbilst DB vērtībai, tev jāieraksta <option value="B" selected>.

Tev taisnība, diezgan loģisks iznākums! :) Un te mēs atgriežamies pie jautājuma, kuru Tev jautāju kādu laiku iepriekš - kā saglabāt drop-down vērtības, lai pēc Submit tās netiek nonullētas, bet piegalbā un atrāda iepriekš norādīto vērtību..

Ja domā šādi:

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

tad tas īsti nederēs. Jo tas, kas ir nepieciešams - lai katrā no tabulas ierakstiem saglabātos iepriekš zem drop-down izvēlēta un pēc tam submit-ota vērtība (teiksim, opcija "E"), nevis statiski iekš koda ar "selected" norādītā vērtība "B". Ceru, ka domu saprati...

Share this post


Link to post
Share on other sites

Un, kā būtu ar šādu risinājumu?

<?php
//...
$dbdata = [1 => "A", 2 => "B", 3 => "C", 4 => "D"]; //Ielasa no DB
$opts = ["0", "A", "B", "C", "D", "E"];
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="day_' . $day . '" style="background-color:#01A9DB;">';
    foreach($opts as $opt) {
        $selected = isset($dbdata[$day]) && $dbdata[$day] == $opt ? "selected" : "";
        $label = $opt == "0" ? "..." : $opt;
        $week .= "<option value=\"{$opt}\" {$selected}>{$label}</option>";
    }
    $week .= '</select>';
    $week .= '</td>';
}
//...

 

Edited by e-remit

Share this post


Link to post
Share on other sites

Šitam uzdevam es ieteiktu izmantot kādu js framework. Piemēram vue vai react.

Pats sāku apgūt vue. Viņš ir diezgan ērts un viegls. 

Share this post


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

Un, kā būtu ar šādu risinājumu?


<?php
//...
$dbdata = [1 => "A", 2 => "B", 3 => "C", 4 => "D"]; //Ielasa no DB
$opts = ["0", "A", "B", "C", "D", "E"];
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="day_' . $day . '" style="background-color:#01A9DB;">';
    foreach($opts as $opt) {
        $selected = isset($dbdata[$day]) && $dbdata[$day] == $opt ? "selected" : "";
        $label = $opt == "0" ? "..." : $opt;
        $week .= "<option value=\"{$opt}\" {$selected}>{$label}</option>";
    }
    $week .= '</select>';
    $week .= '</td>';
}
//...

 

Kods strādā, bet efekts ir praktiski tas pats. Pirms un pēc submit bilde ir sekojoša:

image.thumb.png.20600ffb36b9d276781d287de8bb0975.png

Tas ir, pēc submit nesaglabājas manas drop-down izvēles, bet atgriežas sākotnējās.

Sāk rasties jautājums, vai tikai ar PHP+HTML šis uzdevums vispār ir izpildāms? :D

Share this post


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

Kods strādā, bet efekts ir praktiski tas pats.

Vai pamanīji tai vienā rindiņā komentāru "//Ielasa no DB"?
Vai tev liekas, ka es to tāpat vien pierakstīju?

8 hours ago, knauzers said:

Sāk rasties jautājums, vai tikai ar PHP+HTML šis uzdevums vispār ir izpildāms? :D

Jā ir izpildāms, ja pareizi uzraksta!

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...