array()

Status
Niet open voor verdere reacties.

Sophie90

Gebruiker
Lid geworden
4 nov 2011
Berichten
46
Weet iemand hoe ik onderstaande code kan vereenvoudigen met bijvoorbeeld een array? Ik ben zelf niet zo ervaren om het voor elkaar te krijgen ::rolleyes:
PHP:
$newles1a = date("d-m-Y", strtotime($les1a));
$newles1b = date("d-m-Y", strtotime($les1b));
$newles2a = date("d-m-Y", strtotime($les2a));
$newles2b = date("d-m-Y", strtotime($les2b));
$newles3a = date("d-m-Y", strtotime($les3a));
$newles3b = date("d-m-Y", strtotime($les3b));
$newles4a = date("d-m-Y", strtotime($les4a));
$newles4b = date("d-m-Y", strtotime($les4b));
$newles5a = date("d-m-Y", strtotime($les5a));
$newles5b = date("d-m-Y", strtotime($les5b));
 
De variabele namen doen mij vermoeden dat het hier om een opdracht gaat, klopt dat?

Je weet wat een array is en doet? Heb je de documentatie bekeken?
 
Dat klopt. Het gaat om een opdracht om de datum uit de sql-tabel om te zetten naar Europese vorm, dus yyyy-mm-dd naar dd-mm-yyyy.
Ik heb gelezen over array(), maar kom er niet uit of en hoe ik deze kan gebruiken om mijn code in te korten.
Ik dacht iets als:
PHP:
$i = 0;
$dat = array("1a","1b","2a","2b","3a","3b","4a","4b","5a","5b");

foreach ($dat as $newles[$i]){
 date("d-m-Y", strtotime($les[$i]);
 $i++;
}
unset($i);
Maar ik weet zeker dat dat niet helemaal correct is..
 
da's in elk geval een hoop info. Het probleem is dat ik niet zie hoe ik dit moet vertalen naar mijn eigen code...
Ik zie bijvoorbeeld
PHP:
$sql = ("SELECT STR_TO_DATE('date1a', '%d/%Mon/%Y') FROM tabel WHERE value");
$query = mysql_query($sql);
als een mogelijke oplossing. Maar ik kan toch moeilijk voor elke datum in de database een query opzetten?
 
Het gaat dus om MySQL :)

Het is afhankelijk van het doel van je applicatie hoe je het gaat bouwen.
Als het zo is dat je een formulier krijgt met een dropdown om het formaat te selecteren dan hoef je maar één keer de query uit te voeren.

Dit is in ieder geval de query die je nodig hebt om "dd-mm-yyyy" te krijgen
[sql]
SELECT
DATE_FORMAT(date1a, '%d-%m-%Y') AS custom_date
FROM tabel[/sql]
 
Daar zit het hem inderdaad. Om een korte uitleg te geven;
Ik maak een reserveringssysteem voor leden van de (ehbo)vereniging, waarbij ze voor elk van de 5 lessen kunnen kiezen uit 2 verschillende datums (dus elke les wordt 2 keer gegeven). Deze datums worden in de tabel opgeslagen. Als men later terugkeert naar de pagina, zijn de gemaakte keuzes weer zichtbaar. Omdat het formaat Y-m-d niet gemakkelijk leest, wil ik deze omdraaien.
Er zijn voor elke cursist dus 5 datums opgeslagen en voor de admin, die de reservering moet kunnen inzien, zijn er dus 10.

Het is dan een beetje omslachtig om voor elke datum een ander query op te geven, snap je?:)
Dit is een van de scripts:
PHP:
<?php

// Pagina voor inschrijven lesdata
include_once("config.php");
include_once("connect.php");
include_once("lang/lang_nl.php");
$pml_title = $site_name;
include("header.inc.php");
include("stats.php"); 
require("safe.php");

		//in de ledengegevens de geregistreerde data ophalen		
	$data = mysql_query("SELECT * FROM userres WHERE id='".$_SESSION['user_id']."'") or die(mysql_error());
		while($row1 = mysql_fetch_object($data)){
		$reserveer = htmlspecialchars($row1->res);
		$resnaam = htmlspecialchars($row1->naam);
			$date1 = ($row1->les1);		
			$date2 = ($row1->les2);
			$date3 = ($row1->les3);
			$date4 = ($row1->les4);
			$date5 = ($row1->les5);
		}
		$originalDate = "$date1";
		$newDate1 = date("d-m-Y", strtotime($date1));

//in de admintabel de ingevoerde data ophalen (dus ook het maximale aantal deelnemers en het huidig aantal ingeschreven)	
	/*$sql = mysql_query("SELECT MAX(rev) FROM adminsres");
	$row = mysql_fetch_object($sql);
	$rev = ($row->rev);*/
	
    $lesdata = mysql_query("SELECT * FROM adminsres WHERE rev = '1' ") or die(mysql_error());
		$rij = mysql_fetch_object($lesdata);
		$les1a = ($rij->date1a);
		$les1b = ($rij->date1b);
		$les2a = ($rij->date2a);
		$les2b = ($rij->date2b);
		$les3a = ($rij->date3a);
		$les3b = ($rij->date3b);
		$les4a = ($rij->date4a);
		$les4b = ($rij->date4b);
		$les5a = ($rij->date5a);
		$les5b = ($rij->date5b);
		$max = ($rij->maxi);
		$aantal_1a = ($rij->aantal_1a);
		$aantal_1b = ($rij->aantal_1b);
		$aantal_2a = ($rij->aantal_2a);
		$aantal_2b = ($rij->aantal_2b);
		$aantal_3a = ($rij->aantal_3a);
		$aantal_3b = ($rij->aantal_3b);
		$aantal_4a = ($rij->aantal_4a);
		$aantal_4b = ($rij->aantal_4b);
		$aantal_5a = ($rij->aantal_5a);
		$aantal_5b = ($rij->aantal_5b);
		
		//	datum omzetten
		
		$newles1a = date("d-m-Y", strtotime($les1a));
		$newles1b = date("d-m-Y", strtotime($les1b));
		$newles2a = date("d-m-Y", strtotime($les2a));
		$newles2b = date("d-m-Y", strtotime($les2b));
		$newles3a = date("d-m-Y", strtotime($les3a));
		$newles3b = date("d-m-Y", strtotime($les3b));
		$newles4a = date("d-m-Y", strtotime($les4a));
		$newles4b = date("d-m-Y", strtotime($les4b));
		$newles5a = date("d-m-Y", strtotime($les5a));
		$newles5b = date("d-m-Y", strtotime($les5b));

		//als verzenden wordt geklikt:	
		if(isset($_POST['submit'])) {
		   include('getles.php');			//getles.php haalt de gegevens op die gemaakt zijn met de keuzerondjes
		   $sql = "UPDATE userres SET 
		   	les1 = '$keuze1',
			les2 = '$keuze2', 
			les3 = '$keuze3', 
			les4 = '$keuze4',
			les5 = '$keuze5',
			res = '1' 
			WHERE id='".$_SESSION['user_id']."'";
              $query = mysql_query($sql);
				  if($query == TRUE){
				  $update = "UPDATE adminsres SET 
				  aantal_1a = '$aantal_1a',
				  aantal_1b = '$aantal_1b',
				  aantal_2a = '$aantal_2a',
				  aantal_2b = '$aantal_2b',
				  aantal_3a = '$aantal_3a',
				  aantal_3b = '$aantal_3b',
				  aantal_4a = '$aantal_4a',
				  aantal_4b = '$aantal_4b',
				  aantal_5a = '$aantal_5a',
				  aantal_5b = '$aantal_5b' WHERE rev = '1' ";
				  mysql_query($update) or die(mysql_error());
				  echo '<p>Uw voorkeuren zijn opgeslagen.</p>';
				  }else{
				  echo '<p>Er is een fout opgetreden. Neem contact op met de beheerder.</p>';
				  }	
            
		
		//als wijzigen wordt geklikt:
		}elseif (isset($_POST['change'])){
			include('getles.php');			//getles.php haalt de gegevens op die gemaakt zijn met de keuzerondjes
			$gewijzigd = date("Y-m-d");
			$sql = "UPDATE userres SET 
			les1 = '$keuze1',
			les2 = '$keuze2',
			les3 = '$keuze3',
			les4 = '$keuze4',
			les5 = '$keuze5',
			res = res+1,
			gewijzigd = '$gewijzigd'  
			WHERE id='".$_SESSION['user_id']."'";
			 $query = mysql_query($sql) or die(mysql_error());
			  if($query == TRUE){
				  $update = "UPDATE adminsres SET 
				  aantal_1a = '$aantal_1a',
				  aantal_1b = '$aantal_1b',
				  aantal_2a = '$aantal_2a',
				  aantal_2b = '$aantal_2b',
				  aantal_3a = '$aantal_3a',
				  aantal_3b = '$aantal_3b',
				  aantal_4a = '$aantal_4a',
				  aantal_4b = '$aantal_4b',
				  aantal_5a = '$aantal_5a',
				  aantal_5b = '$aantal_5b' WHERE rev = '1' ";
				  mysql_query($update) or die(mysql_error());
			  header('Refresh: 1; URL= /lesres.php');
              echo '<p>Uw keuze is gewijzigd.</p>';
			 }else{
			  echo '<p>Er is een fout opgetreden. Neem contact op met de beheerder.</p>';
			 }
 		}else{
		

  // Form
  ?>
  
  <h2>Reservering van herhalingslessen</h2>

  <div>&nbsp;</div>
  <form method="post" action="lesres.php">
   <table>
    <tr>
    <?php
     echo'<td><label>Les 1:</label></td><td><input value="1a" type="radio" name="les1" ';
	  if ($aantal_1a >= $max) {
		echo 'disabled';
	 }		 
     if ($les1a == $date1){		
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_1a < $max) {
     echo $newles1a;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
    <tr>
    <?php
     echo'<td><label>&nbsp;</label></td><td><input value="1b" type="radio" name="les1" ';
	  if ($aantal_1b >= $max) {
		echo 'disabled';
	 }		 
     if ($les1b == $date1){
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_1b < $max) {
     echo $newles1b;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
    <tr>
     <td>&nbsp;
     </td>
    </tr>
    <tr>
    <?php
     echo'<td><label>Les 2:</label></td><td><input value="2a" type="radio" name="les2" ';
	  if ($aantal_2a >= $max) {
		echo 'disabled';
	 }		 
     if ($les2a == $date2){
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_2a < $max) {
     echo $newles2a;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
    <tr>
    <?php
     echo'<td><label>&nbsp;</label></td><td><input value="2b" type="radio" name="les2" ';
	  if ($aantal_2b >= $max) {
		echo 'disabled';
	 }		 
     if ($les2b == $date2){
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_2b < $max) {
     echo $newles2b;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
    <tr>
     <td>&nbsp;
     </td>
    </tr>
    <tr>
    <?php
     echo'<td><label>Les 3:</label></td><td><input value="3a" type="radio" name="les3" ';
	  if ($aantal_3a >= $max) {
		echo 'disabled';
	 }		 
     if ($les3a == $date3){
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_3a < $max) {
     echo $newles3a;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
     <tr>
    <?php
     echo'<td><label>&nbsp;</label></td><td><input value="3b" type="radio" name="les3" ';
	  if ($aantal_3b >= $max) {
		echo 'disabled';
	 }		 
     if ($les3b == $date3){
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_3b < $max) {
     echo $newles3b;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
    <tr>
     <td>&nbsp;
     </td>
    </tr>
     <tr>
    <?php
     echo'<td><label>Les 4:</label></td><td><input value="4a" type="radio" name="les4" ';
	  if ($aantal_4a >= $max) {
		echo 'disabled';
	 }		 
     if ($les4a == $date4){
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_4a < $max) {
     echo $newles4a;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
     <tr>
    <?php
     echo'<td><label>&nbsp;</label></td><td><input value="4b" type="radio" name="les4" ';
	  if ($aantal_4b >= $max) {
		echo 'disabled';
	 }		 
     if ($les4b == $date4){
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_4b < $max) {
     echo $newles4b;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
    <tr>
     <td>&nbsp;
     </td>
    </tr>
     <tr>
    <?php
     echo'<td><label>Les 5:</label></td><td><input value="5a" type="radio" name="les5" ';
	  if ($aantal_5a >= $max) {
		echo 'disabled';
	 }		 
     if ($les5a == $date5){
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_5a < $max) {
     echo $newles5a;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
     <tr>
    <?php
     echo'<td><label>&nbsp;</label></td><td><input value="5b" type="radio" name="les5" ';
	  if ($aantal_5b >= $max) {
		echo 'disabled';
	 }		 
     if ($les5b == $date5){
        echo ' checked />';
        }else{
        echo ' />';}
		
     if ($aantal_5b < $max) {
     echo $newles5b;
     }else{
     echo 'Vol';}
     ?>
     </td>
    </tr>
     <tr>
     <td>&nbsp;
     </td>
     </tr>
     <tr>
     <td>
     <?php 
	 echo '<input ';
	 if($reserveer > '0') {
		echo 'type="submit" value="Wijzigen" id="change" name="change" />';
	 }else{
		echo 'type="submit" value="Verzenden" id="submit" name="submit" />';
	 }
	?>
     </td>
     <td>
     <input type="reset" value="Annuleren" name="reset" />
     </td>
    </tr>
    <tr>
     <td>&nbsp;
     </td>
    </tr>
   </table>
  </form>
  <?php
		}

include('footer.inc.php');

 ?>
 
Je hoeft geen nieuwe query te schrijven, het kan prima in de bestaande :)

Ik pak dit even als voorbeeld:
PHP:
$data = mysql_query("SELECT * FROM userres WHERE id='".$_SESSION['user_id']."'") or die(mysql_error());
        while($row1 = mysql_fetch_object($data)){
        $reserveer = htmlspecialchars($row1->res);
        $resnaam = htmlspecialchars($row1->naam);
            $date1 = ($row1->les1);     
            $date2 = ($row1->les2);
            $date3 = ($row1->les3);
            $date4 = ($row1->les4);
            $date5 = ($row1->les5);
        }
        $originalDate = "$date1";
        $newDate1 = date("d-m-Y", strtotime($date1));
Wordt dan:
PHP:
// Voor het gemak zet ik het datum-formaat in een variabele zodat ik hem overal gelijk houdt en makkelijk kan wijzigen
$date_format = '%d-%m-%Y';

$data = mysql_query("
    SELECT
        *,
        DATE_FORMAT('les1', '". $date_format ."') AS les1_date
    FROM userres
    WHERE id='".$_SESSION['user_id']."'
") or die(mysql_error());
        while($row1 = mysql_fetch_object($data)){
        $reserveer = htmlspecialchars($row1->res);
        $resnaam = htmlspecialchars($row1->naam);
            $date1 = ($row1->les1);     
            $date2 = ($row1->les2);
            $date3 = ($row1->les3);
            $date4 = ($row1->les4);
            $date5 = ($row1->les5);
        }
        // Debug:
        var_dump($row1);
Je zult zien dat je nu alle rijen terugkrijgt plus een extra rij "les1_date" met de aangepast datum.

Dus in $row1->les1 zit 2012-06-25 en bij $row1->les1_date zit 25-06-2012.
Wil je de datum van les2 ook zo hebben:
PHP:
$data = mysql_query("
    SELECT
        *,
        DATE_FORMAT('les1', '". $date_format ."') AS les1_date,
        DATE_FORMAT('les2', '". $date_format ."') AS les2_date
    FROM userres
    WHERE id='".$_SESSION['user_id']."'
") or die(mysql_error());
De rest spreekt voor zich lijkt mij :)
 
Hmm, een mooie oplossing, maar in plaats van de rijen van de query uit te lezen en aan variabelen toe te wijzen, ga je nu rechtstreeks met sql uitlezen. Zal waarschijnlijk sneller werken, maar geeft nog net zoveel tekst....
 
Het is efficienter om de data direct juist geformatteerd uit de database te halen ja.

Wat bedoel je precies met de hoeveelheid tekst?
 
Nou, het probleem is niet direct de efficiëntie, maar het feit dat het zo omslachtig is.
Ik had gedacht dat de code door een andere manier van programmeren wellicht iets meer kon worden gecomprimeerd en de totale code dus iets minder lang zou worden...
Op die manier is het ook makkelijker leesbaar (denk ik).:)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan