2011-05-18 5 views
1

i essaie d'insérer des données de formulaire et il est une erreur donnant à chaque fois que « la base de données interrogation d'erreur » mon codage est ceErreur base de données interrogation dans le script php

<?php 
$dbc = mysqli_connect('localhost', 'root', '', 'askquestion') 
    or die('Error connecting to MySQL server.'); 

    $first_name=$_POST['firstname']; 
    $last_name=$_POST['lastname']; 
    $email=$_POST['email']; 
    $password=$_POST['password']; 
    $state=$_POST['state']; 
    $city=$_POST['city']; 
    $category=$_POST['category']; 


    $query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category) VALUES ('$first_name', '$last_name', $email, $password, $state, $city, $category)"; 

    $result=mysqli_query($dbc, $query) or die('Error querying database.'). mysql_error();; 


    echo 'you are registered...!'; 

    mysqli_close($dbc); 


    ?> 

Répondre

1

Vous êtes vulnérable à SQL Injection attacks. Toujours échapper vos valeurs POST entrantes, en utilisant mysql_real_escape_string(). Cela permet d'empêcher l'injection SQL et garantit que toutes les valeurs utilisées dans votre requête ayant des caractères spéciaux sont correctement échappées (par exemple, des guillemets).

En outre, assurez-vous que toutes les valeurs de chaîne sont correctement placées entre guillemets dans votre instruction VALUES.

+0

des thats pas vraiment une réponse à la question, n'est-ce pas? –

+0

Absolument, car si les valeurs POST entrantes étaient échappées, les caractères spéciaux ne rompraient pas l'instruction INSERT. –

+0

En fait, attrapé une chose de plus ... mis à jour ma réponse. –

0

Jetez un oeil à votre requête, vous avez

'$last_name', $email, $password, $state, $city, $category) 

Alors que vous devriez avoir:

$query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category) VALUES ('$first_name', '$last_name', '$email', '$password', '$state', '$city', '$category')"; 

Aussi, essayez d'utiliser

die(mysql_error()); 

dans le développement

Pour SQL Securi ty, vous devriez toujours échapper à chaque valeur d'entrée:

$first_name=mysql_real_escape_string($_POST['firstname']); 
+0

Merci beaucoup ... c'était une erreur idiote. et j'ai aussi mis ce code mysql_real. Merci beaucoup. Ça marche maintenant. – shekhar

0

lors de l'insertion des valeurs dans une base de données dont vous avez besoin des guillemets autour des variables ou des valeurs qui sont des chaînes, vous n'avez pas besoin de guillemets autour entiers/flotteurs ou des chiffres.

Toutes les valeurs que vous obtenez du POST super global sont des chaînes de texte, je suppose. donc remplacer ceci: (vérifier la structure de votre table si cela ne fonctionne pas):

$query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category) VALUES ('$first_name', '$last_name', $email, $password, $state, $city, $category)"; 

avec ceci:

$query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category) VALUES ('$first_name', '$last_name', '$email', '$password', '$state', '$city', '$category')"; 

pour plus d'informations, lire ici: http://www.w3schools.com/sql/sql_insert.asp

Questions connexes