knauzers Posted April 9, 2019 Author Report 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
e-remit Posted April 9, 2019 Report Posted April 9, 2019 Un, kur tieši ir problēma kodu izlabot tā, lai tabulu nav jāpārraksta? Quote
knauzers Posted April 10, 2019 Author Report 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
knauzers Posted April 10, 2019 Author Report 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
e-remit Posted April 10, 2019 Report 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
knauzers Posted April 11, 2019 Author Report 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
e-remit Posted April 11, 2019 Report Posted April 11, 2019 5 hours ago, knauzers said: foreach ($weeks as $week) un, kas tev iekš $weeks? Quote
knauzers Posted April 11, 2019 Author Report 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
e-remit Posted April 11, 2019 Report 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
knauzers Posted April 11, 2019 Author Report 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
e-remit Posted April 11, 2019 Report 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
php newbie Posted April 12, 2019 Report 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
knauzers Posted April 12, 2019 Author Report 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
e-remit Posted April 12, 2019 Report 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
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.