2010-11-25 21 views
1

J'ai fait un script avant, qui a fonctionné complètement bien en PHP 5.2. Mais quand je suis passé récemment sur mon serveur d'amis (version PHP 4.4.9), j'ai remarqué que certaines actions ne fonctionnaient pas comme elles le devraient. Le résultat de ce que les cases à cocher sont revenus est sorti fou ...Foreach sur les cases à cocher ne retourne pas les valeurs

Ce code J'utilise: Pour la forme:

<input type="checkbox" value="Box1" name="BoxGroup[]" />Box1 
<input type="checkbox" value="Box2" name="BoxGroup[]" />Box2 
<input type="checkbox" value="Box3" name="BoxGroup[]" />Box3 

Pour le script d'action:

if($_POST['BoxGroup'] == true){ // If one of the checkboxes were checked... 
    foreach($_POST['BoxGroup'] as $value){ 
    $BoxGroup .= ", ".$value; // Make the array into a string 
    } 
    $BoxGroup = substr($BoxGroup,2); // To skip ", " from the beginning of the $BoxGroup variable 
} 

Maintenant, ce que ce script fait, c'est; quand un utilisateur envoie le formulaire, il vérifie si une des cases a été cochée, et si c'est le cas, il crée une chaîne, comme ceci: "valeur, valeur", etc. J'insère ces valeurs dans ma base de données. Lorsque je prévisualise ce qui a été soumis à la base de données sur une page, j'obtiens "rayon/valeur/valeur", - donc seulement "rayon" (comme dans "Array") a été passé pour la première boîte qu'il semble.

Malheureusement, je ne peux pas mettre à jour la version PHP du serveur, puisque l'opérateur système et moi-même n'avons pas de mot de passe root (je sais que c'est fou).

Alors qu'est-ce que je fais?

+2

Si votre sysop ne sait pas comment réinitialiser le mot de passe root, procurez-vous un nouveau sysop. – cdhowie

+0

stillstanding: Désolé, j'ai été confondu avec la version d'une autre application. Je voulais dire PHP 5.2. cdhowie: Je pense qu'il ne peut même pas faire ça, car c'est un serveur d'un hôtel web. – Nisto

+0

Un "hôtel web"? Est-ce que je veux savoir? –

Répondre

1
implode(', ', array_keys($_POST['BoxGroup'])) 
+0

Je ne cherchais pas à ajouter les clés à la base de données, mais cela m'a amené là où je voulais (array_values). Donc j'accepte cette réponse. Je vous remercie!=) – Nisto

0

Les autres commentaires concernant implode sont de bons conseils, mais je ne vois pas comment il résout votre problème. (Eh bien, il pourrait effectivement, si vous initialisez la variable à la valeur de retour de implode, mais cela ne résout pas le problème de base ici.)

Initialiser correctement $BoxGroup. Je parie $BoxGroup = 'Array'; avant même que la boucle tourne ... probablement parce que register_globals est activé. Eeeek, désactivez ça.

En .htaccess:

php_flag register_globals off 

Pour élaborer, je suppose que si vous avez fait un var_dump($BoxGroup), vous verriez qu'il contient déjà ces valeurs grâce à register_globals. Le tableau est traité comme une chaîne 'Array' lorsque vous le concattez avec une autre chaîne.

+0

Malheureusement, il semble que l'extinction de register_globals ne fonctionne pas. – Nisto

+0

Assurez-vous que 'AllowOverride Options' est activé pour ce répertoire. – Matthew

+0

Euh-hein. J'ai essayé "AllowOverride Options All", mais l'hôte vient de me donner l'erreur 500. – Nisto