2010-10-12 7 views
0

Ok donc j'ai ce javascriptnouvelle valeur en écrasant les valeurs précédentes

function getpreconfigproducts(str1,str2) 
{ 
var url="ajax_preconfig_products.php?"; 
url=url+"id="+str1+"&cid="+str2; 
xmlHttp = GetXmlHttpObject(stateChangeHandler); 
xmlHttp_Get(xmlHttp, url); 
return false; 
} 

et il appelle cette php

<?php 
if($_GET['id']!='') 
{ 
    $sql="SELECT * FROM productinfo WHERE ProductID=".$_GET['id']." AND Status=1"; 
    $pro=ExecuteGetRows($sql); 
?> 
<p>Qty: <input type="input" name="qty[]" id="fpro[]" value="1" style="width:15px; margin-top:-3px;" /> <label><?php echo $pro[0]['ProductName'];?></label> </p> 
<?php 
     echo "^_^"; 
     echo ",".$pro[0]['ProductID']; 
    } ?> 

qui génère cette

<div class="fields"> 
<h2>Final Products</h2> 
<p id="finalproductsid"> 
    <p>Qty: <input name="qty[]" id="fpro[]" value="1" style="width: 15px; margin-top: -3px;" type="input"> <label>FIREBOX S5510 15</label> </p> 
    <p>Qty: <input name="qty[]" id="fpro[]" value="1" style="width: 15px; margin-top: -3px;" type="input"> <label>FIREBOX S5510 15</label> </p> 
</p> 
</div> 

Le problème est que si un l'utilisateur change l'entrée qty [] pour dire 5 et ajoute un autre produit il revient à 1 ... des idées comment je peux adresser ce

+0

Qu'attendez-vous alors? Vous écrasez le HTML. Si vous n'avez pas besoin d'écraser - alors ne le faites pas. – zerkms

+0

J'ai juste besoin d'écrire le nouveau produit et pas tout à nouveau .. mais je ne sais pas comment y parvenir – Trace

+0

BTW, votre script PHP est vulnérable à l'injection SQL. – PleaseStand

Répondre

1

Mis à part toutes les choses d'injection de SQL, déjà mentionné, je pense que je pourrais savoir quel est votre problème. Dites-moi si je comprends votre script:

  1. utilisateur clique sur un bouton 'ajouter produit'
  2. bouton déclenche une requête AJAX au script PHP ci-dessus
  3. Le script PHP génère du HTML
  4. D'une certaine façon (?) le code HTML généré s'affiche
  5. les valeurs de tous les autres domaines de produits sous la forme revenir à une

Je suppose # 4 est w ici le problème (# 5) se produit. En fonction de la manière dont vous ajoutez le code HTML au formulaire, les champs de saisie sont parfois rétablis. Par exemple:

//Reverts all form inputs to default- 
myForm.innerHTML += "<input name='new_input'/>"; 
//Keeps current input values- 
var newNode = document.createElement('input'); 
myForm.appendChild(newNode); 

Puis-je suggérer que au lieu d'ajouter une chaîne de HTML, vous créez le HTML avec JavaScript, obtenir le nom du produit/id par une requête AJAX. Je ne comprends pas très bien comment fonctionne votre script. En ce qui concerne ma connaissance limitée, le PHP ne s'affiche pas sur la page en cours, mais en écho au texte de réponse d'AJAX. Y at-il quelque chose de plus, ou est-ce juste moi?

1

Re: Où est l'injection sql?

Cette réponse est une réponse au commentaire de l'OP demandant à propos de l'erreur d'injection sql.

Notez la ligne:

$sql="SELECT * FROM productinfo WHERE ProductID=".$_GET['id']." AND Status=1";

L'erreur est que la valeur HTML entrant pour "id" est pas correctement échappé. Vous vous attendez à ce qu'il contienne un nombre entier ou rien. Mais si un pirate a envoyé quelque chose comme

1;truncate users;select * from users where id=1 comme la valeur d'identité, vous finiriez avec l'instruction SQL:

$sql="SELECT * FROM productinfo WHERE ProductID=1;truncate users;select * from users where id=1 AND Status=1";

La bonne façon est de TOUJOURSTOUJOURS TOUJOURS correctement échapper ou tacher toutes les données entrant dans le programme.Pour Php MySQL DBM requêtes (manual):

$sql= sprintf("SELECT * FROM productinfo WHERE ProductID=%s AND Status=1", 
     mysql_real_escape_string($_GET['id'])); 

Notes:

  • Pour les bases de données autres que MySQL, il existe d'autres techniques Php. Voir les docs.
Questions connexes