Avatar billede tausen Nybegynder
08. juli 2006 - 11:35 Der er 33 kommentarer og
1 løsning

Hente data fra MySQL (php)?

Hej.
Jeg har i nogen tid forsøgt på at hente data fra MySQL, men jeg kan ikke få det til at virke. Jeg benytter mig også af PHP.

$vaelgfoernavn = mysql_query("SELECT * FROM $tablenavn.$fieldnavn");
echo mysql_result($vaelgfoernavn, 0);

Dette returnerer
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /var/www/sjuk.dk/public_html/mysql/tilfoej.php on line 40

Er der nogen der kan hjælpe mig med dette?
Avatar billede jaw Nybegynder
08. juli 2006 - 11:38 #1
Er du sikker på, at $tablenavn og $fieldnavn indeholder det rigtige?

Og desuden, så kan du ikke bruge mysql_result på den måde du gør her. Du skal have kørt en løkke, der udskriver så længe der kommer data fra databasen, f.eks.:

$vaelgfoernavn = mysql_query("SELECT * FROM $tablenavn.$fieldnavn");
while($row = mysql_fetch_assoc($vaelgfornavn)) {
  echo $row['feltnavn']."<br />";
}

Så bliver der opbygget et array (i det her tilfælde $row) af feltnavnene du har udhentet, som du så kan udskrive i løkken.
Avatar billede jaw Nybegynder
08. juli 2006 - 11:38 #2
Og en god ide, hvis man får fejl, er at bede mysql om at udskrive fejlmeddelelsen:

$vaelgfoernavn = mysql_query("SELECT * FROM $tablenavn.$fieldnavn") or die(mysql_error());
Avatar billede taskmgr Nybegynder
08. juli 2006 - 13:16 #3
Måske vil du egentlig gøre sådan her?

"SELECT $fieldnavn FROM $tablenavn"
Avatar billede tausen Nybegynder
08. juli 2006 - 14:00 #4
Tak for hjælpen!

$tablenavn og $fieldnavn er definerede sådan her:

$fieldnavn = $nummer;
$tablenavn = "produkter";

mens $nummer er defineret af brugeren, dvs. et tal fra 1-10

Men jeg forsøgte mig med:

$vaelgfoernavn = mysql_query("SELECT $fieldnavn FROM $tablenavn") or die(mysql_error());
while($row = mysql_fetch_assoc($vaelgfornavn)) {
echo $row['$fieldnavn']."<br />";
}

Hvor jeg modtager beskeden:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/sjuk.dk/public_html/mysql/tilfoej.php on line 41

Mens jeg med:

$vaelgfoernavn = mysql_query("SELECT * FROM $tablenavn.$fieldnavn") or die(mysql_error());
$vaelgfoernavn = mysql_query("SELECT $fieldnavn FROM $tablenavn") or die(mysql_error());
while($row = mysql_fetch_assoc($vaelgfornavn)) {
echo $row['$fieldnavn']."<br />";
}

Modtager beskeden:

Access denied for user 'sjuk_dk'@'%' to database 'produkter'


Hmm... Det lyder ikke så godt?
Avatar billede jaw Nybegynder
08. juli 2006 - 14:17 #5
Har du defineret dine connections rigtigt?

mysql_connect("<host>", "<brugernavn>", "<password>") or die(mysql_error());
mysql_select_db("<databasenavn>") or die(mysql_error());

Igen kan mysql_error() måske hjælpe dig...
Avatar billede tausen Nybegynder
08. juli 2006 - 15:27 #6
Ja, de er definerede rigtigt. Jeg kan godt smide ting op på MySQL.
Avatar billede tausen Nybegynder
09. juli 2006 - 14:25 #7
Okay, jeg fandt fejlen.

$vaelgfoernavn = mysql_query("SELECT * FROM $tablenavn.$fieldnavn");
while($row = mysql_fetch_assoc($vaelgfornavn)) {
  echo $row['feltnavn']."<br />";
}

Først står der $vaelgfoernavn, anden gang står der vaelgfornavn, hvilket jeg rettede og fik det til at virke. Troede jeg. Jeg ændrede det til:

$vaelgfoernavn = mysql_query("SELECT * FROM $tablenavn.$fieldnavn");
while($row = mysql_fetch_assoc($vaelgfornavn)) {
  echo "MySQL data:".$row['feltnavn']."<br />";
}

Hvor jeg får outputtet:

MySQL data:

Intet andet? Jeg er sikker på der står noget i feltet på MySQL, men ingenting kommer frem.
Nogen ideér?

-Tausen
Avatar billede jaw Nybegynder
09. juli 2006 - 16:19 #8
Du har da stadig $vaelgfoernavn og $vaelgfornavn?! Og så skal ['feltnavn'] jo ændres til navnet på feltet. Hvis det er $fieldnavn, så skal det være $row[$fieldnavn].
Avatar billede tausen Nybegynder
09. juli 2006 - 17:12 #9
Pinligt...
Det må du undskylde, jeg kom desværre til at sætte den samme tekst ind 2 gange...
Jeg prøver lige igen...
Der står egentlig:

$fieldnavn = $produktnummer;
$tablenavn = "produkter";

$vaelgfoernavn = mysql_query("SELECT $fieldnavn FROM $tablenavn") or die(mysql_error());
while($row = mysql_fetch_assoc($vaelgfoernavn)) {
echo "MySQL data:".$row['$fieldnavn']."<br>";
}

Det ser lidt mere fornuftigt ud... Dog virker det ikke alligevel xD

-Tausen
Avatar billede jaw Nybegynder
09. juli 2006 - 17:17 #10
$fieldnavn = $produktnummer; <- det der er jo egentlig bare dobbeltkonfekt. Hvor kommer $produktnummer så fra? Og udskriver den "MySQL data:" på skærmen?
Avatar billede tausen Nybegynder
09. juli 2006 - 17:19 #11
Ja, det har du ret i, men det er bare for at gøre det en smule nemmere at finde ud af senere...

Men $produktnummer er defineret af brugeren i en form, og den udskriver "MySQL data:" på skærmen lige så mange gange som der er antal rækker i feltet...
Avatar billede jaw Nybegynder
09. juli 2006 - 17:22 #12
Prøv: $row[$fieldnavn]; altså uden '...'
Avatar billede tausen Nybegynder
09. juli 2006 - 17:31 #13
Tak for at du hjælper mig!
Okay...
Nu får jeg outputtet:
MySQL data:1

Hmm.. Den skriver navnet på feltet nu... Altså "MySQL data:1" når jeg aflæser med $fieldnavn = 1, og "MySQL data:2" med $fieldnavn = 2

Hvis jeg ikke var forvirret før, så er jeg det nu...
Avatar billede jaw Nybegynder
09. juli 2006 - 17:34 #14
Det er jeg også. $fieldnavn indeholdet et tal? Hedder feltnavnen i databasen 1, 2, 3 osv??? Hvad er navnet på det felt du vil have data fra?
Avatar billede tausen Nybegynder
09. juli 2006 - 17:38 #15
Ja, $fieldnavn er et tal, og felterne på MySQL hedder 1,2,3 osv.
Jeg forsøger at hente data fra felt 1, derfor sætter jeg $produktnummer til 1.
Avatar billede jaw Nybegynder
09. juli 2006 - 17:46 #16
Det lyder for mig som en meget underlig databaseopbygning. Vil det sige, at den ser ca. sådan her ud:

|  1  |  2  |  3  |  4  |  5  |
-------------------------------
|info1|info2|info3|info4|info5|

?
Hm, kan ikke helt se hvordan den er opbygget...
Avatar billede tausen Nybegynder
09. juli 2006 - 17:50 #17
Okay, jeg har et table der hedder produkter. I det table har jeg navnene på de forskellige poster på den hjemmeside jeg leger med..

|  1  |  2  |  3  |  4  |  5  |
-------------------------------
|navn1|navn2|navn3|navn4|navn5|

Mens jeg har et andet table ved navn beskrivelser, hvor jeg har beskrivelserne på produkterne:

|  1  |  2  |  3  |  4  |  5  |
------------------------------------
|beskr1|beskr2|beskr3|beskr4|beskr5|

Og så videre...
Avatar billede tausen Nybegynder
09. juli 2006 - 17:51 #18
|  1  |  2  |  3  |  4  |  5  |
------------------------------------
|beskr1|beskr2|beskr3|beskr4|beskr5|

Ja okay det ser lidt ødelagt ud, men du ved hvad jeg mener... ^^
Avatar billede jaw Nybegynder
09. juli 2006 - 17:59 #19
Ja, men det virker stadig som en dårlig struktur, som aldrig vil blive særlig god, og jeg kan stadig ikke forstå hvordan du vil sortere i, hvad du udhenter hvornår.

Hvorfor ikke lave:
id | beskrivelse
-----------------
1 | beskr1
2 | beskr2
3 | beskr3

Og så i stedet udhente feltet "beskrivelse" hvor id'et så passer til det produktnummer du vil udhente?
Avatar billede tausen Nybegynder
09. juli 2006 - 18:04 #20
Hmm... Det lyder som en god ide... Men vil det så virke?
Jeg afprøver det med det samme...

Tak!
Du lægger bare et svar når du vil have nogle point og sådan... :D
Avatar billede jaw Nybegynder
09. juli 2006 - 18:12 #21
Hvis jeg forstår det du vil rigtigt, så skal det nok virke. Den kan du også udbygge, så du sætter et navnefelt "ved siden af" beskrivelsesfeltet.

og det med point tager vi når det funker :)
Avatar billede tausen Nybegynder
09. juli 2006 - 18:13 #22
Vil det forresten sige at jeg kan bruge SELECT query'en sådan her?

//$id er defineret af brugeren i stedet for $produktnummer
$tablenavn = "produkter";
$fieldnavn = "navne";

$vaelgfoernavn = mysql_query("SELECT $fieldnavn FROM $tablenavn WHERE id=$id") or die(mysql_error());

Vil det virke?
Avatar billede jaw Nybegynder
09. juli 2006 - 18:14 #23
Yes. Hvis de forskellige variabler er rigtige ($id), så er det præcis sådan jeg mener det...
Avatar billede tausen Nybegynder
09. juli 2006 - 18:20 #24
Okay jeg takker mange gange...

Jeg vil lige tage at afprøve det..
Og forresten, du aflægger bare et svar så du kan få de point ikke?
Mange tak for hjælpen!
Avatar billede tausen Nybegynder
09. juli 2006 - 18:31 #25
Hmm... Men før benyttede jeg mig jo af:

mysql_query("DELETE FROM `$tablenavn` WHERE fieldnavn=$produktnummer");

Til at slette med...
Så nu skal jeg bruge

mysql_query("DELETE FROM `$tablenavn` WHERE id=$id");

Men hvor skal jeg definere feltnavnet i den?
Avatar billede jaw Nybegynder
09. juli 2006 - 18:34 #26
Det skal du ikke, for nu sletter du vel en hel række, hvis det er et produkt du vil slette?
Avatar billede tausen Nybegynder
09. juli 2006 - 18:38 #27
Ahh...
Okay nu tror jeg at jeg er ved at fatte lidt... :P

Mange mange tak!
Avatar billede jaw Nybegynder
09. juli 2006 - 18:43 #28
Godt :) Så prøv dig lidt frem, og bare sig til hvis der er noget du ikke forstår eller noget, der ikke vil funke...
Avatar billede tausen Nybegynder
09. juli 2006 - 19:03 #29
Yes, jeg prøver... Tak for hjælpen!
Avatar billede tausen Nybegynder
09. juli 2006 - 21:52 #30
Okay, jeg kommer jo så allerede igen.
Jeg ved ikke om du kigger her igen, men hvis du gør så har jeg et spørgsmål:
Når jeg så skal bruge forhenværende
mysql_query("INSERT INTO `$tablenavn` ( `$produktnummer` ) VALUES ('$produktnavn')");

Skal jeg jo ændre den til...

mysql_query("INSERT INTO `$tablenavn` ( `$fieldnavn` ) VALUES ('$produktnummer')");

Ikke? Men hvad så med WHERE id=$id nogen steder? Kan jeg sætte det ind? Hvis ikke, hvor skal jeg så definere hvilken ID produktet skal være på?
Avatar billede jaw Nybegynder
09. juli 2006 - 21:56 #31
Jo, jeg kigger skam stadig - har da en email der pinger når du skriver :)

Mht. id, så er det vel et nyt produkt du vil oprette når du indsætter, ikke? Eller er produktnummeret defineret på forhånd?
Avatar billede tausen Nybegynder
09. juli 2006 - 22:11 #32
Produktnummeret er defineret på forhånd af brugeren ja...
Jeg vil gerne gøre det muligt at brugeren selv kan vælge hvor produktet skal stå, så han vælger hvad der er produkt 1, osv.
Og jeg har lavet en fejl i det jeg har skrevet igen xD

Der skulle stå:
"Skal jeg jo ændre den til...

mysql_query("INSERT INTO `$tablenavn` ( `$fieldnavn` ) VALUES ('$produktnavn')");"

Sådan...

Og forresten nu du er her... Kender du en kommando til at tælle antal rows?

Tak,
Tausen.
Avatar billede jaw Nybegynder
09. juli 2006 - 22:16 #33
1. Hvordan ser din database egentlig ud (hvis du vil kan vi også fortsætte msn/irc, vi nærmer os vist spam)

2. Ja, der er flere måde. Enten kan du efter udtrækket eller i udtrækket :

$q = mysql_query("SELECT ........");
$antal = mysql_num_rows($q);
eller:
$q = mysql_query("SELECT COUNT(*) as antal FROM tabelnavn");
while($row = mysql_fetch_assoc($q)) {
  echo $row['antal'];
}
Avatar billede tausen Nybegynder
09. juli 2006 - 22:20 #34
1. Hehehe... Ja jeg tror du har ret...
Jeg finder lige MSN frem, min er d_fortesque@hotmail.com ( spørg mig ikke hvad det er for en underlig email at have xD )

2. Mange tak!
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