Avatar billede albert Juniormester
01. maj 2010 - 20:00 Der er 21 kommentarer og
1 løsning

mysqli_fetch_array

Hej alle sammen!!

Jeg har været i gang med at arbejde med noget mysql_fetch_array hvor jeg gerne vil have noget specielt data printet ud på skærmen.

det jeg gør er at jeg
echo $resultstyle_top['style'][0];
fordi at jeg gerne vil have post nr 0 i arrayet, eftersom at arrayet starter fra 0 og op af, men det den gør er at den henter ciffer nr 0.

Er der nogen der kan give mig et svar på hvordan man henter det rigtige post?
Avatar billede olebole Juniormester
01. maj 2010 - 20:05 #1
<ole>

echo $resultstyle_top['style'] udskriver den sidste post i dit recordset - og derfor udskriver echo $resultstyle_top['style'][0] det første bogstav i den sidste post  ;o)

Du skal vel skrive noget à la:

while (mysql_fetch_array($esult)) {
    echo $resultstyle_top['style']."<br>";
}


/mvh
</bole>
Avatar billede albert Juniormester
01. maj 2010 - 20:10 #2
undskyld det forstår jeg ikk helt...
hvor henviser du variablen $resultstyle_top hen til?
Avatar billede albert Juniormester
01. maj 2010 - 20:13 #3
man kan altså ikke vælge den første post?
Avatar billede olebole Juniormester
01. maj 2010 - 20:42 #4
Du kan stort set, hvad somhelst. Hvis du fortæller mig præcist, hvad du vil, kan jeg måske endda fortælle, hvad du kan gøre for at opfylde ønsket  =)
Avatar billede Slettet bruger
01. maj 2010 - 20:57 #5
Du bliver nødt til at fortælle hvad $resultstyle_top['style'] indeholder.
- hvordan tildeler du den værdi ?

olebole>>

while ($noget_her = mysql_fetch_array($esult))
  {
  ...
  }

hehe, gotcha!
Avatar billede albert Juniormester
01. maj 2010 - 20:57 #6
det jeg vil er at jeg har en tabel i min DB med to poster,  hvor jeg gerne vil vælge den første.
jeg laver min query og mysqli_fetch_array for at lægge alle dataerne ind i et array. Jeg vil gerne spare for at lave alle de SELECT som jeg skal bruge.. 

Hvis jeg nu skulle vælge data nr 1 troede jeg somsagt at jeg bare kunne skrive $resultstyle_top['style'][0]; Findes der en smart løsning?
Avatar billede olebole Juniormester
01. maj 2010 - 21:06 #7
T4NK3R >> Ja måske ... men vi ved ikke noget om, hvad spørgeren egentlig spørger om. Man bruger aldrig mysql_fetch_array under MySQLI. Derimod bruger man som oftest fetch - og i sjældne tilfælde bruger nogen mysqli_fetch_array (hvorfor forstår jeg ikke, men ....).

Jeg fik blandet syntaksen for de to sammen i mit eksempel - som derfor ikke virker - men vi mangler stadig at få at vide, hvad spørgeren egentlig spørger om  =)
Avatar billede Slettet bruger
01. maj 2010 - 21:17 #8
albert1234 >>

Hver xfetch henter 1 række af resultatsættet.
- ikke dem allesammen i ét kæmpe multidimensionelt array.
Det er derfor man pakker den ind i en while loop.
Avatar billede albert Juniormester
01. maj 2010 - 21:29 #9
Nu har jeg måske fået noget til at virke..

Jeg lavede jo den while løkke som kørte alle de resultater igennem.
jeg ville gerne spare at lave en masse queries og lægge alle mine resultater ind i et array.. det var det jeg gjorde ved at lave en mysqli_fetch_array. men det virkede ikke helt efter hensigten.

så gjorde jeg det at jeg lavede et array ind i while løkken sådan her:

while($resultstyle_top = mysqli_fetch_array($querystyle_top)){
    $styletopvar[] = $resultstyle_top['style'];       
}

og udskrev sådan her:
echo = $styletopvar[1];

så fik jeg post nummer to ud på skærmen. på den måde kunne jeg spare en masse select med en masse kriterier.

Men jeg er da åben på at høre hvordan man måske kan gøre det på en bedre måde?
Avatar billede olebole Juniormester
01. maj 2010 - 21:55 #10
Ja, noget tyder på, du ikke bruger parametrisering (eller prepared statements, som det hedder i MySQLI):
    http://dk.php.net/manual/en/mysqli-stmt.prepare.php

Det bør du helt klart begynde at bruge, da det sikrer dig langt bedre mod ubehagelige overraskelser som f.eks. sql-injection
Avatar billede Slettet bruger
01. maj 2010 - 22:00 #11
Men hvis du VED det er første række du vil ha' er der vel ingen grund til at cykle igennem resten..

Hvordan ser din SELECT ud ?

PS:
Er du sikker på at det er mysqli_fetch_array du mener, og ikke "bare" mysql_fetch_array
Avatar billede albert Juniormester
01. maj 2010 - 22:07 #12
Det er fordi at jeg vil bruge flere rækker, men de skal lægges ind i en variabel hver, så jeg kan styre hvor det er jeg vil bruge de enkelte dataer..

Men ole bole, jeg kan godt se idén med det du vil have mig til at gøre.. men jeg har desværre meget svært ved at forstå det der står der inde... kan du hjælpe mig lidt?
Avatar billede olebole Juniormester
01. maj 2010 - 22:09 #13
Begge dele er jo lidt som at køre på løbehjul, når man har Bugatti stående i garagen. Når man alligevel har gang i MySQLI, kan man lige så godt bruge prepared statements  =)
Avatar billede albert Juniormester
01. maj 2010 - 22:11 #14
Det har du fuldstændig ret i...=)
Avatar billede olebole Juniormester
01. maj 2010 - 22:12 #15
Ja, men jeg må stadig vide, hvad du vil, hvis jeg skal hjælpe dig med koden. Jeg kan jo ikke skrive en select, hvis jeg ikke ved, hvad du vil hente. Vis mig din nuværende select og fortæl, hvilke datatyper, du bruger i de enkelte felter
Avatar billede albert Juniormester
01. maj 2010 - 22:18 #16
$querystyle_top = mysqli_query($conn, "SELECT * FROM style_page WHERE parent = 1");
    while($resultstyle_top = mysqli_fetch_array($querystyle_top)){
        $styletopvar[] = $resultstyle_top['style'];       
}

$top_width = $styletopvar[0];
$top_heigth = $styletopvar[1];


Jeg har min select oppe i toppen, hvor jeg så kører det hele jeg har igennem en while-løkke. Det jeg vil opnå er at jeg vil spare at lave en masse select bare fordi at jeg skal have et enkelt data ind i en variabel.

Med det jeg er i gang med vil jeg lave et CMS system hvor jeg bestemmer hvordan min hjemmeside skal se ud, med størrelse osv.

Var det bedre forklaret?

Eller skal jeg gøre det på en anden måde?
Avatar billede olebole Juniormester
01. maj 2010 - 22:23 #17
Hvad hedder dine felter - og hvad indeholder de enkelte felter (tekst/tal/etc)?
Avatar billede olebole Juniormester
01. maj 2010 - 22:25 #18
- og er det altid med WHERE parent = 1 - eller kan værdien af parent ændre sig?
Avatar billede albert Juniormester
01. maj 2010 - 22:34 #19
i min tabel i DB har jeg et id, parent, name, og style.

Id er noget der bare er auto-increment, som jeg altid har..
parent er altid 1, fordi at jeg har styles til flere sider.
name er bare et navn jeg har til mit CMS hvor jeg kan ændre værdierne.
og så har jeg feltet style hvor jeg skriver det ind som skal ind i mit stylesheet, på siden.

det gør jeg på den måde:
jeg har variablen:
$top_width = $styletopvar[0];

hvor jeg så lægger den ind i min div:
<div style=\"width:".$top_width."\"></div>";

og på den måde kan jeg bestemme hvordan min side skal bygges op via mit CMS
Avatar billede olebole Juniormester
01. maj 2010 - 23:04 #20
Da du ikke smider brugerinput ind i din select, er der nu ingen fare for sql-injection, men kom bare igang med prepared statements alligevel  ;o)

// Forbind til server:
$mysqli = new mysqli("SERVER", "USER", "PASSWORD", "DATABASE_NAVN");

// Tjek, om forbindelsen blev oprettet:
if (mysqli_connect_errno()) {
    // Der opstod en fejl. Skriv den til browseren:
    print "Kunne ikke forbinde til server:<br>\r\n".mysqli_connect_error();
    exit();
}

// Opret en statement:
$stmt =  $mysqli->stmt_init();

// Forbered din statement:
if ($stmt->prepare("SELECT `id`, `name`, `style` FROM style_page WHERE parent = 1")) {
   
    // Eksekver din statement:
    $stmt->execute();
   
    // Bind resultatet for hver kommende række til nogle variabler:
    $stmt->bind_result($id, $name, $style);
   
    // Opret et array til at opbevare rækkerne i:
    $arr = array();
   
    // Hent rækkerne én efter én:
    while ( $stmt->fetch()) {
        // Fyld den hentede række ned i arrayet:
        $arr[] = array("id"=>$id, "name"=>$name, "style"=>$style);
    }
   
    // Luk din statement
    $stmt->close();
}

// Luk forbindelsen til serveren:
$mysqli->close();

/*
    Nu ligger alle dine rækker i $arr.
    Hver række udgøres af et associativt array.
*/

// Som eksempel printer vi lidt:

print $arr[0]["id"];
print "\r\n<br>\r\n";
print $arr[3]["name"];
Avatar billede olebole Juniormester
01. maj 2010 - 23:06 #21
PS: koden er ganske utestet, men menes at burde virke  =)
Avatar billede albert Juniormester
27. november 2011 - 21:58 #22
lukker
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