2010-10-22 17 views
-1

Un bouton Soumettre pour un formulaire situé sur ma page déclenche le code ci-dessous, mais je ne sais pas comment enregistrer la valeur numérique d'une zone de texte nommée 'quantité' dans une variable php que je peux utiliser dans la requête PDO ci-dessous. Je ne suis pas sûr de la syntaxe. Merci d'avance!Une variable de formulaire dans une requête PDO

 if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { 
$amount = isset($_POST['amount']) ? $_POST['amount'] : null; 
if (null != $amount) { 

$user = 'user'; 
$pass = 'pass'; 
$pdo = new PDO('mysql:host=localhost;dbname=dbname', $user, $pass); 
session_start(); 
$tablename = $_SESSION['MM_Username']; 
$UpdateQuery = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `status` = 1', $tablename); 
$stmt = $pdo->prepare($UpdateQuery); 
$stmt->bindParam('amount', $amount); 
$stmt->execute(); 
} 
} 

Suppression de la ligne de db_select et ont également vérifié que la MM_Username SESSION variable est en fait correctement réglé. Y at-il de toute façon SQL peut renvoyer des rapports d'erreurs plus détaillés? Quand je cours le code comme ci-dessus, je ne reçois aucune erreur, cependant, cela ne fonctionne tout simplement pas.

+0

perdre la ligne 'de mysql_select_db'. Vous devez également vous assurer que '$ _SESSION ['MM_Username']' est correctement défini. Quels messages d'erreur (le cas échéant) obtenez-vous? – Phil

+0

Alors que le nom de table est censé être sécurisé, il est toujours très mauvais et très dangereux d'ajouter des données à la requête de cette façon. Vous perdez tous les avantages PDO à la fois. Je vérifierais l'existence de la table avec une autre requête en premier. Ou, mieux encore, n'utiliserait pas du tout des tables portant des noms d'utilisateurs. Votre structure de données est juste terrible. –

+0

Tout à fait d'accord que la structure de données pourrait être grandement améliorée. Je ne dirais pas que vous perdez tous les avantages PDO en ayant un nom de table variable. Tenez compte du moment où vous préférez les noms de tables (comme le font la plupart des solutions CMS CMS). La requête est toujours compilée et les paramètres passés via bind. Le vrai danger ici est la source de ladite variable de nom de table. – Phil

Répondre

-1

Edit: réponse totalement révisée avec des rapports d'erreur via Exception

session_start(); 
if (isset($_POST['MM_update']) && $_POST['MM_update'] == 'form1') { 
    $amount = isset($_POST['amount']) ? $_POST['amount'] : null; 
    if (null === $amount) { 
     throw new Exception('Amount not set'); 
    } 
    $user = 'user'; 
    $pass = 'pass'; 
    if (empty($_SESSION['MM_Username'])) { 
     throw new Exception('Username table not set in session'); 
    } 
    $pdo = new PDO('mysql:host=localhost;dbname=dbname', $user, $pass); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $query = sprintf('UPDATE `%s` SET `stock` = :amount WHERE `status` = 1', $_SESSION['MM_Username']); 
    $stmt = $pdo->prepare($query); 
    $stmt->bindParam('amount', $amount); 
    $stmt->execute(); 
} else { 
    echo 'Nothing to do'; 
} 
+0

Ok va essayer ces deux possibilités et revenir vers vous. – Parker

+0

Enfin obtenu Phil !! La valeur de la variable de formulaire n'a pas été définie correctement en raison de deux formulaires portant des noms identiques sur la même page. Je ne peux pas vous remercier assez pour votre aide ce soir. Passe une excellente nuit!! – Parker

+0

FYI - L'attribut "nom" du formulaire est inutile. – Phil