Question

Je suis en train de construire un formulaire dans lequel les utilisateurs peuvent mettre à jour les attributs de livres.Il est généré dynamiquement, un formulaire HTML, où les utilisateurs peuvent entrer de nouvelles valeurs pour des choses comme "Titre", "Auteur", et "Description" qui ressemble à quelque chose comme ceci:

echo "<form id=changerform name=changerform action=updatesubmit.php method=post>";
echo "<span id=titlebox>Title: <input class=attributefield style='border:none' type=text size=100 id=Title value='".$item['Title']."' />Change This?</span> <br>";
echo "<span id=authorbox>Author: <input class=attributefield style='border:none' type=text id=Author value='".$item['Author']."' />Change This?</span><br>";
echo "<span id=description>Description: <textarea class=attributefield style='border:none' rows=9 cols=100 name=Description id=Description >".$item['Description']."</textarea></span>";
echo "<input type='hidden' id='bookidfield' name='bookidfield' value = '".$toChange."' />";

Ce formulaire est géré par php qui ressemble à ceci:

        while($nowfield = current($_POST)){

    $col = key($_POST);

    switch($col){
        case 'Title':
        $qstring = 'UPDATE Mainbooks SET Title = :slug WHERE ItemID LIKE :bookid;';
        break;

        case 'Author':
        $qstring = 'UPDATE Mainbooks SET Author = :slug WHERE ItemID LIKE :bookid;';
        break;

        case 'Description':
        $qstring = "UPDATE Mainbooks SET Description = :slug WHERE ItemID LIKE :bookid;";
        break;

        default:
        echo "Invalid input";
        break;

        }//end switch

    $upquery = $safelink->prepare($qstring);
    $upquery->bindValue(':slug', $nowfield, PDO::PARAM_STR);
    $upquery->bindValue(':bookid', $_POST['bookidfield'], PDO::PARAM_INT);
    $upquery->execute();

next($_POST);





} //end while

J'ai organisé comme une instruction switch parce qu'il y a du code dans le formulaire de passer uniquement les champs qui ont été modifiés par post (à l'exception de la "bookidfield' entrée, qui est la clé unique pour chaque élément en elle.) Avec le commutateur, les requêtes exécutées.

Le "titre" et "auteur" champs de fonctionner correctement;ils mettent à jour sans problème les nouvelles valeurs.Le champ "description", bien que, toujours les mises à jour de la valeur de l 'bookidfield.' Je peux corriger si je vais dans et modifier manuellement les ':bookid paramètre l'id du livre que je veux.

Si Je var_dump(_$POST) il semble venir à travers avec la touche de droite des valeurs, comme suit:

    array(4) { ["Title"]=> string(22) "Gross Boogers and Such" ["Author"]=> string(14) "Franny Panties" ["Description"]=> string(55) "This is the value I want to change the description to!!" ["bookidfield"]=> string(3) "184" }

Mais dans ma table SQL, il va changer le titre du livre de 184 à "Brut de crottes de nez et une Telle" et l'auteur de "Franny Culotte", mais il va modifier la description de "184." Il faut avoir quelque chose à voir avec mon utilisation de bindValue(), droite?Ou faut-il avoir à faire avec ma boucle?Est-ce la façon dont le formulaire est nommé?J'ai regardé trop de temps à voir ce qu'il est.

Grâce Stackoverflow, vous les gars sont super.

Était-ce utile?

La solution

Votre problème c'est que quand le $col est différente pour le Titre, l'Auteur ou de la Description, en d'autres termes, lorsque le commutateur exécute le cas par défaut l'exécution de la requête précédente avec $nowfield = 184.Vous ne devez pas exécuter la requête.

Lorsque le commutateur d'exécuter le cas par défaut, vous devez passer à la valeur suivante, sauter à l'exécution de la requête.

default:
    echo "Invalid input";
    next($_POST);
    continue 2;
    break;

Autres conseils

Votre code HTML est rompu pour la Description <textarea>.Vous avez...

<textarea ... name=Description id=Description />".$item['Description']."</textarea>
<!--                                          ^ there's your problem -->

Là où il devrait être

<textarea ... name=Description id=Description>".$item['Description']."</textarea>

Comme mentionné dans mon commentaire, la façon dont vous êtes la génération de code HTML est lié à conduire à des problèmes.Je vous suggère de prendre cette approche...

// leave the PHP context
?>
<form id="changerform" action="updatesubmit.php" method="post">
    <span id="titlebox">
        Title:
        <input class="attributefield" type="text" id="Title" value="<?= htmlspecialchars($item['Title']) ?>">
        Change This?
    </span>
    <!-- you get the idea -->
</form>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top