knauzers Posted April 9, 2019 Author Report Share Posted April 9, 2019 Š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. Quote Link to comment Share on other sites More sharing options...
e-remit Posted April 9, 2019 Report Share Posted April 9, 2019 Un, kur tieši ir problēma kodu izlabot tā, lai tabulu nav jāpārraksta? Quote Link to comment Share on other sites More sharing options...
knauzers Posted April 10, 2019 Author Report Share Posted April 10, 2019 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... Quote Link to comment Share on other sites More sharing options...
e-remit Posted April 10, 2019 Report Share Posted April 10, 2019 Kāds tieši ir jautājums? Quote Link to comment Share on other sites More sharing options...
knauzers Posted April 10, 2019 Author Report Share Posted April 10, 2019 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); } } Quote Link to comment Share on other sites More sharing options...
e-remit Posted April 10, 2019 Report Share Posted April 10, 2019 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. Quote Link to comment Share on other sites More sharing options...
knauzers Posted April 11, 2019 Author Report Share Posted April 11, 2019 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> Quote Link to comment Share on other sites More sharing options...
e-remit Posted April 11, 2019 Report Share Posted April 11, 2019 5 hours ago, knauzers said: foreach ($weeks as $week) un, kas tev iekš $weeks? Quote Link to comment Share on other sites More sharing options...
knauzers Posted April 11, 2019 Author Report Share Posted April 11, 2019 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 = ''; } } Quote Link to comment Share on other sites More sharing options...
e-remit Posted April 11, 2019 Report Share Posted April 11, 2019 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>. Quote Link to comment Share on other sites More sharing options...
knauzers Posted April 11, 2019 Author Report Share Posted April 11, 2019 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... Quote Link to comment Share on other sites More sharing options...
e-remit Posted April 11, 2019 Report Share Posted April 11, 2019 (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 April 11, 2019 by e-remit Quote Link to comment Share on other sites More sharing options...
php newbie Posted April 12, 2019 Report Share Posted April 12, 2019 Š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. Quote Link to comment Share on other sites More sharing options...
knauzers Posted April 12, 2019 Author Report Share Posted April 12, 2019 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: 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 Quote Link to comment Share on other sites More sharing options...
e-remit Posted April 12, 2019 Report Share Posted April 12, 2019 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! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.