[php/mysql] Array uit database, uitlezen met in_array

Pagina: 1
Acties:
  • 112 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
  require ("c_main.php");
  $posts = mysql_query("SELECT date FROM $table");
  while($row = mysql_fetch_array($posts)) {
    $stamp = $row["date"];
    $postDay = substr($stamp, 6, 2);
    echo "$postDay\n";
    }
    
    if (in_array("05", $postDay)) { echo "OK"; }
?>


De echo in bovenstaande code geeft het volgende:
code:
1
05 07


De $date is een mySQL Timestamp a la 20040905021359. De dag v/d maand filter ik daar uit dmv. de substr. Vervolgens wil ik controleren of een bepaalde dag v/d maand voorkomt in mijn database veld 'date'. Dit wil ik dus doen dmv van de in_array. Maar op deze manier schijnt dit niet te werken.

Waar ik zelf al aan heb zitten denken is dat $postDay geen array is. Maar als ik het volgende probeer lukt het me ook niet (20040905021359 is de 1e waarde in de array):

PHP:
1
2
3
4
5
6
7
8
<?
  require ("c_main.php");
  $posts = mysql_query("SELECT date FROM $table");
  while($row = mysql_fetch_array($posts)) {
  }
    
    if (in_array("20040905021359", $row)) { echo "OK"; }
?>


Hoe kan ik nu uit de database de waarden van het 'date' veld uitlezen, deze in een array gooien en dmv. in_array uitlezen?

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Waarom sluit je die 'while' direct af als je de eerste wil hebben? :?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Erhm, waarom gebruik je een timestamp en niet gewoon een datetime veld? Timestamps wijzigen geloof ik automatisch bij elke update van het record...

En als je een gewoon datetime veld pakt, dan kun je de date format functies van MySQL erop los laten tijdens het selecteren, en dan heb je geen PHP nodig voor dit probleem.

code:
1
SELECT date FROM $table WHERE DAY(date) = $dagdiejijzoekt


Documentatie.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou, wat ik dus wil is alle waardes van het veld 'datum' in een array gooien. Deze vervolgens aanpassen (zie de substr) zodat ik waardes krijg die bestaan uit 2 cijfers en vervolgens deze weer in een array gooien om deze later (buiten de while loop) uit te lezen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wil je ook nog wat doen met die andere records? Zo ja, dan kun je jezelf veel werk en substr's besparen, door dit te selecteren:
code:
1
SELECT date,  DAY(date) AS dag FROM $table


Als je alleen maar die records nodig hebt waarvan die dag overeen komt met de waarde die je zoekt, dan voldoet mijn vorige query denkik wel.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is idd zo dat TIMESTAMP veranderd bij elke wijziging. Ik heb het nu veranderd naar DATETIME. Maar dit is niet de oplossing van mijn probleem.

Ik heb dus 2004-09-03 03:02:04 in mijn 'date' veld staan. Wat ik nodig heb is de waarde van de dag. Hier dus 03. Nu heb ik verschillende waardes in mijn date veld staan dus wil ik een array maken die er zo uitziet: 03 12 16 31 20 etc..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?  require ("c_main.php"); 
    $posts = mysql_query("SELECT * FROM $table ORDER BY id DESC");
    while ($getPosts = mysql_fetch_array($posts)) {
        $stamp = $getPosts["date"];

        $newtimea = explode(" ",$stamp);
        $newtimeb = explode("-",$newtimea[0]);
        $newtimec = "$newtimeb[0]$newtimeb[1]$newtimeb[2]";

        $year = substr($newtimec, 0, 4);
        $month = substr($newtimec, 4, 2);
        $day = substr($newtimec, 6, 2);
        $datea = date('F j, Y', mktime(0, 0, 0, $month, $day, $year));
        $dateb = date('l', mktime(0 ,0, 0, 0, $day, 0));

echo $dateb.",&nbsp;"; echo $datea; 
} 

if (in_array("03", $day)) { 
        echo "OK";
}

?>


De manier waarop ik hier die 03 ($day) eruit haal is denk ik niet belangrijk. Maar die 03 wil ik nu dus gaan vergelijken met de waarde $bla.

Nu is het dus dat ik die waardes uit mijn databse moet gaan halen. Dan alleen de 03 verkrijgen dmv die substr dingen. En vervolgens moeten deze 2 cijferige waardes weer terug in een array zodat ik ze kan gaan vergelijk dmv in_array.

Dus, hoe krijg ik nu die $day variabelen in een array...

[ Voor 110% gewijzigd door Verwijderd op 08-09-2004 04:39 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Waarom gebruik je nog steeds in_array() op een string?
Als je al die waardes in een array wilt hebben, kijk dan eens naar de functie array_push(). En anders zou je moeten kijken naar strpos();

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    require ("c_main.php"); 

    $dagen = Array();
    $posts = mysql_query("SELECT DAYOFMONTH(`date`) AS 'dag', MONTH(`date`) AS 'maand', YEAR(`date`) AS 'jaar' FROM $table ORDER BY id DESC"); 
    while ($getPosts = mysql_fetch_assoc($posts)) { 
        $dag = $getPosts['dag'];
        $maand = $getPosts['maand'];
        $jaar = $getPosts['jaar'];

        echo "Dag: $dag - Maand: $maand - Jaar: $jaar<BR>\n";
        // De dag in de array $dagen plaatsen
        array_push($dagen, $dag); 
} 

if (in_array("03", $dagen)) { 
        echo "OK"; 
}



Houd hierbij rekening dat je alle dagen uit verschillende maanden en jaren in 1 array hebt.

[ Voor 11% gewijzigd door frickY op 08-09-2004 09:26 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanx frickY. Op jouw manier is het meer dan gelukt :D
Pagina: 1