Gå til innhold

hente ut info fra mysql og link til mer info..


Anbefalte innlegg

Har en kode som henter ut info:

<?php
$con = mysql_connect("localhost","sql","passord") or die('Could not connect: ' .mysql_error());
mysql_select_db("sql", $con) or die(mysql_error());

$q="SELECT * FROM `medlemmer` WHERE `bil`='1'";
$sql = mysql_query($q) or die("MySQL ERROR: ".mysql_error());
echo "Disse pesonene har egen bil:";
while($data=mysql_fetch_array($sql)) {
   echo $data['fornavn']." ".$data['etternavn'];
   echo "<br />";
}
mysql_close($con);
?>

 

Den henter alle personer som har krysset av i checkboxen "bil"

 

Men jeg vil at navnet som den lister opp skal fungere som en link, når jeg trykker på linken får jeg opp resten av personalia til personen.

 

Hvordan kan jeg få til dette ?

Lenke til kommentar
Videoannonse
Annonse


while($data=mysql_fetch_array($sql)) {
echo $data['fornavn']." ".$data['etternavn'];
echo "<br />";
}

Her listes alle navnene. Det du vil gjøre er å lage en lenke her som for eksempel:

 


while($data=mysql_fetch_array($sql)) {
   echo '<a href="personalia.php?ID='.$data['personID'].'">';
echo $data['fornavn']." ".$data['etternavn'];
   echo '</a>';
echo "<br />";
}

Forutsetningen her er selvfølgelig at du har en fil som heter personalia.php som leser $_GET['personID'] og lister personalia ut fra det.

 

Håper det hjelper.

Endret av BlueEAGLE
Lenke til kommentar

personalia.php:

<?php
$con = mysql_connect("localhost","sql","passord") or die('Could not connect: ' .mysql_error());
mysql_select_db("sql", $con) or die(mysql_error());

$q="SELECT * FROM `medlemmer`";
$sql = "SELECT * FROM `medlemmer` WHERE `ID` = " . mysql_real_escape_string ( $_GET['ID'] );
mysql_select_db ( $database, $connect );
if ( @mysql_query ( $sql ) )
{
 $query = mysql_query ( $sql );
 $row = mysql_fetch_assoc ( $query );
 echo $row['fornavn']. " " .$row['etternavn']. "<br />" .$row['telefon'];
}
else {
 die ( mysql_error () );
}
?>

Fikk denne til å fungere.

 

Men har et par checkboxer i en form som jeg skal hente ut info fra.

Men vil bare ha dem i lista dersom den har value=1

Dersom checkboxen ikke er kryssa av (value=0) vil jeg ikke ha den i lista her.

 

Gode forslag ?

Lenke til kommentar

Forklar gjerne litt bedre, så kan vi kansje hjelpe til litt bedre.

 

Men har et par checkboxer i en form som jeg skal hente ut info fra.

Men vil bare ha dem i lista dersom den har value=1

Det er jo bare enkle sql-spørringer som må til:

 

$q="SELECT * FROM `medlemmer` WHERE `dame`='1' AND `sexy`='1'";
$sql=mysql_query($q);

$data=mysql_fetch_array($sql);

echo $data['damens_navn'];
//Nå har vi hentet ut de som har krysset av for sexy, og dame.

Endret av warpie
Lenke til kommentar

i den formen jeg snakket om har jeg flere checkboxer hvor ver enkelt representerer et kurs. ca 20 stk.

Når jeg går inn og henter ut info om personene vil jeg ha med i lista di kursa som personen har. di kursa som personen ikke har skal ikke vises.

Lenke til kommentar

Fant det litt vanskelig å forstå hva du mente... *Kommer edit så fort jeg har tolket teksten*

 

Tror jeg har tolket deg rett nå som jeg skriver dette:

 

//Kurser - Bare forsøk å forstå denne. (rediger og tilpass til dine kursnavn)
$kurs[0] = ($row['kurs_psykologlek']=="1") ? $row['kurs_psykologlek'] : "";
$kurs[1] = ($row['kurs_datateknikk']=="1") ? $row['kurs_datateknikk'] : "";
$kurs[2] = ($row['kurs_forstehjelp']=="1") ? $row['kurs_forstehjelp'] : "";

//ikke vits å røre
foreach($kurs as $data) {
if($data != "") echo "Skal ha kurs i $data<br />";
}

 

Du trenger ikke gjøre det slik heller da... Men, det blir vel blandt de lettere, og mer forståelige måtene, selv om det blir klumesete når en har så mange kurs.

 

----

 

Kan hende jeg er trøtt, men jeg ville egentlig hatt en egen kurs DB-tabell, deretter jukset slik jeg altid gjør, ved å ha en kolonne i brukertabellen som inneholdt en rekke nummere, som da er ID-en til de forskjellige kursene, separert hver nummer med |, f.eks: 1|5|8|3|9|12|33

 

Så hadde jeg gjort noe slik (kan altid være feil i mine eksempler, slørver mye når jeg er trøtt):


$q="SELECT * FROM `medlemmer` WHERE user_id='1'";
$sql=mysql_query($q);
$data=mysql_fetch_array($sql);

echo "<h2>Personen har meldt seg opp for følgende kurs:</h2>";

$kurs = explode("|", $data['user_kurs']);
foreach($kurs as $kid) {
 $kurs_sql=mysql_query("SELECT * FROM `kurs_db` WHERE kurs_id='".$kid."'");
 $kurs_data=mysql_fetch_array($sql);

 echo $kurs_data['kurs_navn']."<br />";
}

På denne måten så er koden altid fungerende, selv om du endrer navn på kurset, eller legger til nye. Ingen flere modifikasjoner må bli gjort.

 

Om du er intressert i mer hjelp ang. det systemet der så kan jeg sikkert slå inn noen eksempler de nermeste dagene.

Endret av warpie
Lenke til kommentar

Føler det er litt vanskelig å forklare også.

<label class="title" for="fornavn">Fornavn: </label><input type="text" name="fornavn" /><br />
<label class="title" for="etternavn">Etternavn: </label><input type="text" name="etternavn" /><br />
<label class="title" for="telefon">Telefon: </label><input type="int" name="telefon" /><br />
<label class="title" for="epost">Epost: </label><input type="text" name="epost" /><br />
<label class="title" for="adresse">Postadresse: </label><input type="text" name="adresse" /><br />
<label class="title" for="vannc">Vann C: </label><input type="checkbox" name="vannc" value="1" <?php if ($_POST['vannc']): ?>checked="checked"<?php endif; ?> /><br />
<label class="title" for="vannb">Vann B: </label><input type="checkbox" name="vannb" value="1" <?php if ($_POST['vannb']): ?>checked="checked"<?php endif; ?> /><br />
<label class="title" for="vanna">Vann A: </label><input type="checkbox" name="vanna" value="1" <?php if ($_POST['vanna']): ?>checked="checked"<?php endif; ?> /><br />
<label class="title" for="elveredning">Elveredning: </label><input type="checkbox" name="elveredning" value="1" <?php if ($_POST['elveredning']): ?>checked="checked"<?php endif; ?> /><br />

 

Der er deler av koden av formet som alt blir registrert gjennom.

 

Det som var planen var at viss jeg trykker meg inn på siden medlemmer, får jeg en liste med kun navn på personene i alfabetisk rekkefølge.

Trykker jeg inn på et navn, får jeg opp resten av personaliaen til personen, samt at jeg vil ha en liste over hvilke checkboxen som er avkrysset.

 

jeg henter ut info med:

$q="SELECT * FROM `medlemmer` ORDER BY fornavn ASC";
$sql = mysql_query($q) or die("MySQL ERROR: ".mysql_error());

echo "Navn på medlemmer:";
echo "<br />";
while($data=mysql_fetch_array($sql)) {
echo '<a href="personalia.php?ID='.$data['ID'].'">';
	echo $data['fornavn']." ".$data['etternavn'];
echo '</a>';
	echo "<br />";
}

Og det er her jeg vil ha inn infoen om hvilke checkboxer som er avkrysset.

Lenke til kommentar

Personlia.php

 

<?php
$con = mysql_connect("localhost","sql","passord") or die('Could not connect: ' .mysql_error());
mysql_select_db("sql", $con) or die(mysql_error());

$sql = "SELECT * FROM `medlemmer` WHERE `ID` = " . mysql_real_escape_string ( $_GET['ID'] );
if (@mysql_query($sql)) {
$query = mysql_query ( $sql );
$row = mysql_fetch_assoc ( $query );
echo $row['fornavn']. " " .$row['etternavn']. "<br />" .$row['telefon'];

//Kurser - Bare forsøk å forstå denne. (rediger og tilpass til dine kursnavn)
$kurs[0] = ($row['kurs_psykologlek']=="1") ? $row['kurs_psykologlek'] : "";
$kurs[1] = ($row['kurs_datateknikk']=="1") ? $row['kurs_datateknikk'] : "";
$kurs[2] = ($row['kurs_forstehjelp']=="1") ? $row['kurs_forstehjelp'] : "";

//ikke vits å røre
foreach($kurs as $data) {
  if($data != "") echo "Skal ha kurs i $data<br />";
}
} else die(mysql_error());
?>

Endret av warpie
Lenke til kommentar

Personlia.php

 

<?php
$con = mysql_connect("localhost","sql","passord") or die('Could not connect: ' .mysql_error());
mysql_select_db("sql", $con) or die(mysql_error());

$sql = "SELECT * FROM `medlemmer` WHERE `ID` = " . mysql_real_escape_string ( $_GET['ID'] );
if (@mysql_query($sql)) {
$query = mysql_query ( $sql );
$row = mysql_fetch_assoc ( $query );
echo $row['fornavn']. " " .$row['etternavn']. "<br />" .$row['telefon'];

//Kurser - Bare forsøk å forstå denne. (rediger og tilpass til dine kursnavn)
$kurs[0] = ($row['kurs_psykologlek']=="1") ? $row['kurs_psykologlek'] : "";
$kurs[1] = ($row['kurs_datateknikk']=="1") ? $row['kurs_datateknikk'] : "";
$kurs[2] = ($row['kurs_forstehjelp']=="1") ? $row['kurs_forstehjelp'] : "";

//ikke vits å røre
foreach($kurs) {
  if($kurs != "") echo "Skal ha kurs i $kurs<br />";
}
} else die(mysql_error());
?>

syntax error på linje 18: foreach($kurs) {

Lenke til kommentar

Jeg tror du burde ha hvertfall to tabeller for dette. Én tabell som omhandler personalia, én tabell med checkboxnavn og eventuell informasjon og én tabell som sier hvem som har valgt hva.

 

Tabell 1 vil ha disse feltene.

  1. Id
  2. Fornavn
  3. Etternavn
  4. Telefon
  5. Epost
  6. Postadresse

Husk å sette rett constraint på feltene, f.eks at epost må være unik. Så slipper du doble innlegg i databasen.

 

Tabell 2 vil ha følgende felter:

  1. Id
  2. CheckboxNavn

og Tabell 3 har følgende felter

  1. PersonID references Tabell1(ID)
  2. Checkbox references Tabell2(ID)

Dette vil føre til litt mer å holde styr på når du setter inn og sletter, men queryene vil bli som dette.

SELECT t2.CheckboxNavn from Tabell1 t1, Tabell2 t2, Tabell3 t3 WHERE t3.personid = t1.id AND t3.checkbox = t2.id and t1.epost = '[email protected]';

 

EDIT: Slettet noen unødvendige tags

Endret av hjahre
Lenke til kommentar

*snip*

syntax error på linje 18: foreach($kurs) {

 

Hvis du ønsker å ikke miste all respekt her på php-forumet, så burde du vurdere å få gjort litt selv... Jeg er sikker på at en hver hadde klart å funnet ut av den feilen der, om de bare hadde orket.

 

Men, nå er det bare å se på mitt forrige innlegg: Har oppdatert det.

Endret av warpie
  • Liker 1
Lenke til kommentar

Ja burde sett den feilen der.

 

Men fått gode tips fra en kamerat på hvordan jeg skal gå fram.

Nå har jeg laga 3 tabeller.

Tabell1:(folk) ID, fornavn, etternavn, telefon, epost, adresse

Tabell2: (kursnavn) kursnavnid, kursnavn

Tabell3: (harlurs) personid, kursid

 

Koden vi har komt opp med og mener skal fungere er som følger:

 

<?php
$con = mysql_connect("localhost","sql","passord") or die('Could not connect: ' .mysql_error());
mysql_select_db("sql", $con) or die(mysql_error());
$sql[0] = sprintf("SELECT * FROM `folk` WHERE `ID` = %d;", mysql_real_escape_string ($_GET['ID']));
if (@mysql_query($sql[0])) {
    $query[0] = mysql_query ( $sql[0] );
$result[0] = mysql_fetch_assoc ( $query[0] );
}
$person = $result[0][0];
$person_id = $result[0][0]['ID'];

$sql[2] = "SELECT * FROM `kursnavn`";
if (@mysql_query($sql[2])) {
    $query[2] = mysql_query ( $sql[2] );
$result[2] = mysql_fetch_assoc ( $query[2] );
}
$kursliste = FixArray($result[2], 'kursid', 'kursnavn');

$sql[1] = sprintf("SELECT * FROM `harkurs` WHERE `personid` = %d;", $person_id);
if (@mysql_query($sql[1])) {
    $query[1] = mysql_query ( $sql[1] );
$result[1] = mysql_fetch_assoc ( $query[1] );
}
$person_kurs = FixArray($result[1], 'kursid', 'personid');

echo $person['fornavn']. " " .$person['etternavn']. "<br />" .$person['telefon']. "<br />";
foreach ($person_kurs as $gotkurs => $dump) {
printf("Påmeldt; %s<br />\n", $kursliste[$gotkurs]);
}
function FixArray($arny,$key,$value=false) {
    foreach ($arny as $a) {
		    $at=$a;
		    unset($at[$key]);
		    if (count($at)==1) $ax=array_keys($at); $at=$at[$ax[0]];
		    if ($value<>false) $at=$a[$value];
		    $newt[$a[$key]]=$at;
    }
    return $newt;
}
?>

 

Men et lite problem.., vi får ikke noe info ut fra den.

Vi har lest den opp/ned bak/fram uten å finne ut hvorfor den ikke vil.

 

Noen gode øyne som kan se over ?

Lenke til kommentar

Du utfører sql'en to ganger, en gang i if'en og så en gang til, dette er unødvendig. Fjern også @ når du utvikler, slik at du får beskjed om evt. advarsler og feilmeldinger.

 

Du kan gjøre det slik hvis du kun skal hente ut første rad:

$result[0] = mysql_fetch_assoc(mysql_query($sql[0]));

 

Dette blir feil siden du bruker mysql_fetch_assoc

$person = $result[0][0];

Du må bruke felt navnet i stedet for 0

$person = $result[0]['felt_navn'];

 

 

Siden du bruker id fra folk til å gjøre ett oppslag i harkurs, så kan dette gjøres med ett oppslag. Se nærmere på INNER JOIN

SELECT f.id, f.navn, h.felt1, h.felt2, h.felt3
FROM `folk` AS f
INNER JOIN `harkurs` AS h ON h.personid=f.id
WHERE f.id = %d

 

print_r() er nyttig å bruke når man debugger, f.eks. hvis du ønsker å se hva som blir returnet fra ett oppslag:

$result[0] = mysql_fetch_assoc(mysql_query($sql[0]));
echo '<pre>';
print_r($result[0]);
echo '</pre>';

Lenke til kommentar

Fikk fikset feilen i koden. Endelig kode:

 

 <?php
$connection =  mysql_connect("localhost", "sql", "passord");
if (!$connection) {
   die('Could not connect: ' . mysql_error());
}
mysql_select_db("sql");

$sql[0] = sprintf("SELECT * FROM `folk` WHERE `ID` = %d LIMIT 1;", mysql_real_escape_string ($_GET['ID']));
if ($query[0] = @mysql_query($sql[0])) {
    $result[0] = mysql_fetch_assoc ( $query[0] );
} else {
    die('SQL ERROR');
}

$person		 = $result[0];
$person_id	  = $result[0]['ID'];

$sql[2] = "SELECT * FROM kursnavn";
if ($query[2] = @mysql_query($sql[2])) {
    while ($row = mysql_fetch_assoc($query[2])) {
		    $result[2][] = $row;
    }
}
$kursliste = FixArray($result[2], 'kursnavnid', 'kursnavn');

$sql[1] = sprintf("SELECT * FROM `harkurs` WHERE `personid` = %d;", $person_id);
if (@mysql_query($sql[1])) {
    $query[1] = mysql_query ( $sql[1] );
    while ($row = mysql_fetch_assoc($query[1])) {
		    $result[1][] = $row;
    }
}

$person_kurs = array();
if (isset($result[1]) && is_array($result[1])) {
    $person_kurs = FixArray($result[1], 'kursid', 'personid');
}

echo "<strong><h3>Navn:</h3></strong>". $person['fornavn']. " " .$person['etternavn']. "<br />" .$person['telefon']."<strong><h4>Kompetanse: </h4></strong>";
foreach ($person_kurs as $gotkurs => $dump) {
    printf("%s<br />\n", $kursliste[$gotkurs]);
}

function FixArray($arny,$key,$value=false) {
    foreach ($arny as $a) {
		    $at=$a;
		    unset($at[$key]);
		    if (count($at)==1) $ax=array_keys($at); $at=$at[$ax[0]];
		    if ($value<>false) $at=$a[$value];
		    $newt[$a[$key]]=$at;
    }
    return $newt;
}
?>

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...