Webdeveloper_Jelle
Webdeveloper_Jelle

Reputation: 2856

PHP form input value doesn't work

I like to have a standard value filled in the input field.
I have this code:

$stma = $conn->prepare("SELECT * FROM `users` WHERE ID = '".$_GET['gebruiker']."' ");
$stma->execute();
$row_count = $stma->rowCount(); // returns 1
foreach ($conn->query($stma) as $rows) {
    $Username = $rows['Username'];
}

/// my form
echo '<form method="POST" >
    <table>
    <th colspan="3"><h1>Gebruiker bewerken</h1></th>
        <tr>
            <th>
                <h3>Gebruikersnaam: </h3>
            </th>
            <td>
                <input style="width: 70%;" type="text" READONLY value="'.$Username.'" > 
                // the value must be filled in this input field
            </td>
        </tr>
        <tr>
            <th>
                <h3>Wachtwoord: </h3>
            </th>
            <td>
                <input style="width: 70%;" type="password"  name="wachtwoord" REQUIRED>
            </td>
        </tr>
        <tr>
            <th>
            </th>
            <td colspan="2">
                <input type="submit" name="bewerken" class="button" style="vertical-align:middle" value="Opslaan">
            </td>
        </tr>
        '.$error.'
    </table>
</form>';

The code doesn't fill in the value i got from the database.
I still get an empty form field.
My query returns 1 result row (i checked)
Does someone see my mistake?
I don't see the mistake i've made (it must me my mistake, it worked for me on other forms too)

Upvotes: 0

Views: 1926

Answers (3)

Pinakin Shobhana
Pinakin Shobhana

Reputation: 32

please try this code
$stma = $conn->prepare("SELECT * FROM `users` WHERE ID = '".$_GET['gebruiker']."' ");

$stma->execute();

$row_count = $stma->rowCount(); // returns 1

foreach ($conn->query($stma) as $rows) {
  $Username = $rows['Username'];
}

**please replace this code**
$res = $conn->query("SELECT * FROM users WHERE ID = '".$_GET['gebruiker']."' ");

$allRows = $res->fetch_assoc(); 

$Username = $allRows['UserName']; 

Upvotes: -1

ultrasamad
ultrasamad

Reputation: 368

Below is a working example.

PHP

try {
        $conn = new PDO('mysql:host=localhost;dbname=YourDBname', 'root', '');
    } catch (PDOException $e) {
        echo $e->getMessage();
    }

    $id = $_GET['gebruiker'];

    $sql = "SELECT * FROM `users` WHERE id = :id";
    $stm = $conn->prepare($sql);

    $stm->execute(['id'=>$id]);

    $user = $stm->fetchObject();

    $username = $user->username;

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
    <form action="POST">
        <input type="text" value="<?php echo (isset($username)) ? $username : 'No value' ; ?>">
    </form>
</body>
</html>

If your set gebruiker from your url, then you just have do it like: script.php?gebruiker = 1 You can replace 1 with any ID value that exists in your table.

Upvotes: 1

Erik van de Ven
Erik van de Ven

Reputation: 4985

To make sure it outputs all errors and warnings (for debugging), this might help:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Place above mentioned code at the top of your file. And you might want to prevent any SQL injection as well:

$stma = $conn->prepare("SELECT * FROM `users` WHERE ID = ? ");
$stma->bindParam(1, $_GET['gebruiker'], PDO::PARAM_INT);
$stma->execute();
$stma->debugDumpParams(); // you could use this to check whether or not all parameters are set correctly
$row_count = $stma->rowCount(); // returns 1
foreach ($conn->query($stma) as $rows) {
    $Username = $rows['Username'];
}

Upvotes: 1

Related Questions