Jump to content
php.lv forumi

PHP kalnedārs ar dropdown


knauzers

Recommended Posts

  • Replies 48
  • Created
  • Last Reply

Top Posters In This Topic

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

Link to comment
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);
                }
        }

 

Link to comment
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>

 

 

Link to comment
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 = '';
    }
}       

Link to comment
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>.

Link to comment
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...

Link to comment
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
Link to comment
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

Link to comment
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!

Link to comment
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...