2010-10-01 3 views
4

J'utilise PHP pour générer 10 formulaires sur une page qui attachent une image comme le bouton et POST cachent des valeurs à une cible _blank. Cela fonctionne bien dans Firefox, tous les 10 boutons soumettent et publient dans une nouvelle fenêtre. Dans Safari cependant seulement le premier bouton que je cliquera fonctionnera (celui que je choisis) après qu'aucun des boutons (formes) soumettent et POSTE à une nouvelle fenêtre (que se passe-t-il?)Problèmes avec <form> dans Safari - seulement le premier clic POST à ​​_blank target

Heres le code -

$id=getId(); 
echo "<form name=\"clickthrough$id\" action=\"click_through.php\" method=\"POST\" target=\"_blank\"><input type=\"image\" src=\"images/buttons/buynow_a.gif\" name=\"buynow\"/><input type=\"hidden\" name=\"id\" value=\"".$id."\"/></form>"; 

Rien d'étrange ici - l'id est en fait l'identifiant d'une chanson dans ma base de données que j'ai simplifié pour montrer ici - mais j'inclus sur la fin du nom de forme juste Incase cela a été l'origine du problème . Donc pour récapituler je me retrouve avec 10 boutons acheter maintenant sur une page - qui devraient tous passer par un script PHP. Les scripts fonctionnent bien. Cependant en safari une fois que j'ai appuyé sur n'importe quel bouton acheter maintenant tous les autres cessent de fonctionner (jusqu'à ce que je rafraîchisse la page)

pourquoi est-ce?

- ici est le html final qui est généré pour les boutons

<form name="clickthrough1728" action="click_through.php" method="POST" target="_blank"><input type="image" src="images/buttons/buynow_a.gif" name="buynow"/><input type="hidden" name="id" value="1728"/><input type="hidden" name="location" value="UK"/></form> 

<form name="clickthrough1724" action="click_through.php" method="POST" target="_blank"><input type="image" src="images/buttons/buynow_a.gif" name="buynow"/><input type="hidden" name="id" value="1724"/><input type="hidden" name="location" value="UK"/></form> 

<form name="clickthrough1718" action="click_through.php" method="POST" target="_blank"><input type="image" src="images/buttons/buynow_a.gif" name="buynow"/><input type="hidden" name="id" value="1718"/><input type="hidden" name="location" value="UK"/></form> 

....

Je viens essayé de copier à un nouveau fichier html et le test et la même chose se produit - le premier clic ouvrira une nouvelle fenêtre, mais aucun bouton après que affichera la forme

+0

Pouvez-vous montrer le code HTML, fini, généré des 10 formes? –

+0

Ive a ajouté le HTML généré à ma question ... note J'utilise Safari 5 sur un PC – undefined

Répondre

5

Une vérification rapide avec le code suivant fonctionne très bien (Safari 5 sur Mac)

for($id = 1; $id < 11; $id++) { 
    echo "<form name=\"clickthrough$id\" action=\"sandbox/_TestServer.php\" method=\"POST\" target=\"_blank\"> 
    <input type=\"image\" src=\"images/buttons/buynow_a.gif\" name=\"buynow\"/> 
    <input type=\"hidden\" name=\"id\" value=\"".$id."\"/> 
    </form>"; 
} 

il pourrait donc être votre $id. Générer le code html et le montrer comme Pekka suggéré

Modifier Je ne peux pas vous dire ce qui va mal dans les fenêtres de safari-terrestres mais j'ai changé le code comme suit un testé sur une machine virtuelle (Win XP, Safari5) et il fonctionne:

for($id = 1; $id < 11; $id++) { 
    echo "<form name=\"clickthrough$id\" action=\"_TestServer.php?$id\" method=\"post\" target=\"_blank\"> 
    <input type=\"image\" src=\"add.png\" name=\"buynow\"/> 
    <input type=\"hidden\" name=\"id\" value=\"".$id."\"/> 
    </form>"; 
} 

toute forme a son objectif d'action "unique" ?$id et ce coutures pour faire l'affaire

Modifier Link et les fichiers supprimés

+0

Ouais merci je l'ai juste essayé sur un Mac et fonctionne bien – undefined

+0

@undefined voir mes changements ci-dessus ... – teemitzitrone

+0

C'est tout !!! Merci beaucoup maggie! un autre problème résolu! :) meilleures salutations – undefined

2

estimation initiale: la _blank n'est pas traitée comme une valeur particulière, mais est traité comme la même fenêtre, de sorte que la premier message va à un nouveau fenêtre, et les suivantes (essayez de) aller à la première fenêtre.

Je voudrais essayer de donner à chaque bouton une cible de _blank_$i ou quelque chose, de sorte que chaque bouton a une cible unique.

+1

non je l'ai essayé mais pas de joie, merci quand même – undefined

2

Je me demande si cela est dû au doctype que vous utilisez pour la page. L'attribut target est obsolète et n'est disponible que dans XHTML Transitional, XHTML Frameset ou HTML 4. Utilisez-vous XHTML Strict? Peut-être que cela causerait cette étrangeté, bien qu'il semble être un coup dans le noir ...

+0

Merci pour votre réponse - voici la ligne doctype de mon en-tête - Donc je suppose que ce n'est pas strict XHTML, devrais-je l'utiliser? – undefined

+0

.... OK J'ai essayé d'utiliser ce doctype dans l'en-tête - Mais en vain, toujours le même problème :( – undefined

+0

Désolé, je suppose que ce n'était pas le problème alors.HTML 4 devrait être bien avec l'attribut cible dans un formulaire Je pensais que ça valait le coup d'essayer, je posterais si j'avais d'autres idées. – Jeremy

1

Il pourrait y avoir un moyen de le faire en Javascript.Essayez d'ajouter ce code dans votre élément de formulaire:

<form onsubmit="window.open('about:blank', 'somename', 'width=300,height=300)" target="somename"<!-- Rest of form code here -->> 

Vous évidemment besoin d'une fenêtre nom unique pour chaque formulaire et faire référence à cette fenêtre dans la cible. Cela devrait aussi bien se dégrader. Dans l'éventualité où Javascript ne serait pas disponible, il devrait se comporter comme votre code actuel, avec les problèmes sur Safari sur un PC. Selon le nombre d'utilisateurs que vous utilisez pour ce navigateur, cela peut vous être acceptable ou non.

Questions connexes