8722 sujets

Développement web côté serveur, CMS

Bien le bonjour.
J'ai un problème avec une requête SQL contenant deux variables PHP...
En fait après la première variable la suite de la requête n'est pas prise en compte en tant que requête SQL... J'ai essayé pleins de syntaxes avec les apostrophes et guillemets mais rien n'y fait.
Voici la requête en question:
query("UPDATE partner SET password_partner='".$pass."' WHERE id_partner ='".$_POST['userid']."'");

En gros après la variable $pass le WHERE prend le colorie d'un commentaire et n'est pas pris en compte ce qui casse tout...
Une idée?
Modérateur
Et l'eau,

1. En double quotes, les variables sont interprétées....
2. Quel est le message d'erreur ?
3. As tu fait un echo de la ligne SQL afin de vérifier l'intégrité de ton SQL ?
4. Que vaut $_POST['userid'] ?
5. code de cascadeur Smiley hum : Pourquoi directement $_POST ? Pour pas de query préparée ?
6. De mémoire, quand un champ est définit en integer, tu n'es pas obligé de rajouter des quotes dans ta requête.

Smiley cligne

<?php
    $pass = "bla";
    $userid = $_POST['userid'];
    $sql = "UPDATE 
                partner 
            SET 
                password_partner ='$pass' 
            WHERE 
                id_partner = $userid";
    echo $sql;
    exit();
    query($sql);
?>

Modifié par niuxe (04 May 2018 - 13:04)
Meilleure solution
Alors merci beaucoup de ton aide. Le code est sous cette forme pour d'abord le tester rapidement je ferai une requête préparée et tout après. Sinon ton code règle bien mon erreur et effectivement j'au rai pu la régler en me posant les bonnes questions mais je débute encore. Merci du coup de main. Smiley smile
Modérateur
NiceRage a écrit :
Alors merci beaucoup de ton aide.

De rien Smiley smile


NiceRage a écrit :

Le code est sous cette forme pour d'abord le tester rapidement je ferai une requête préparée


Toujours commencer par le faire proprement. Les mauvaise habitudes sont de procrastiner. Une query préparées permet de limiter les dégats mais ne fait pas tout...

NiceRage a écrit :

et tout après. Sinon ton code règle bien mon erreur et effectivement j'aurai pu la régler en me posant les bonnes questions


En fait, c'est plus subtile que cela. Avec une requête préparée, tu aurais échappé à ce problème. Je te laisse comprendre l'erreur de syntaxe :

....
WHERE
    id_partner ='$_POST['userid']'
....

Y'a pas à dire ce bout de code n'a pas la côte.... Smiley cligne

N'oublie pas de mettre le sujet en mode résolu Smiley cligne
Modifié par niuxe (04 May 2018 - 17:10)
Bonjour ,
ta requête n'est pas sécurisée , attention.
Pour une requête sécurisée ,essaye ceci :

<?php
$host = "localhost";
$db = "mydatabase";
$user="root";
$mdp="";

try {
$bdd = new PDO('mysql:host=.' $host .';dbname='.$db.';charset=utf8', $user, $mdp);
}
catch(Exception $e)
{
//erreur d'accès à ta bdd
 die($e->getMessage());
}

$req = $bdd->prepare("UPDATE partner SET password_partner= :mdp WHERE id_partner = :userid");
$req->bindParam(":mdp",$pass);
$req->bindParam(":userid",$_POST["userid"],PDO::PARAM_INT);
$req->execute();

//optionnel , renvoi le nombre de lignes affectées de ta requête
var_dump($req->rowCount());
?>

Modifié par JohnNes (13 May 2018 - 17:17)