Oprettet fre. d. 13. april 2012 kl. 16:50:18

Nannamh90 (nedlagt brugerprofil)
Nannamh90 (nedlagt brugerprofil) (2.250 point. Point ude: 45)

brug af array-resultat i sql

hej :-)
Jeg bruger dette array:

$months_danish = array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");

jeg kunne godt tænke mig at bruge resultatet i min sql så jeg får udskrevet hvis $months_danish = 'maj' så udskriver den selfølgelig dem hvor jeg har sat datoen til maj :-)

tænker noget i stil med:

$sql = "SELECT * FROM tabel WHERE godkendt='1' AND "$months_danish = 'maj';
Ved godt ovenstående ikke virker, håber I kan hjælpe :-)

Skrevet fre. d. 13. april 2012 kl. 18:18:35| #1

ronols
ronols (24.876 point)
olsensweb.dk/
er det dette du vil
http://stackoverflow.com/ (...)

hvis du på forhånd ved det er feks mej måned hvorfor indsætter du så ikke måneds navnet som en variabel??

du bør nok overveje at bruge måneds nummer istedet for måneds navnet, da søgning kan være nemmere og du er ikke bundet af at du har stavet rigtigt i db
det gør det også nemmere hvis du for nogle brugere vil præsenterer indhold på engelsk og andre dansk

Skrevet fre. d. 13. april 2012 kl. 18:25:35| #2

Lige nu har jeg en formular med en dropdown på månederne så man kan vælger månede eventen foregår i, men jeg tænkte at istedet for de skal vælge det i formularen kunne php måske selv regne det ud ved at bruge arrayet som jo er der i forvejen og så på den måde udskrive den de rigtige steder for lige nu bruger jeg:

$sql = "SELECT * FROM tabel WHERE godkendt='1' AND maanede='maj';

så kunne være fint hvis jeg ku droppe feltet i formularen og feltet(maanede) i db. :-)

Skrevet fre. d. 13. april 2012 kl. 19:54:41| #3

ronols
ronols (24.876 point)
olsensweb.dk/
>kunne php måske selv regne det ud ved at bruge arrayet
php kender selv aktuelle måned kig på date
og mysql har en tilsvarende function date and time functions

hvordan ser php coden ud til opret event, jeg har lidt svært ved at se hvad du ovrfører fra arrayet.

nb: fjern pw fra coden, når du visser den offentligt

Skrevet fre. d. 13. april 2012 kl. 21:07:48| #4

hvad mener du med pw coden?

Jamen datoen bliver jo hentet fra et timestamp i db, som så udskriver måneden som navn fx. januar istedet for fx. jan eller 01
det er hvad arrayet gør :-)

Men mit spørgsmål er bare om jeg kan flette det ind i sql'en i stedet for at hente fra et felt i db så hent fra array?

ved ikke om du forstår det, er nok ikke så god til at forklare det :-)

Skrevet fre. d. 13. april 2012 kl. 21:11:25| #5

Det er fordi når det er januar skal den udskrive dem som har et timestamp i januar og når det er feb skal den udsrive de events med timestamp i feb :-)
men sortere dem lige nu ved at hente et felt fra db i sql'en som j forklarede i #2

tænkte bare det kunne gøres nemmere udenom db. men bare med kodning.

Skrevet fre. d. 13. april 2012 kl. 22:05:13| #6

ronols
ronols (24.876 point)
olsensweb.dk/
>hvad mener du med pw coden?
jeg havde regnet du viste noget PHP code, og deri kunn indgå noget database connection med brugernavn/password, det var det brugernav/password der skulle xxxx

hvis du forvejen har eventen som et datetime ville jeg kigge på http://dev.mysql.com/ (...)
evt http://dev.mysql.com/ (...)

>tænkte bare det kunne gøres nemmere udenom db. men bare med kodning.
du skal jo have hentet eventen ud for at kunne behandle den i PHP

Skrevet fre. d. 13. april 2012 kl. 22:35:31| #7

inteeeL
inteeeL (5.841 point)
Du kan benytte strtotime til at bestemme et timestamps interval og mysql's egen indbyggede funktion BETWEEN. Det kunne se sådan her ud:
<?php

date_default_timezone_set('Europe/Copenhagen');

$start = strtotime("January 1st 2012", time());
$slut = strtotime("January 31th 2012", time());

$sql = "SELECT * FROM tabel WHERE godkendt='1' WHERE timestamp BETWEEN $start AND $slut";

?>

Her henter den alle rækker, hvis timestamp ligger i intervallet January 1st 2012 og January 31th 2012 - altså alle rækker i januar. Dog kender vi endnu ikke helt din opbygning, hvorfor du med sikkerhed selv skal foretage ændringer for at kunne implementere ovenstående.

Skrevet fre. d. 13. april 2012 kl. 23:10:49| #8

inteeeL
inteeeL (5.841 point)
Hov, lige en edit i $sql-statementet:
$sql = "SELECT * FROM tabel WHERE godkendt='1' AND timestamp BETWEEN $start AND $slut";

Skrevet lør. d. 14. april 2012 kl. 16:47:35| #9

-inteelL
Ja, kan godt se hvor du vil hen med det, men ikke særlig smart nå jeg skal bruge en til hver måned det vil sige 12.

Sådan her ser min kode ud:

<a href="java script:showonlyone('newboxes1');">januar</a>
         
<div name="newboxes" id="newboxes1" class="event_month">

<?php
$months_danish = array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");
           
include ('databasen.php');
$sql = "SELECT * FROM tabel WHERE maanede='januar'";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {

echo date('j.',$row[date]).$months_danish[date('n',$row[date])-1].date(' Y',$row[date]);
}?>

</div>

Disse er der 12 af, en for hver måned, for når man klikker på linket viser den jo de events der har den aktuelle måned i databasen :-)

link til website: http://www.afterlife.dk/ (...)

Skrevet lør. d. 14. april 2012 kl. 17:14:21| #10

inteeeL
inteeeL (5.841 point)
Så er jeg med igen. Du kan udskrive alle 12 måneder ved kun at bruge koden en gang. Du laver blot en loop, hvor hvert element i arrayet $month_danish behandles. Det kunne se sådan her ud:
<?php

include ('databasen.php');
$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 =>"December"
);

$html = array();
foreach( $months_danish as $key => $month) {
    $html[] = '<a href="java script:showonlyone(\'newboxes'.$key.'\');">'.strtoupper($month).'</a>';
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';
   
    $sql = "SELECT * FROM tabel WHERE maanede='".strtolower($month)."'";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
        echo date('j.',$row[date]).$months_danish[date('n',$row[date])-1].date(' Y',$row[date]);
        // Resten af data fra databasen udskrives her
    }
}

echo implode("\n", $html); //Udskriver til sidst html-arrayet

?>

Forudsat, at du selv skal foretage ændringer, så det passer til netop dit system.

Skrevet lør. d. 14. april 2012 kl. 17:16:10| #11

olebole
olebole (216.743 point)
<ole>

Jo, det er nemlig ret smart. Du skal ikke bruge dit maanede felt til noget. I stedet bør du bruge feltet date

/mvh
</bole>

Skrevet lør. d. 14. april 2012 kl. 17:18:43| #12

Men vil det så virke sådan at når man klikker på <a>januar</a>
så viser den de events der foregår i januar eller hvordan?
Har ikke helt styre på det nemlig, så for svært ved at tilpasse det, undskyld jeg er så noob. :-)

Skrevet lør. d. 14. april 2012 kl. 17:23:46| #13

olebole
olebole (216.743 point)
#12: Ja, men jeg tror, der er noget i din struktur, jeg synes halter. Du får, såvidt jeg kan se, problemer med årstal.

Husk i øvrigt at månedsnavne staves med lille begyndelsesbogstav på dansk  *o)

Skrevet lør. d. 14. april 2012 kl. 17:23:47| #14

Ja kan gode se at #7 er nemmere end #10 men så skal jeg stadig lave en $start og $slut for hver måned?

Må lige se hvilken af løsningerne der vil være bedst :-)

Skrevet lør. d. 14. april 2012 kl. 17:30:50| #15

inteeeL
inteeeL (5.841 point)
<?php

// include ('databasen.php');
$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 =>"December"
);

$html = array();
foreach( $months_danish as $key => $month) {
    $html[] = '<a href="java script:showonlyone(\'newboxes'.$key.'\');">'.strtoupper($month).'</a>';
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';
   
    $sql = "SELECT * FROM tabel WHERE maanede='".strtolower($month)."'";
    // $result = mysql_query($sql);
    // while ($row = mysql_fetch_array($result)) {
        // echo date('j.',$row[date]).$months_danish[date('n',$row[date])-1].date(' Y',$row[date]);
    // }
   
    $html[] = "\$sql = $sql";
    $html[] = '</div>';
}

echo implode("\n", $html); //Udskriver til sidst html-arrayet

?>

Ovenstående udskriver følgende kode (kildekode):
<a href="java script:showonlyone('newboxes1');">JANUAR</a>
<div name="newboxes" id="newboxes1" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='januar'
</div>
<a href="java script:showonlyone('newboxes2');">FEBRUAR</a>
<div name="newboxes" id="newboxes2" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='februar'
</div>
<a href="java script:showonlyone('newboxes3');">MARTS</a>
<div name="newboxes" id="newboxes3" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='marts'
</div>
<a href="java script:showonlyone('newboxes4');">APRIL</a>
<div name="newboxes" id="newboxes4" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='april'
</div>
<a href="java script:showonlyone('newboxes5');">MAJ</a>
<div name="newboxes" id="newboxes5" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='maj'
</div>
<a href="java script:showonlyone('newboxes6');">JUNI</a>
<div name="newboxes" id="newboxes6" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='juni'
</div>
<a href="java script:showonlyone('newboxes7');">JULI</a>
<div name="newboxes" id="newboxes7" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='juli'
</div>
<a href="java script:showonlyone('newboxes8');">AUGUST</a>
<div name="newboxes" id="newboxes8" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='august'
</div>
<a href="java script:showonlyone('newboxes9');">SEPTEMBER</a>
<div name="newboxes" id="newboxes9" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='september'
</div>
<a href="java script:showonlyone('newboxes10');">OKTOBER</a>
<div name="newboxes" id="newboxes10" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='oktober'
</div>
<a href="java script:showonlyone('newboxes11');">NOVEMBER</a>
<div name="newboxes" id="newboxes11" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='november'
</div>
<a href="java script:showonlyone('newboxes12');">DECEMBER</a>
<div name="newboxes" id="newboxes12" class="event_month">
$sql = SELECT * FROM tabel WHERE maanede='december'
</div>


Linkene passer til det tilsvarende indhold - og det samme gør $sql-en. Men du SKAL tilpasse det til resten af siden. Forstået på den måde, at alt loyout skal tilpasses - du skal ikke copy/past ovenstående kode. :-) Vi kender ikke din events.php-fil.

Skrevet lør. d. 14. april 2012 kl. 17:36:38| #16

Okay, tak skal nok tilpasse det :-) smid et svar! Tak

Skrevet lør. d. 14. april 2012 kl. 17:39:41| #17


Skrevet man. d. 16. april 2012 kl. 19:24:54| #18

inteeL, jeg har lige et spørgsmål til, hehe :-) lige nu ser min test siden sådan ud :

<?php

include ('databasen.php');
$months_danish = array(
    1 => "Januar",
    2 => "Februar",
    3 => "Marts",
    4 => "April",
    5 => "Maj",
    6 => "Juni",
    7 => "Juli",
    8 => "August",
    9 => "September",
    10 => "Oktober",
    11 => "November",
    12 =>"December"
);

$html = array();
foreach( $months_danish as $key => $month) {
    $html[] = '<a id="myHeader1" class="month" href="java script:showonlyone(\'newboxes'.$key.'\');">'.strtoupper($month).'</a>';
    $html[] = '<div name="newboxes" id="newboxes'.$key.'" class="event_month">';
   
    $sql = "SELECT * FROM events WHERE maanede='".strtolower($month)."' AND godkendt='1' ORDER BY date ASC";
    $result = mysql_query($sql);
    while ($row = mysql_fetch_array($result)) {
    echo '<table id="event_table">';
    echo '<tr><td><span class="event_dato">'.date('j. ',$row[date]).$months_danish[date('n',$row[date])].date(' Y',$row[date]).'</span></td></tr>';
    echo '<tr><td><a class="event_title" href="eventen.php?id='.$row[id].'">'.substr($row["title"], 0, 35).'</a></td></tr>
    </table>';       
    }
   
   
    $html[] = '</div>';
}

echo implode("\n", $html); //Udskriver til sidst html-arrayet

?>
Her er linket til test side
http://www.afterlife.dk/ (...)

det ser lidt forkert ud, da det jo gerne skulle blive tildet her http://www.afterlife.dk/ (...)

Hvad gør jeg forkert? Har prøvet diverse ting, håber du kan se fejlen.

Skrevet tor. d. 19. april 2012 kl. 15:55:48| #19


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

ZF2 Entity was not found

Oprettet den 23. maj 2013 kl. 12.51
zorkmontana giver 60 point for svar | Giv et svar »

hjælp til php / mysql

Oprettet den 23. maj 2013 kl. 10.54
AOT1977 giver 30 point for svar | Giv et svar »

Hjælp til database kolonne

Oprettet den 22. maj 2013 kl. 17.44
StotheT giver 30 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Fem smarte funktioner i din Mac som du sikkert ikke kender

Her har du fem muligheder for at tweake din Mac på en fed måde.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Galleri: De 10 vildeste datacentre i verden

I en gammel kirke, i et oppusteligt telt, på nedlagte militæranlæg eller midt i ørkenen. Der er ingen grænser for, hvor man kan banke et datacenter op. Her er de 10 sejeste anlæg i verden. I...


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger