Avatar billede Calle5463 Forsker
10. oktober 2016 - 17:48 Der er 4 kommentarer

Vis data i formular efter valg select-felt

Jeg har forgæves søgt efter lidt kode-eksempler:

Jeg har en lille mysql-tabel med navne+
Ønske: Lidt hjælp til at få hul på koden til -

at indbygge i en formular, at jeg med en dropdown (select) kan vælge den record i tabellen jeg vil vise i formularen. Jeg kan fylde dropdown-listen med data fra tabellen, men ikke få det til at spille sammen med at hente data og vise dem i formularen. Kan man stoppe en funktion for dropdown-listen ind i stedet for "WHERE id=? på en smart måde
Avatar billede olsensweb.dk Ekspert
10. oktober 2016 - 19:37 #1
fandt lige nogle gamle functioner fra min tid med mysqli (er til PDO)
du kan selv omskrive functionerne til Prepare Statement

kig og afprøv dette eks

<?php
/* test data
  CREATE TABLE `tbl_users` (
  `id` int(11) NOT NULL,
  `first_nane` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `last_name` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `user_name` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `address` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `postnummer` varchar(4) COLLATE utf8_danish_ci NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

  INSERT INTO `tbl_users` (`id`, `first_nane`, `last_name`, `user_name`, `address`, `postnummer`) VALUES
  (1, 'palle', 'gulvballe', 'pg', 'klklsfdlshj  sirdw', '4000'),
  (2, 'anders', 'and', 'aa', 'ljsdlrwke weujrowpu', '0800'),
  (3, 'test', 'testensen', 'tt', 'djfslkjrd poweurw', '2500'),
  (4, 'ole', 'olesen', 'oo', 'dslkfh werhqw oxzvn', '8000');

  ALTER TABLE `tbl_users`
  ADD PRIMARY KEY (`id`);

  ALTER TABLE `tbl_users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
*/
require_once("connection.php"); // $mysqli

function User_Read_All($conn) {
    $sql = "SELECT * FROM tbl_users";
    //$rs = mysqli_query($conn, $sql);
    $rs = $conn->query($sql);
    $ar = array();
    //while ($row = mysqli_fetch_assoc($rs) ){
    while ($row = $rs->fetch_assoc()) {
        $ar[] = $row;
    }
    return $ar;
}

function User_Read($conn, $id) {
    $sql = "SELECT * FROM tbl_users WHERE id = $id";
    $rs = $conn->query($sql);
    $ar = $rs->fetch_assoc();
    return $ar;
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>demo</title>

        <style type="text/css">

        </style>
        <script type="text/javascript">

        </script>

    </head>
    <body>


        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            <?php
            $liste = User_Read_All($mysqli);
            $str = '';
            $str = '<select name="users" onchange="this.form.submit()">';
            for ($i = 0, $lng = count($liste); $i < $lng; $i++) {
                $str .='<option value="' . $liste[$i]['id'] . '">' . $liste[$i]['first_nane'] . ' ' . $liste[$i]['last_name'] . '</option>';
            }
            $str .='</select>';
            echo $str;
            ?>
        </form>

        <?php
        if (isset($_POST['users'])) {
            $user = User_Read($mysqli, $_POST['users']);
            print_r($user); // test

            $str = '';
            $str = '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
            $str .= 'First name: <input type="text" name="fname" value="' . $user['first_nane'] . '"><br>';
            $str .= 'Last name: <input type="text"  name="lname" value="' . $user['last_name'] . '"><br>';
            $str .= 'zip code: <input type="text"  name="zip_code" value="' . $user['postnummer'] . '"><br>';
            $str .= '<input type="submit" value="Submit">';
            $str .= '</form>';
            echo $str;
        }
        ?>
    </body>
</html>
Avatar billede olsensweb.dk Ekspert
12. oktober 2016 - 15:01 #2
du kunne jo også undvære forms og bruge en tabel (som du så godt kan lide, her bruges tabellen rigtigt), med et link, så du sender id action over som GET

model.php (intet ændre iforhold til #1 kun lagt ud i seperat fil)

<?php
/* test data
  CREATE TABLE `tbl_users` (
  `id` int(11) NOT NULL,
  `first_nane` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `last_name` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `user_name` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `address` varchar(255) COLLATE utf8_danish_ci NOT NULL,
  `postnummer` varchar(4) COLLATE utf8_danish_ci NOT NULL
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;

  INSERT INTO `tbl_users` (`id`, `first_nane`, `last_name`, `user_name`, `address`, `postnummer`) VALUES
  (1, 'palle', 'gulvballe', 'pg', 'klklsfdlshj  sirdw', '4000'),
  (2, 'anders', 'and', 'aa', 'ljsdlrwke weujrowpu', '0800'),
  (3, 'test', 'testensen', 'tt', 'djfslkjrd poweurw', '2500'),
  (4, 'ole', 'olesen', 'oo', 'dslkfh werhqw oxzvn', '8000');

  ALTER TABLE `tbl_users`
  ADD PRIMARY KEY (`id`);

  ALTER TABLE `tbl_users`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
*/
require_once("connection.php"); // $mysqli

function User_Read_All($conn) {
    $sql = "SELECT * FROM tbl_users";
    //$rs = mysqli_query($conn, $sql);
    $rs = $conn->query($sql);
    $ar = array();
    //while ($row = mysqli_fetch_assoc($rs) ){
    while ($row = $rs->fetch_assoc()) {
        $ar[] = $row;
    }
    return $ar;
}

function User_Read($conn, $id) {
    $sql = "SELECT * FROM tbl_users WHERE id = $id";
    $rs = $conn->query($sql);
    $ar = $rs->fetch_assoc();
    return $ar;
}
?>



test.php

<?php
require_once("model.php"); // $mysqli, User_Read_All(), User_Read()
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>demo</title>

        <style type="text/css">

        </style>
        <script type="text/javascript">
        </script>
    </head>
    <body>
        <table>
            <tr>
                <td style="text-align:right;" colspan="4"><a href="<?php echo $_SERVER['PHP_SELF'] . '?action=new'; ?>">Ny</a></td>
            </tr>
            <tr>
                <td>fornavn</td>
                <td>efternavn</td>
                <td>Edit</td>
                <td>Slet</td>
            </tr>
            <?php
            $liste = User_Read_All($mysqli);
            $str = '';
            for ($i = 0, $lng = count($liste); $i < $lng; $i++) {
                $str .= "\n" . '<tr>';
                $str .= "\n" . '<td>' . $liste[$i]['first_nane'] . '</td>';
                $str .= "\n" . '<td>' . $liste[$i]['last_name'] . '</td>';
                $str .= "\n" . '<td><a href="' . $_SERVER['PHP_SELF'] . '?action=edit&amp;id=' . $liste[$i]['id'] . '">edit</a></td>';
                $str .= "\n" . '<td><a href="' . $_SERVER['PHP_SELF'] . '?action=delete&amp;id=' . $liste[$i]['id'] . '">slet</a></td>';
                $str .= "\n" . '</tr>';
            }
            echo $str;
            ?>
        </table>
        <?php
        // new og edit kunne godt slåes sammen, og så bare sætte id =0 ved new,
        // så kan man også spare action linjen
        if (isset($_GET['action'])) {
            switch ($_GET['action']) {
                case 'delete':
                    $id = $_GET['id'];
                    echo "\nslet er ikke lavet ennu<br>";
                    // $user = User_Delete($mysqli, $id);
                    break;
                case 'new':
                    $str = '';
                    $str = '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">';
                    $str .= '<input type="hidden" name="action" value="create">';
                    $str .= 'First name: <input type="text" name="fname" value=""><br>';
                    $str .= 'Last name: <input type="text"  name="lname" value=""><br>';
                    $str .= 'zip code: <input type="text"  name="zip_code" value=""><br>';
                    $str .= '<input type="submit" value="Submit">';
                    $str .= '</form>';
                    echo $str;
                    break;
                case 'edit':
                    $id = $_GET['id'];
                    $user = User_Read($mysqli, $id);
                    print_r($user); // test
                    $str = '';
                    $str = '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">';
                    $str .= '<input type="hidden" name="action" value="update">';
                    $str .= '<input type="hidden" name="id" value="' . $id . '">';
                    $str .= 'First name: <input type="text" name="fname" value="' . $user['first_nane'] . '"><br>';
                    $str .= 'Last name: <input type="text"  name="lname" value="' . $user['last_name'] . '"><br>';
                    $str .= 'zip code: <input type="text"  name="zip_code" value="' . $user['postnummer'] . '"><br>';
                    $str .= '<input type="submit" value="Submit">';
                    $str .= '</form>';
                    echo $str;
                    break;
            }
        }
        if (isset($_POST['action'])) {
            switch ($_POST['action']) {
                case 'update':
                    echo "\nupdate ikke lavet ennu<br>";
                    print_r($_POST);
                    // $user = User_Update($mysqli, $id, $firstname, $lastname, $zip_code);
                    break;
                case 'create':
                    echo "\ncreate ikke lavet ennu<br>";
                    print_r($_POST);
                    // $user = User_Create($mysqli, $firstname, $lastname, $zip_code);
                    break;
            }
        }
        ?>
    </body>
</html>
Avatar billede Calle5463 Forsker
13. oktober 2016 - 10:50 #3
Inden jeg begynder at rode med for mange ting, så skal jeg have lært/fundet ud af hvordan jeg i de her php-snippets kan kalde filer - det er endnu ikke lykedes.

Via filemanager lavet en mappe med en php-fil der blot echoer en dum tekst, og en snippet der kalder filen.

Kan ikke få det tl at virke
Avatar billede Calle5463 Forsker
13. oktober 2016 - 17:09 #4
- så fik jeg hul-igennem fra snippets til filer.

I mellemtiden har jeg overvejet og besluttet, at lave mit lille foreningssystem udenfor wordpress's lidt snærende layout (har brug for mere areal og mindre der distrahere på siderne), så har lavet en prokect-mappe ....

Det gør det også langt nemmere at udvikle det færdigt lokalt (AMPP, EasyPHP), så nu skal jeg lige have installeret det ......
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester