2011-11-15 2 views
0

Je développe une application web qui permet à un utilisateur d'ajouter des entrées à une base de données MySQL via un formulaire web. Le formulaire Web publie sur la même page, du code PHP capture ces données et les envoie à MySQL. Pour quelque raison que ce soit, rien ne le rend jamais à MySQL. Ceci est le code que j'ai à ce jour qui ne fonctionne pas:Ajouter une entrée MySQL depuis la page web de PHP

<?php 
    include("config.inc.php"); 
    $Name=$_POST['AddName']; 
    $Group=$_POST['AddGroup']; 
    $Grade=$_POST['AddGrade']; 
    $Position=$_POST['AddPosition']; 
    $Email=$_POST['AddEmail']; 
    $HomeAddress=$_POST['AddHomeAddress']; 
    $City=$_POST['AddCity']; 
    $State="SC"; 
    $Zip=$_POST['AddZIP']; 
    $CellPhone=$_POST['AddCellNumber']; 
    $HomePhone=$_POST['AddHomeNumber']; 
    $FirstPeriod=$_POST['AddFirstPeriod']; 
    $SecondPeriod=$_POST['AddSecondPeriod']; 
    $ThirdPeriod=$_POST['AddThirdPeriod']; 
    $FourthPeriod=$_POST['AddFourthPeriod']; 
    $FifthPeriod=$_POST['AddFifthPeriod']; 
    $SixthPeriod=$_POST['AddSixthPeriod']; 
    $SeventhPeriod=$_POST['AddSeventhPeriod']; 
    $Homeroom=$_POST['AddHomeroom']; 
    $dbpassword=$_POST['AddPassword']; 

    $con = mysql_connect("127.0.0.1","$username","******"); 
    if (!$con) 
     { 
     die(); 
     }   

    mysql_select_db("$database", $con); 
    $sql="INSERT INTO names  (Name,Grp,Grade,Position,Email,HomeAddress,City,State,Zip,CellPhone,HomePhone,FirstPeriod,SecondPeriod,ThirdPeriod,FourthPeriod,FifthPeriod,SixthPeriod,SeventhPeriod,Homeroom) 
    VALUES('$Name','$Group','$Grade','$Position','$Email','$HomeAddress,'$City','$State','$Zip','$CellPhone','$HomePhone','$FirstPeriod','$SecondPeriod','$ThirdPeriod','$FourthPeriod','$FifthPeriod','$SixthPeriod','$SeventhPeriod','$Homeroom')"; 

    if (!mysql_query($sql,$con)) 
     { 
     die(); 
     } 
    echo "1 record added"; 

    mysql_close($con) 
    ?> 
      </body> 
    </html> 
+5

Conseil: Ross lire au sujet de l'injection sql –

+7

Deuxième conseil: Ne laissez JAMAIS votre mot de passe lorsque vous postez le code! –

+0

echo quelques messages d'erreur avec vos 'die()' s, et vous pourriez obtenir une idée de ce qui s'est mal passé ... – weltraumpirat

Répondre

2

Essayez et voir ce qu'il dit:

if (!mysql_query($sql,$con)) 
{ 
    die(mysql_error()); 
} 
+0

Cela a beaucoup aidé. Quelque chose ne va pas avec ma chaîne SQL. 'Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de 'City', 'SC', 'ZIP', 'Cell', 'Home', 'First', 'Second', 'Third', ' Quatrième ',' Cinquième ',' Sixième '' à la ligne 2 ' – Ross

+1

Votre' '$ HomeAddress' manque un guillemet simple. Devrait être "$ HomeAddress" – budwiser

+0

Toujours la même erreur même avec des correctifs (sauf pour excape_string) suggérés ci-dessous. – Ross

0

mysql_close($con) devrait avoir un point-virgule à la fin.

Vérifiez votre journal pour les erreurs.

utilisation mysql_real_escape_string

+0

Le point-virgule ne l'a pas réparé. Et curieusement, il n'y a pas d'erreurs MySQL dans les journaux à ce sujet. Quoi d'autre devrais-je essayer? – Ross

+0

J'ai juste essayé la chaîne d'échappement et cela a tué le formulaire. Mon journal des erreurs est rempli avec ceci maintenant: '[Tue Nov 15 19:05:36 2011] [erreur] [client XX.XX.XX.XX] Notice PHP: Variable indéfinie: AddSixthPeriod dans/var/www/ /directory/dbadd2.php à la ligne 25, référence: http: // /directory/dbadd.php' '[Tue Nov 15 19:05:36 2011] [erreur] [client XX.XX.XX.XX] PHP Attention: mysql_real_escape_string(): Accès refusé pour l'utilisateur '' @ 'localhost' (en utilisant le mot de passe: NON) dans/var/www/ /directory/dbadd2.php sur la ligne 25, referer: http: // /répertoire/dbadd.php' – Ross

1

Essayez d'insérer echo mysql_error();. Cela devrait vous donner au moins un point de départ où votre requête est incorrecte.

0

PHP cache les erreurs. Pour le débogage, commencez en plaçant ces deux lignes comme les premières lignes dans la balise <?php

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

également dans le cas où l'erreur a été dans une base MySQL, vous pouvez faire:

print_r(mysql_fetch_array(mysql_query("SHOW WARNINGS", $con)));

ou

print_r(mysql_fetch_array(mysql_query("SHOW ERRORS", $con)));

Directement après la requête mysql que vous pensez avoir échoué.

0

changer votre sélection de base de données

mysql_select_db("database name") 

ou

mysql_select_db($database); 

votre essayez de sélectionner une base de données appelée « base de données $ » avec un signe de dollar comme une chaîne, pas le nom dans cette variable . également, utilisez

mysql_real_escape_string ($ sql) pour échapper à ces variables (en évitant d'injecter sql) vous pouvez trouver des liens à ce sujet dans d'autres commentaires.

+0

Merci pour le conseil de escape_string. Va le changer. – Ross

+0

Et la base $ est une variable tirée de config.inc.php. – Ross

+0

supprimer les guillemets mysql_select_db ($ database); –

0

die(mysql_error()); va le réparer. Jetez un coup d'œil à l'échappement. Ce serait très facile d'injecter dans le code actuel.

Si vous n'allez pas vous échapper (je ne sais pas quand vous le ferez), vous pouvez aussi utiliser le $_POST plutôt que d'assigner à une variable et d'utiliser la variable.

+0

Essayé d'échapper, mais a reçu les messages d'erreur vu ci-dessus. – Ross

0

changement

$sql="INSERT INTO names  (Name,Grp,Grade,Position,Email,HomeAddress,City,State,Zip,CellPhone,HomePhone,FirstPeriod,SecondPeriod,ThirdPeriod,FourthPeriod,FifthPeriod,SixthPeriod,SeventhPeriod,Homeroom) 
    VALUES('$Name','$Group','$Grade','$Position','$Email','$HomeAddress,'$City','$State','$Zip','$CellPhone','$HomePhone','$FirstPeriod','$SecondPeriod','$ThirdPeriod','$FourthPeriod','$FifthPeriod','$SixthPeriod','$SeventhPeriod','$Homeroom')"; 

à

$sql="INSERT INTO names  (Name,Grp,Grade,Position,Email,HomeAddress,City,State,Zip,CellPhone,HomePhone,FirstPeriod,SecondPeriod,ThirdPeriod,FourthPeriod,FifthPeriod,SixthPeriod,SeventhPeriod,Homeroom) 
    VALUES('$Name','$Group','$Grade','$Position','$Email','$HomeAddress','$City','$State','$Zip','$CellPhone','$HomePhone','$FirstPeriod','$SecondPeriod','$ThirdPeriod','$FourthPeriod','$FifthPeriod','$SixthPeriod','$SeventhPeriod','$Homeroom')"; 
+0

remarquez l'extra 'après $ homeAddress. – encodes

+0

avez-vous essayé le code ci-dessus, il résout le problème dans la question – encodes

Questions connexes