2 votes

PHP/SQL script pour incrémenter la valeur d'un champ d'enregistrement ne met pas à jour l'enregistrement.

HTML :

<form>
    <input type="radio" name="grade" value=95 /> A<br />
    <input type="radio" name="grade" value=85 /> B<br />
    <input type="radio" name="grade" value=75 /> C<br />
    <input type="radio" name="grade" value=65 /> D<br />
    <input type="radio" name="grade" value=50 /> F
</form>

PHP :

if (isset($_POST['grade'])) {
                    $name = $_POST['name'];
                    $grade = $_POST['grade'];
                    $sql = "UPDATE grade SET 
                    total=total+'$grade',
                    numvotes=numvotes+1 WHERE
                    name='$name'";

Bonjour à tous... Je travaille sur un projet visant à ajouter des notes associées à des noms dans un menu. Mon code HTML pour le menu radial pour le grade est ci-dessus et mon SQL pertinent est également montré. Je veux ajouter une VALEUR NUMÉRIQUE de la note sur le "total" dans ma base de données SQL et augmenter le nombre de votes par 1. Je ne suis pas sûr que ma syntaxe est correcte parce que la base de données ne reçoit pas un ajout à ses votes ou le total de la note. Merci !

EDIT : Une partie de la raison pour laquelle je suis confus que cela ne fonctionne pas est que lorsque je vais dans la console mySQL, je peux faire une commande presque identique (où à la place '$grade' est un nombre) et cela fonctionne. Au minimum, je devrais obtenir une erreur ou peut-être que le nombre de votes devrait augmenter, mais rien.

EDIT2 : Crédit à Radu pour l'avoir remarqué. Mon menu de noms ne fonctionne pas correctement. Après avoir utilisé $die après mon instruction SQL, j'ai constaté que les noms sélectionnés dans le menu déroulant étaient interprétés comme des nombres entiers et non comme des noms. Il doit être alimenté par les noms SQL dans la base de données. Voici mon code.

<?php
    $query = mysql_query("SELECT name, id FROM grade");
    echo "<select name='name'>";
        while ($temp = mysql_fetch_assoc($query)) {
            echo "<option value='".$temp['name']."'>".$temp['name']."    </option>";
        }
    echo "</select>";
?>

EDIT3 : Après avoir changé $temp['id'] à $temp['name'] j'ai découvert que mon die($sql) se lit maintenant :

UPDATE grade SET total=total+'95', numvotes=numvotes+1 WHERE name='charlie'

Donc le nom est entré, mais il n'est toujours pas mis à jour. Des idées ?

3voto

Dalen Points 5015

Supprimer , après

numvotes=numvotes+1

dans votre requête

3voto

rid Points 24625

Vous utilisez les noms comme des chaînes de caractères dans la requête SQL. Donc changez ce qui suit :

echo "<option value='".$temp['id']."'>".$temp['name']."</option>";

à :

echo "<option>".htmlspecialchars($temp['name'])."</option>";

Pour les projets en direct, siempre utiliser htmlspecialchars() quand echo() en envoyant quelque chose au navigateur, et siempre utiliser mysql_real_escape_string() lors de la composition de requêtes SQL à partir d'une entrée utilisateur.

Par exemple, dans un projet réel, vous devriez toujours utiliser $name = mysql_real_escape_string($_POST['name']) au lieu de simplement $name = $_POST['name'] .

1voto

NightHawk Points 1296
USERS
-----
id AUTO_INCREMENT
name

VOTES
-----
id AUTO_INCREMENT
user_id
grade

INSERT INTO votes (user_id, grade) VALUES (1, 95);
INSERT INTO votes (user_id, grade) VALUES (1, 85);
INSERT INTO votes (user_id, grade) VALUES (2, 75);

Ensuite, pour obtenir le nombre de votes du premier utilisateur :

SELECT count(*) total_votes FROM votes WHERE user_id = 1;

Et pour marquer des points :

SELECT sum(grade) total_score FROM votes WHERE user_id = 1;

Ceci n'a pas été testé, mais devrait vous mettre sur la bonne voie.

1voto

bumperbox Points 6596

Il se peut que ce soit juste un oubli dans votre exemple, mais la balise devrait être

<form method="post">

sinon cette condition ne sera jamais déclenchée, car les formulaires utilisent par défaut la méthode GET.

if (isset($_POST['grade'])) {

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X