Avatar billede iceyblue Nybegynder
04. juli 2002 - 01:33 Der er 18 kommentarer og
1 løsning

Textfield eller combo vise indhold fra MySQL-base, hvordan?

Hej!
Arbejder med PHP og MySQL.

Hvordan fungerer det, hvis jeg skal have vist indholdet, eller noget af indholdet fra min database i et felt på en website, eks. textfield eller combobox?

Jeg har eks. en database med nogle navne og adresser, hvis jeg gerne vil have vist alle navne i et textfield/combo på en website, hvordan gør jeg så?

I min form, skal den så stå på POST eller GET?? Her er min PHPkode for at vise hele databasen direkte på baggrunden af en website:

<?php
$connection = mysql_connect("localhost", "root");
$db = "test_db";

$result = mysql_db_query($db, "SELECT * FROM medlemmer", $connection);

while($row = mysql_fetch_array($result))
{
    echo "Nr. : ", $row["id"]."<br>";
        echo "Navn:      ", $row["fornavn"]." ",$row["efternavn"]."<br>";
    echo "Adresse. : ", $row["adresse"]."<br>";
    echo "<br>\n";
}
mysql_free_result($result);
?>

Ved ikke om det kan bruges til noget? Tænker på om det er nogenlunde den samme måde, jeg gør det på, hvis jeg skal vise indholdet i en boks i stedet for!

Håber nogen kan hjælpe mig.
Avatar billede tmceu Praktikant
04. juli 2002 - 11:29 #1
Du får nok bedre hjælp i PHP kategorien, da det primære problem her vil ikke er dit SELECT statement, men mere PHP koden.
Avatar billede muddi Praktikant
04. juli 2002 - 12:52 #2
Skal alt indholdet stå i samme box?
Avatar billede muddi Praktikant
04. juli 2002 - 12:59 #3
Eller skal hvert felt i databasen vises i hvert sit felt på siden?

Du skal bare skrive værdierne fra databasen i dit textarea-tag.

Eks.:

<?php
connect_to_myDB();
$foresp = mysql_query("SELECT * FROM table");

while($result = mysql_fetch_row($foresp)){
  print "<input type=\"text\" value=\"" . $result[0] . "\">";
  print "<textarea>" . $result[1] . "</textarea>";
}


Dette er en måde at få udtrækket fra databasen vist i dine textfelter!
?>
Avatar billede muddi Praktikant
04. juli 2002 - 13:08 #4
Har prøvet at vise det med din egen kode. Der var en del fejl i din egen kode, men de skulle være rettet nu!

while($row = mysql_fetch_array($result))
{
    echo "Nr.: <input type=\"text\" value=\"". $row["id"]."\"><br>";
    echo "Navn: <input type=\"text\" value=\"". $row["fornavn"]." ".$row["efternavn"]."\"><br>";
    echo "Adresse: <input type=\"text\" value=\"". $row["adresse"] . "\"><br>";
    echo "<br>\n";
}
Avatar billede iceyblue Nybegynder
04. juli 2002 - 16:03 #5
ok, det er nok meningen at det skal stå i hver deres felt, men det var sådan set bare for at få princippet i det!
Prøver det lige i aften ;)
Avatar billede muddi Praktikant
05. juli 2002 - 02:55 #6
Virker det?
Avatar billede iceyblue Nybegynder
05. juli 2002 - 11:01 #7
Hej! Det var ikke til at komme igennem her på siden i går :(
Jeg kan ikke helt gennemskue koden. Hvad bruger man de der "\" til?

Ok, kommer her med et rigtigt eksempel:
Jeg laver et nyhedssytem med PHP og MySQL. Databasen er oprettet med et par felter "ID,SUBJECT,DATE,TEXT,NAME". Jeg kan fint indsætte nye indlæg med forms, men man skulle jo gerne kunne slette indlæg også.

Derfor havde jeg tænkt, at det skulle virke via en comboboks, som eks. viser alle overskrifterne for de indlæg der er i db. På den måde skal brugeren bare vælge en overskrift i combo'en og trykke slet. Herefter skal det valgte indlæg forsvinde fra db. Så comboen skal simpelthen hente SUBJECT i db!

Er det en forkert måde at gøre det på?? Har du forslag til hvordan koden skal se ud med en combo?

Her er lidt kode fra min fil, ved godt at det er helt forkert, men måske det hjælper dig med at rette i det:

<?php
$connection = mysql_connect("localhost", "root");
$db = "news_db";

while($row = mysql_fetch_array($result))
{
    echo "Emne <select name=\"emneliste" value="$row["subject"]">"";
)
?>
Avatar billede muddi Praktikant
05. juli 2002 - 14:33 #8
Jamen det kan jeg da sagtens hjælpe dig med! :o)

"\" (backslash) bruges til at escape ulovlige tegn i PHP. F.eks. $, " og \ er reserverede og escapes hvis de skal printes til browseren. Eks.:

print("\$ \" \\"); // udskriver $ " \

Istedet for at escape kunne man også bare bruge ' istedet for! <input type='text'...
Avatar billede muddi Praktikant
05. juli 2002 - 14:36 #9
Skal det være muligt at slette flere indlæg ad gangen?
Avatar billede iceyblue Nybegynder
05. juli 2002 - 14:49 #10
Aha...ok!!
Det er måske en god ide at kunne slette flere, men jeg havde bare tænkt mig at slette en af gangen, da det sikkert er lettere at kode...er jo en slags begynder i det her, så jeg tager det stille og roligt ;)
Kan du vise mig hvordan det ser ud med en combo??
Avatar billede muddi Praktikant
05. juli 2002 - 15:04 #11
Jeg er lige igang med noget kode til dig! Jeg er klar med det lige om et øjeblik - håber jeg! :o)
Avatar billede muddi Praktikant
05. juli 2002 - 15:17 #12
Det her skal du bruge for at få listen med dem der kan slettes:
-----------------------------------

<select id="nyheder" name="nyheder[]" size="10" multiple>
<?php
connect();
$foresp = mysql_query("SELECT * FROM nyheder ORDER BY dato");

while($kategorier = mysql_fetch_array($foresp)){
?>
<option value="<?=$kategorier['id'];?>><?=$kategorier['subject']?></option>
<?php
}
close();
?>
</select>

-------------------------
Slettekoden kommer lige om snart!
Avatar billede muddi Praktikant
05. juli 2002 - 15:31 #13
Her er slettekoden:

<?php
// åben forb. til databasen
for($i = 0; $i < count($nyheder); $i++){
  mysql_query("DELETE FROM nyheder WHERE id = $id");
}
// luk forb. til databasen
?>

Du bør nok anbringe dem på hver deres side!
Avatar billede muddi Praktikant
05. juli 2002 - 15:37 #14
Ups... der var lige et par småting der måtte rettes til, men nu skulle det virke. Du skal bare lige oprette forbindelse til databasen og så sætte de rigtige feltnavne ind.

Jeg har lavet det sådan at du kan have det på en og samme side!

---------------------------------


<?php
if($nyheder){
  // åben forb. til databasen
  for($i = 0; $i < count($nyheder); $i++){
    mysql_query("DELETE FROM nyheder WHERE id = $id");
  }
  // luk forb. til databasen
}
?>


<form action="<?=$PHP_SELF;?>" method="post">
<select name="nyheder[]" size="10" multiple>
<?php
connect(); // her åbnes forb. til databasen
$foresp = mysql_query("SELECT * FROM nyheder ORDER BY dato");
while($news = mysql_fetch_array($foresp)){
?>
<option value="<?=$news['id'];?>><?=$news['subject']?></option>
<?php
}
close(); // her lukkes forb. til databasen
?>
</select>
<input type="submit">
</form>
Avatar billede muddi Praktikant
06. juli 2002 - 23:12 #15
iceyblue >> Har du fået det til at virke?
Avatar billede iceyblue Nybegynder
08. juli 2002 - 22:25 #16
Hej Muddi!!
Sidder og kikker lidt på det nu. Min Dreamweaver går amok med gule koder (fejl) efter, at jeg har indsat linien med: <option value="<?=$news['id'];?>><?=$news['subject']?></option>

Er det noget du har testet?? Kan desværre ikke finde ud af hvordan det skal gøres :(

Kan ikke se hvad det første PHP script gør?? Hvordan virker variablen $nyheder eller hvorfor er den med?? Hva bruger vi den til??

Er du sikker på at det hele skal stå i den rækkefølge??
Avatar billede muddi Praktikant
09. juli 2002 - 03:40 #17
<?php
if($nyheder){
  // åben forb. til databasen
  connect();
  for($i = 0; $i < count($nyheder); $i++){
    mysql_query("DELETE FROM nyheder WHERE id = ".$nyheder[$i]);
  }
  // luk forb. til databasen
  close();
}
?>


<form action="<?=$PHP_SELF;?>" method="post">
<select name="nyheder[]" size="10" multiple>
<?php
connect(); // her åbnes forb. til databasen
$foresp = mysql_query("SELECT * FROM nyheder ORDER BY dato");
while($news = mysql_fetch_array($foresp)){
?>
<option value="<?=$news['id'];?>"><?=$news['subject']?></option>
<?php
}
close(); // her lukkes forb. til databasen
?>
</select>
<input type="submit" value="send">
</form>



Denne kode virker! Den har jeg lige testet på min egen server, og det fungerer som det skal!!! :D

Dreamweaver flipper skråt fordi den tror du laver et tag i et andet tag, hvilket normalt ikke er lovligt - medmindre det ene tag er et serverside-tag, såsom ASP, JSP eller PHP!

Variablen nyheder indeholder et array med alle de id der skal slettes fra tabellen nyheder.
Du kan se dette array ved at tilføje dette nederst i scriptet:

print_r($nyheder);

Det vil komme til at se således ud:

Array ( [0] => 28 [1] => 29 )

Det betyder at den sletter posterne som har id = 28 og id = 29 i tabellen!

ps. du skal lige huske at indsætte din egen kode til at åbne forb. til databasen og til at vælge databasen!
Avatar billede muddi Praktikant
09. juli 2002 - 03:44 #18
Det behøver ikke at stå helt i den rækkefølge, man kunne godt skrive:




<form action="<?=$PHP_SELF;?>" method="post">
<select name="nyheder[]" size="10" multiple>
<?php
connect(); // her åbnes forb. til databasen
$foresp = mysql_query("SELECT * FROM nyheder ORDER BY dato");
while($news = mysql_fetch_array($foresp)){
?>
<option value="<?=$news['id'];?>"><?=$news['subject']?></option>
<?php
}
close(); // her lukkes forb. til databasen
?>
</select>
<input type="submit" value="send">
</form>


<?php
if($nyheder){ // afvikles kun hvis arrayet $nyheder ik er tomt
  // åben forb. til databasen
  connect(); // SLET DENNE
  for($i = 0; $i < count($nyheder); $i++){
    mysql_query("DELETE FROM nyheder WHERE id = ".$nyheder[$i]);
  }
  // luk forb. til databasen
  close(); // SLET DENNE
}
?>

Men det gør altså ikke nogen forskel!
Avatar billede iceyblue Nybegynder
18. juli 2002 - 12:06 #19
Tak for hjælpen!! Jeg kikker på det i dag. Hvis du siger, at du har testet det, ja så skal det jo også virke.
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
Computerworld tilbyder specialiserede kurser i database-management

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