Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

problemer med henting av ID fra database


Anbefalte innlegg

Det jeg prøver å få til er å vise data fra en bestemt id hentet fra id'en som allerede ligger i linken.

// edit: jeg får ikke opp noen feilmeldinger, men jeg får heller ikke opp noe resultat

<?php
include "funksjoner.inc.php";
echo "<div id='header'>";

echo navigasjon();
	
echo "</div>";
	
echo "<div id='innhold'>";

	$db = kobleTil();
	$sql = "SELECT * FROM oppdrag";
	$resultat = $db->query($sql);
	while($nesteRad = $resultat->fetch_assoc()) {
	echo "<hr />";

		echo "<table id='resultat'>";
		echo "<tr><th>Navn</th><th>Type</th><th>Startdato</th><th>Sluttdato</th><th>Antall timer</th><th>Aktiv</th></tr>";
		echo "<tr>";
		echo "<td>" . $nesteRad['navn'] . "</td>"; 
		echo "<td>" . $nesteRad['type'] . "</td>";
		echo "<td>" . $nesteRad['startDato'] . "</td>";
		echo "<td>" . $nesteRad['sluttDato'] . "</td>";
		echo "<td>" . $nesteRad['timer'] . "</td>";
		echo "<td>" . $nesteRad['aktiv'] . "</td>";
		echo '<td><a href="endre.php?id=' . $nesteRad['oppdrID'] . '">Endre</a></td>';
		echo '<td><a href="slett.php?id=' . $nesteRad['oppdrID'] . '">Slett</a></td>';
		echo "</tr></table>";

		echo "<hr />";

	}
	
echo "</div>";
?>
<?php
include "funksjoner.inc.php";
echo "<div id='header'>";

	echo navigasjon();
	
echo "</div>";
	
echo "<div id='innhold'>";

	$db = kobleTil();

	if (isset($_GET['oppdrID']) && is_numeric($_GET['oppdrID']) && $_GET['oppdrID'] > 0) {
	
	$id = $_GET['oppdrID'];
	$sql = "SELECT * FROM oppdrag WHERE oppdrID = $id or die(mysql_error());";
	

	$resultat = $db->query($sql);

	if($nesteRad) {

	while($nesteRad = $resultat->fetch_assoc()) {
	echo "<hr />";

		echo "<table id='resultat'>";
		echo "<tr><th>Navn</th><th>Type</th><th>Startdato</th><th>Sluttdato</th><th>Antall timer</th><th>Aktiv</th></tr>";
		echo "<tr>";
		echo "<td>" . $nesteRad['navn'] . "</td>"; 
		echo "<td>" . $nesteRad['type'] . "</td>";
		echo "<td>" . $nesteRad['startDato'] . "</td>";
		echo "<td>" . $nesteRad['sluttDato'] . "</td>";
		echo "<td>" . $nesteRad['timer'] . "</td>";
		echo "<td>" . $nesteRad['aktiv'] . "</td>";
		echo "</tr></table>";

		echo "<hr />";

		}
	}
}

echo 	"<form action='kjoer2.php' method='post'>";
echo	"<table id='leggInn'><tr><td>
		<label for='startTid'>Starttid</label></td><td><input type='datetime-local' name='startTid' id='skjemaLeggInn'></td></tr>
		<tr><td>
		<label for='slutTid'>Sluttid</label></td><td><input type='datetime-local' name='slutTid' id='skjemaLeggInn'></td></tr>
		<tr><td>
		<label for='merknad'>Merknad</label></td><td><textarea name='merknad' rows='10' cols='30'  id='skjemaLeggInn'></textarea></td></tr>
		<tr><td>
		<label for='antTimer'>Antall Timer</label></td><td><input type='text' name='antTimer' id='skjemaLeggInn'>
		</td></tr>
		<tr><td><input type='submit' value='Legg inn'>
		</td></tr>
		</form>";
	
echo "</div>";
?>
Endret av ponas91
Lenke til kommentar
Videoannonse
Annonse
$sql = "SELECT * FROM oppdrag WHERE oppdrID = $id or die(mysql_error());";

 

Her ble jammen alt sammen feil på én gang gitt. Om vi begynner bakerst, så vil jeg gjette på at mysql_error() ikke returnerer noe fornuftig, da det ser ut som du benytter en eller annen form for objekt-orientert tilgang til databasen, du burde sikkert bytte ut det med $db->error() eller noe (avhenger litt av hva slags objekt som ligger i $db).

Også er "or die(mysql_error())" PHP-kode, ikke SQL setninger, så det skal stå utenfor anførselstegn, og gjør mest nytte i form av $db->query($sql) or die($db->error());  Selv om jeg vil anbefale å bytte ut die() med f.eks. en bedre formatert feilmelding og at selve feilen skrives til en logg.

Til slutt så er det, med et objekt-orientert API, stor sannsynlighet for at du har støtte for "prepared statements", slik at du bør bytte ut "oppdrID = $id" med "oppdrID = ?" for så å angi $id når den forberedte spørringen kjøres. Jeg ser at du allerede sjekker at variabelen er numeric osv, men med "prepared statements" så er du heeeelt sikker på at det ikke lurer seg inn noe rusk der, enten fra din egen kode eller fra en ondsinnet bruker.

Lenke til kommentar

pr. nå har jeg endret til dette, men det viser fortsatt ikke det jeg vil ha

$db = kobleTil();

	if (isset($_GET['oppdrID']) && is_numeric($_GET['oppdrID']) && $_GET['oppdrID'] > 0) {
	
	$id = $_GET['id'];
	$sql = "SELECT * FROM oppdrag WHERE oppdrID = ?";

	$statement = $db->prepare($sql);
	$statement->execute();
	$statement->bind_result($id);

	$antall = 0;
 	while ($nesteRad = $statement->fetch()){

	echo "<hr />";

		echo "<table id='resultat'>";
		echo "<tr><th>Navn</th><th>Type</th><th>Startdato</th><th>Sluttdato</th><th>Antall timer</th><th>Aktiv</th></tr>";
		echo "<tr>";
		echo "<td>" . $nesteRad['navn'] . "</td>"; 
		echo "<td>" . $nesteRad['type'] . "</td>";
		echo "<td>" . $nesteRad['startDato'] . "</td>";
		echo "<td>" . $nesteRad['sluttDato'] . "</td>";
		echo "<td>" . $nesteRad['timer'] . "</td>";
		echo "<td>" . $nesteRad['aktiv'] . "</td>";
		echo "</tr></table>";

		$antall++;
		$statement->close();
Endret av ponas91
Lenke til kommentar

Kom noen skritt nærmere. Dette er det jeg har nå:

$db = kobleTil();


if (isset($_GET['oppdrID']) && is_numeric($_GET['oppdrID']) && $_GET['oppdrID'] > 0) {


$id = $_GET['oppdrID'];
$sql = "SELECT * FROM oppdrag WHERE oppdrID = ?";


$stmt = $db->stmt_init();
if ($stmt->prepare($sql)) {


$stmt->bind_param("i", $id);
    $stmt->execute();
    $resultat = $stmt->get_result();


  while ($nesteRad = $resultat->fetch_array(MYSQLI_NUM)){


echo "<hr />";


echo "<table id='resultat'>";
echo "<tr><th>Navn</th><th>Type</th><th>Startdato</th><th>Sluttdato</th><th>Antall timer</th><th>Aktiv</th></tr>";
echo "<tr>";
echo "<td>" . $nesteRad['navn'] . "</td>"; 
echo "<td>" . $nesteRad['type'] . "</td>";
echo "<td>" . $nesteRad['startDato'] . "</td>";
echo "<td>" . $nesteRad['sluttDato'] . "</td>";
echo "<td>" . $nesteRad['timer'] . "</td>";
echo "<td>" . $nesteRad['aktiv'] . "</td>";
echo "</tr></table>";


$stmt->close();
 
Den nederste delen skaper trøbbel tho. tror ikke det er på den måten jeg skal skrive ut dataene.
Endret av ponas91
Lenke til kommentar

Først så må du slutte å ukritisk kopiere kode uten å forstå hva den gjør. Finn ut hva

fetch_array(MYSQLI_NUM)
gjør, spesielt MYSQLI_NUM

http://php.net/manual/en/mysqli-result.fetch-array.php

 

Punkt 2, lær deg litt debugging. Den enkleste formen er å legge til noe midlertidig kode for å se hvilke verdier som faktisk ligger i variablene, print_r() og var_dump() er kjekke funksjoner til dette. Skal du ha det enda bedre så installerer/legger du til en debugger som f.eks. xdebug og tar i bruk ett IDE (netbeans, phpstorm osv), da får du mulighet til å legge til break points i koden, og kan single steppe deg igjennom og følge med på hva som skjer.

Lenke til kommentar

Først så må du slutte å ukritisk kopiere kode uten å forstå hva den gjør. Finn ut hva

fetch_array(MYSQLI_NUM)
gjør, spesielt MYSQLI_NUM

http://php.net/manual/en/mysqli-result.fetch-array.php

 

Punkt 2, lær deg litt debugging. Den enkleste formen er å legge til noe midlertidig kode for å se hvilke verdier som faktisk ligger i variablene, print_r() og var_dump() er kjekke funksjoner til dette. Skal du ha det enda bedre så installerer/legger du til en debugger som f.eks. xdebug og tar i bruk ett IDE (netbeans, phpstorm osv), da får du mulighet til å legge til break points i koden, og kan single steppe deg igjennom og følge med på hva som skjer.

 

mer skulle ikke til! danke

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...