Avatar billede Jesperholde Novice
16. juni 2016 - 18:41 Der er 17 kommentarer og
1 løsning

Hjælp til PHP og MySQL

Hej alle sammen.

Jeg har et lille prolem med at hente data fra en database. Lige nu viser den alt data fra databasen når jeg forsøger at hente informationer fra databasen.

Det jeg godt kunne tænke mig er at man kan vælge hvilken linje af data man vil have ud fra dens id.

Fx:
Hvis man nu siger man har en database med personer og deres oplysning og de har hver deres id. Og ved at skrive deres id ind på hjemmesiden så kommer kun deres oplysninger frem.

Jeg håber nogle kan hjælpe mig med at få det til at fungere
Avatar billede arne_v Ekspert
16. juni 2016 - 18:45 #1
Put en WHERE betingelse paa din SQL saetning.
Avatar billede Jesperholde Novice
16. juni 2016 - 19:49 #2
#1 - Nu er jeg ikke så god til PHP / SQL. Så jeg kan ikke rigtig se hvordan jeg skal gøre det. Men det her den kode jeg har


// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, fsname, gname FROM IPECInfo";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["gname"]. " " . $row["fsname"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>
<form>
<div class="form-group">
<label>Id</label>
      <input type="text" class="form-control" id="id" placeholder="Indtast id nummer">
</div>
<input type="submit" value="SEND" class="btn btn-default" name="submit"/>
</form>
</body>
Avatar billede arne_v Ekspert
16. juni 2016 - 20:02 #3
Der skal en WHERE betingelse paa.

Den rigtige maade er at prepare og angive en parameter.
Avatar billede arne_v Ekspert
16. juni 2016 - 20:31 #4
$id = $_GET['id'];

burde hente id fra submit.
Avatar billede arne_v Ekspert
16. juni 2016 - 20:34 #5
$sql = "SELECT id, fsname, gname FROM IPECInfo WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $id);
$stmt->execute();

skulle prepare og execute.
Avatar billede arne_v Ekspert
16. juni 2016 - 20:35 #6
$stmt->get_result()

henter resultat.
Avatar billede arne_v Ekspert
16. juni 2016 - 20:35 #7
Saa skal det bare klistres sammen.
Avatar billede Jesperholde Novice
16. juni 2016 - 21:20 #8
Tak for din tid og hjælp.

Er det sådan det skal sættes sammen:

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$id = $_GET['id'];
$sql = "SELECT id, fsname, gname FROM IPECInfo WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->get_result()


Undskyld hvis det er dumt det jeg har lavet. Men forstår ikke SQL så godt :)
Avatar billede arne_v Ekspert
16. juni 2016 - 21:31 #9
$id = $_GET['id'];

skal nok ned under:

$stmt->bind_param('i', $id);
Avatar billede arne_v Ekspert
16. juni 2016 - 21:32 #10
Og du skal bruge $stmt->get_result()
Avatar billede Jesperholde Novice
16. juni 2016 - 21:54 #11
Jeg har prøvet det du skrev. Men den giver umildbart fejl ved linjen med:
$stmt->get_result()
$stmt->execute();

Det er sådan har koden ser ud:

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, fsname, gname FROM IPECInfo WHERE id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $id);
$id = $_GET['id'];
$stmt->get_result()
$stmt->execute();
?>
<form>
<div class="form-group">
<label>Id</label>
      <input type="text" class="form-control" id="id" placeholder="Indtast id nummer">
</div>
<input type="submit" value="SEND" class="btn btn-default" name="submit"/>
</form>
Avatar billede olsensweb.dk Ekspert
16. juni 2016 - 23:52 #12
>$stmt->get_result()
mangler der ikke et semicolon efter $stmt->get_result() ??
eller er det bare en fejl du ikke har skrevet det

hvilke fejl får du ??
slå error_reporting og display error til hvis du ikke har gjort det
Avatar billede arne_v Ekspert
17. juni 2016 - 02:16 #13
Den returnerer ogsaa noget som skal bruges.
Avatar billede arne_v Ekspert
17. juni 2016 - 02:19 #14
Noget a la:

$rs = $stmt->get_result();
while($row = $rs->fetch_array()) {
    ...
}
Avatar billede olsensweb.dk Ekspert
17. juni 2016 - 10:24 #15
du kunne kigge på
http://php.net/manual/en/mysqli.prepare.php Example #1 mysqli::prepare() example
http://php.net/manual/en/mysqli-stmt.fetch.php Example #1 Object oriented style
http://php.net/manual/en/mysqli-stmt.bind-param.php Example #1 Object oriented style

så din code burde se ca sådan ud
(utested)

<?php
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, fsname, gname FROM IPECInfo WHERE id = ?";
if ($stmt = $conn->prepare($sql){
    $stmt->bind_param('i', $id);
    $id = $_GET['id'];
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($id, $fsname, $name);
   
    /* fetch values */   
    while ($stmt->fetch()) {
        echo "person id = " . $id . " fsname = " . $fsname . " og gname = " . $name;
    }   

    /* close statement */
    $stmt->close();
}
else{
    echo "sql kan ikke udføres, feks manglende database connection";
}

?>
<form>
<div class="form-group">
<label>Id</label>
      <input type="text" class="form-control" id="id" placeholder="Indtast id nummer">
</div>
<input type="submit" value="SEND" class="btn btn-default" name="submit"/>
</form>
Avatar billede Jesperholde Novice
18. juni 2016 - 20:37 #16
#15

Til det du har lavet skriver den også bare fejl.

Til næsten alle linjer skriver den:

Parse error: syntax error, unexpected x on line x
Avatar billede olsensweb.dk Ekspert
18. juni 2016 - 21:12 #17
kig på linjen oven over hvor du får fejlen

du mangler en slut parantes i denne linje
if ($stmt = $conn->prepare($sql){
skal se sådan ud
if ($stmt = $conn->prepare($sql)){


du får ikke sendt din id over, da dit input felt ikke har et name
denne linje
<input type="text" class="form-control" id="id" placeholder="Indtast id nummer">
skal se sådan ud
<input type="text" class="form-control" name="id" id="id" placeholder="Indtast id nummer">

så hurtig rettet code
(tested)

<?php
// Create connection
$conn = new mysqli("localhost", "root", "", "test");
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
if (isset($_GET['id'])) {
    $sql = "SELECT id, fsname, gname FROM IPECInfo WHERE id = ?";
    if ($stmt = $conn->prepare($sql)) {
        $stmt->bind_param('i', $id);
        $id = $_GET['id'];
        $stmt->execute();

        /* bind result variables */
        $stmt->bind_result($id, $fsname, $name);

        /* fetch values */
        while ($stmt->fetch()) {
            echo "person id = " . $id . " fsname = " . $fsname . " og gname = " . $name;
        }

        /* close statement */
        $stmt->close();
    } else {
        echo "sql kan ikke udføres, feks manglende database connection";
    }
}
?>
<form>
    <div class="form-group">
        <label>Id</label>
        <input type="text" class="form-control" name="id" id="id" placeholder="Indtast id nummer">
    </div>
    <input type="submit" value="SEND" class="btn btn-default" name="submit"/>
</form>
Avatar billede Jesperholde Novice
18. juni 2016 - 21:22 #18
Tusind tak for hjælpen ronols

Det virker med den kode som du har skrevet. Mange tak, jeg håber ikke jeg har været for besværlig.

Du må have en god weekend
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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