Problème modification ligne MYSQL

  • Auteur de la discussion Auteur de la discussion Ibilolz
  • Date de début Date de début
Nouveau WRInaute
Bonjour, j'ai une table salle qui contient un id, num_salle, descr et nombre_poste. Je cherche à faire un petit formulaire de modification ou l'on choisirait la salle dans un bouton déroulant et on pourrais modifier ses champs en rentrant dans des input un nouveau nom, une nouvelle description et un nouveau nombre de poste. J'ai fais ça mais ça ne marche pas, il doit y avoir une erreur dans le php.

Code:
<?php 
 
include 'fonctions.connect.php';
$id_salle = "SELECT num_salle FROM Salle"; 
$res = mysql_query($id_salle); 
?>
<br></br>
                 <div> 
                <form action="" method="post" id=test> 
           
                <select name="test3" id="test1"> 
                <option value='-1'>----Choisissez le numéro d'une salle à modifier -----</option> 
                <?php 
                while ($row = mysql_fetch_array($res))   
                { 
                $salle = $row['num_salle']; 
                echo "<option value='$salle'>$salle</option>"; 
                }  
                ?> 
                </select> 
                 <br></br>
        Numéro de la salle : <input type="text" name="num3" size=10 <br></br>
        Description : <input type="text" name="descr3" size=20 <br></br>
        Nombre de poste :<input type="text" name="nombre3" size=20 <br></br>
        <br></br>
        <input type="submit", name="submit" Value="Modifier">
<?php              
         
if (isset($_POST['test3'], $_POST['num3'], $_POST['descr3'], $_POST['nombre3']))


{

$test3 = $_POST['test3'];
$num3 = $_POST['num3']; 
$descr3 = $_POST['descr3']; 
$nombre3 = $_POST['nombre3']; 


$sql = 'UPDATE Salle SET num_salle='$num3', description= '$descr3', nombre_poste='$nombre3' WHERE num_salle='$test3'';


 
mysql_query($sql);

// on ferme la connexion à la base
mysql_close();

?>


</div> 
        <br></br>

 </div></FORM>
 
WRInaute accro
En informatique dire "ça ne marche pas" ou rien c'est pareil.

NB: il faut revoir les bases parce que là t'as une belle faille d'injection SQL.
 
Nouveau WRInaute
Me répondre ça ou rien c'est pareil. Tous mes champs sont bien nommés, je les récupèrent tous et normalement ma commande sql est aussi bonne donc si tu veux me dire quelque chose dis moi d’où viens l'erreur ...
 
Nouveau WRInaute
Bon, j'ai remplacé ma requête par ça mais il doit encore y avoir une erreur ..

$sql = "UPDATE `Salle` SET `num_salle` = \'$num3\', `description` = \'$descr3\', `nombre_poste` = \'$nombre3\' WHERE `num_salle` = \`$test3\`;";
 
WRInaute passionné
Je n'y connais rien mais je vois que les quotes de la dernière variable ne sont pas les mêmes que celles des autres variables.. En plus il n'y a pas besoin d'échapper les quotes quand ce ne sont pas celles dont tu te sert pour entourer la chaîne de caractères de la requête.

Mais bon en fait tu ne me donnes pas plus envie de t'aider que ça et encore j'aurai du te laisser dans ton coin.. Trop bon, trop con.. Quand je vois la réponse que tu fais à spout alors que tu es dans l'erreur en ne communiquant pas le message d'erreur, mais au lieu d'être reconnaissant d'avoir eu une réponse et de donner plus d'information sur l'erreur ou de demander pourquoi spout te dit ca, tu te rebelles bêtement, et ben rebelle toi tout seul.
Tu vois c'est facile de faire le susceptible :-)
 
Nouveau WRInaute
... Je ne savais pas que c'était pour l'erreur que je n'avais pas marqué, j'ai pourtant cru mettre que javais page blanche, que le code php faisait tout planter. Après je débute en prog en autodidacte depuis 3 mois et c'est pas en me répondant comme cela sur des forums que je vais avoir envi de faire des progrès. Réponse sèche, pas d’explication ... Une chose facile pour quelqu'un ne l'est pas forcément pour d'autre.
 
WRInaute passionné
Sur les forums ceux qui aident le font car ils aiment la technique, c'est tout, on n'est pas assistantes sociales, si tu n'as pas l'envie de faire des progrès, il ne faut pas compter sur les autres pour te la donner.
Spout t'as donné un conseil en fait, je le donne aussi des fois, pour les débutants justement, de mettre toutes les chances de ton côté pour obtenir des réponses, de l'aide, donc être plus poli qu'en temps normal, fournir toutes les informations qui peuvent aider à résoudre ton erreur. Et d'ailleurs en faisant comme ça quand je demande de l'aide, je m'aperçoit que quelques fois en écrivant toutes les informations pour que les gens m'aident, je trouve la réponse d'un coup, en gros j'essaye d'organiser les informations qui peuvent aider à m'aider, et du coup j'en arrive à m'aider tout seul :-)
 
WRInaute impliqué
Le problème de la page blanche, c'est sans doute un problème d'erreur masquée.
La première chose à faire quand tu te lances dans le développement PHP, c'est de configurer PHP pour le dev. Au minimum:
display_errors = On
error_reporting = -1
Le premier demande à afficher toutes les erreurs, et le second demande à afficher toutes les types d'erreurs, que ce soit des notices ou des crash.
On le voit rarement dans les tutos pour débutant, c'est pourtant la base de l'apprentissage …
 
Nouveau WRInaute
Bonjour,

Ton code fait très amateur, tu devrais utiliser PDO pour palier aux injections SQL, ainsi le code devient tellement simple ! PDO c'est la classe ... :-P

Exemple de code :

Code:
    public function read($id)
    {
        $id = Security::filterVar($id, 3);
        $sql = 'SELECT * FROM ' . $this->db->prefix('matable') . ' WHERE id = :id AND ip = :ip';
        $sth = $this->db->prepare($sql);
        $sth->bindParam(':id', $id, PDO::PARAM_STR, 64);
        $sth->bindParam(':ip', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR, 64);
        if (!$this->db->execute($sth)) {
            return '';
        }
        $data = $sth->fetch(PDO::FETCH_ASSOC);
        if (empty($data['data'])) {
            return '';
        }
        return $data['data'];
    }

Avec ça les petits geeks peuvent toujours essayer ! :-D
 
Nouveau WRInaute
Code:
$test3 = $_POST['test3'];
$num3 = $_POST['num3'];
$descr3 = $_POST['descr3'];
$nombre3 = $_POST['nombre3'];


$sql = 'UPDATE Salle SET num_salle='$num3', description= '$descr3', nombre_poste='$nombre3' WHERE num_salle='$test3'';

8O Belles injections en perspectives.

Pour utiliser du PHP dans les quotes, il faut utiliser les double quotes "$var". Ensuite pour les requêtes SQL tu devrais utiliser initvar sur tous les nombre comme "num_salle". Pour le texte utiliser au moins mysqli_real_escape_string pour limiter un peu la casse, je dis bien un peu.

Pour mysqli_real_escape_string, lire attentivement la doc PHP : http://www.php.net/manual/fr/mysqli.real-escape-string.php
 
Discussions similaires
Haut