2010-11-24 4 views
0

J'ai un champ dans ma base de données appelé 'date_added' ... C'est une colonne varchar (je sais que varchar n'est pas correct, mais c'est comme ça a été construit) ... Quand i extraire la valeur de la base de données qu'elle imprime commePHP découpant une date à insérer dans les champs

dd-mm-yyyy 

sur la forme où je l'extrais à, il y a 8 petits champs de texte qui doivent être remplis de chacune des valeurs, donc un champ de texte aura le premier d, le second champ aura le second d, le troisième champ aura le premier m ... et ainsi de suite.

Comment est-ce que je ferais cela?

Cheerss,

Répondre

3

Essayez quelque chose comme ceci:

<?php 

$date = "24-11-2010"; 
$cleanup_date = str_replace("-", "", $date); 

?> 

Ensuite, sur votre formulaire, vous l'utiliser comme ceci:

<input type="text" value="<?php echo $cleanup_date[0]?>"> 
<input type="text" value="<?php echo $cleanup_date[1]?>"> 
<input type="text" value="<?php echo $cleanup_date[2]?>"> 
<input type="text" value="<?php echo $cleanup_date[3]?>"> 
<input type="text" value="<?php echo $cleanup_date[4]?>"> 
<input type="text" value="<?php echo $cleanup_date[5]?>"> 
<input type="text" value="<?php echo $cleanup_date[6]?>"> 
<input type="text" value="<?php echo $cleanup_date[7]?>"> 
+0

+1 agréable et simple – Ben

2

Vous pouvez utiliser explode avec list et exploser sur le '-' en variables distinctes:

list($day, $mon, $year) = explode('-', $date); 

Si vous obtenez ce que vous voulez.

Modifier

Comme indiqué, vous vouliez en huit parties, pour ce faire, vous pouvez simplement référencer les données comme un tableau, IE: $day[0]$day[1] et il devrait bien fonctionner.

+0

qui ne le divise pas en 8 parties – Ben

+0

Vous avez raison, je n'ai pas lu cette partie. Modification maintenant –

+1

Je pense que c'est mieux que les autres réponses, quand vous imprimez votre valeur, utilisez $ day [0] sur la première partie et $ day [1] sur la deuxième partie, et ainsi de suite. Ce serait très lisible et évident pour ce que vous faisiez. –

1

Utilisez str_replace et str_split:

$string = str_split(str_replace('-', '', $date_string), 1); 

Le str_split bit est facultatif, puisque vous pouvez accéder à chaque caractère de chaîne à l'aide de l'index de tableau n otation ($ arr [0]). (J'aime à le faire quand même pour éviter la confusion, car quand je vois cette syntaxe, j'attends un tableau).

Puis dans votre code HTML, quelque chose comme (la voie rapide):

<input type="text" name="d[]" value="<?php echo $string[0]; ?>"/> 
<input type="text" name="d[]" value="<?php echo $string[1]; ?>"/> 
<input type="text" name="m[]" value="<?php echo $string[2]; ?>"/> 
<input type="text" name="m[]" value="<?php echo $string[3]; ?>"/> 
<input type="text" name="y[]" value="<?php echo $string[4]; ?>"/> 
<input type="text" name="y[]" value="<?php echo $string[5]; ?>"/> 
<input type="text" name="y[]" value="<?php echo $string[6]; ?>"/> 
<input type="text" name="y[]" value="<?php echo $string[7]; ?>"/> 

Et quand vous voulez enregistrer en arrière:

$date_string = implode($_POST['d']).'-'. 
       implode($_POST['m']).'-'. 
       implode($_POST['y']); 
+0

bien aussi.ne peut pas donner +1 deux fois si – Ben

-1

OMI, pas besoin d'utiliser des tableaux. Je ferais quelque chose de beaucoup plus simple comme:

<?php 
$date = '12-09-1985'; // your original date coming from the DB 

echo $date{0}; //day 1 
echo $date{1}; //day 2 

echo $date{3}; //month 0 
echo $date{4}; //month 9 

echo $date{6}; //year 1 
echo $date{7}; //year 9 
echo $date{8}; //year 8 
echo $date{9}; //year 5 
?> 

Évidemment, vous aurez l'écho dans le champ de saisie.

+0

même si les accolades sont valides pour accéder à un caractère spécifique, mieux vaut être cohérent avec le reste du monde et traiter la chaîne comme un tableau de caractères et utiliser des crochets – Alex

+0

Qui se soucie de ce que fait le reste de la monde. La syntaxe des accolades est parfaitement valide et est mentionnée dans le manuel de PHP. http://us.php.net/manual/fr/language.types.string.php#language.types.string.substr –