Jump to content
php.lv forumi
Sign in to follow this  
knauzers

PHP kalnedārs ar dropdown

Recommended Posts

Lieta, ko tu nekādi nesaproti ir tas, ka jābūt divām dažādām koda daļām - viena, kas izveido HTML un otra, kas nolasa POST parametrus un tos saglabā.

Ja tu paskatītos pārlūka konsolē, redzētu, ka tev POSTā tiek padoti vienādi mainīgie: 

name=A&name=B&name=C&...

... t.i. mainīgajā POST["name"] ir tikai viena vērtība! Lai tavu risinājumu kaut kā padarītu par funkcionējošu, SELECT nosaukumi ir jādažādo, piemēram:

$week .= '<select name="day_' . $day . '" style="background-color:#01A9DB;">';

Pēc tam, lai nolasītu šos datus, tas jādara atsevišķā sadaļā, nevis esošajā ciklā:

if (isset($_POST['day_1']) {
    $sql_parts = [];
    for ( $day = 1; $day <= $day_count; $day++) {
        $date = $ym . '-' . $day;
        $test = isset($_POST['day_' . $day]) ? (int)$_POST['day_' . $day] : null;
        $sql_parts[] = "('$date', '$test')";
    }
    if ($sql_parts) {
        $link = mysqli_connect("localhost", "root", "xxx", "yyy");
        if ($link === false) {
            die("Maintenance code #1234.");
        }
        $sql = "INSERT INTO dezuranti (Col1, Col2) VALUES " . implode(',', $sql_parts);
        if(mysqli_query($link, $sql)){
            echo "Records were updated successfully.";
        } else {
            echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
        }
        mysqli_close($link);
    }
}

Saku vēlreiz - šim ir jābūt ārpus tava cikla `for ( $day = 1; $day <= $day_count; $day++, $str++)`!

Edited by e-remit

Share this post


Link to post
Share on other sites
On 1/4/2019 at 8:15 PM, e-remit said:

Lieta, ko tu nekādi nesaproti ir tas, ka jābūt divām dažādām koda daļām - viena, kas izveido HTML un otra, kas nolasa POST parametrus un tos saglabā.

Ja tu paskatītos pārlūka konsolē, redzētu, ka tev POSTā tiek padoti vienādi mainīgie: 


name=A&name=B&name=C&...

... t.i. mainīgajā POST["name"] ir tikai viena vērtība! Lai tavu risinājumu kaut kā padarītu par funkcionējošu, SELECT nosaukumi ir jādažādo, piemēram:


$week .= '<select name="day_' . $day . '" style="background-color:#01A9DB;">';

Pēc tam, lai nolasītu šos datus, tas jādara atsevišķā sadaļā, nevis esošajā ciklā:


if (isset('day_1') {
    $sql_parts = [];
    for ( $day = 1; $day <= $day_count; $day++) {
        $date = $ym . '-' . $day;
        $test = isset($_POST['day_' . $day]) ? (int)$_POST['day_' . $day] : null;
        $sql_parts[] = "('$date', $test)";
    }
    if ($sql_parts) {
        $link = mysqli_connect("localhost", "root", "xxx", "yyy");
        if ($link === false) {
            die("Maintenance code #1234.");
        }
        $sql = "INSERT INTO dezuranti (Col1, Col2) VALUES " . implode(',', $sql_parts);
        if(mysqli_query($link, $sql)){
            echo "Records were updated successfully.";
        } else {
            echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
        }
        mysqli_close($link);
    }
}

Saku vēlreiz - šim ir jābūt ārpus tava cikla `for ( $day = 1; $day <= $day_count; $day++, $str++)`!

Paldies Tev liels. Vari vēl lūdzu paskaidrot šis rindas funkcionalitāti:

"

 $test = isset($_POST['day_' . $day]) ? (int)$_POST['day_' . $day] : null;

"

Tobiš, kas tiek panākts ar šo rindu?

Share this post


Link to post
Share on other sites
45 minutes ago, knauzers said:

Vari vēl lūdzu paskaidrot šis rindas funkcionalitāti:

Kuru daļu tieši tu nesaprati?

  • "?:" ir "Ternary Operator" - if/else saīsinājums;
  • isset() pārbauda, vai konkrētais masīva $_POST elements ir uzsetots;
  • (int) nokasto šo elementu uz int, tā izslēdzot iespēju mainīgajā ierakstīt ko citu, izņemot skaitli.

Garāk to var uzrakstīt:

$test = null;
$key = 'day_' . $day;
if (isset($_POST[$key])) {
    $test = intval($_POST[$key]);
}

 

Share this post


Link to post
Share on other sites

Lieliski, viss strādā! Mežonīgs paldies!

Turpināšu būvdarbus, varbūt vēl ar kādu jautājumu patraucēšu...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×