Jump to content
php.lv forumi

Recommended Posts

Posted

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

  • Replies 48
  • Created
  • Last Reply

Top Posters In This Topic

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

Posted

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);
                }
        }

 

Posted

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.

Posted

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>

 

 

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

Posted

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

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

Posted (edited)

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

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

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