2009-07-02 4 views
1

J'essaie de m'enseigner MySQL/PHP dès le début. Le code suivant a été levé à partir de divers sites de tutoriel. J'utilise phpMyAdmin fourni par mon hébergeur.MySQL: Pourquoi ignore-t-il le texte dans le champ de formulaire?

J'ai fait une table avec un champ auto-incrémenté appelé "ID" et un autre champ appelé "premier" (varchar, limite 30, non nul). Ensuite, j'ai fait un formulaire simple avec un champ de texte nommé "premier" et un bouton Envoyer. Je tape mon nom dans la boîte et cliquez sur Envoyer. Cela crée une ligne dans la base de données avec un ID, mais le champ "premier" est toujours vide.

J'ai essayé de remplacer '$ _POST [first]' avec quelques mots simples, et cela a fonctionné - les mots apparaissaient dans le tableau avec un numéro d'identification très bien. C'est comme ça que je sais qu'il parvient à parler à la base de données, il ne saisit pas le champ de texte

Après l'exécution de l'instruction INSERT, tous les enregistrements de la table sont affichés. Il montre tous les numéros d'identification, puis vide où "premier" devrait être. Je l'ai aussi fait écho à l'instruction INSERT. C'est ce que l'affichage d'écho: INSERT INTO tblHurray (ID, premier) VALUES ('', '')

Quand je remplace les mots pour '$ _POST [premier]', l'écho ressemble à ceci: INSERT INTO tblHurray (ID, first) VALEURS ('', 'words')

Ceci est ma première question alors s'il vous plaît laissez-moi savoir si j'ai omis toute information pertinente! Et merci d'avance pour votre aide.

C'est la forme:

<form action="run_input.php" method="post"> 
Name: <input type="text" name="first"> 
<input type="Submit"> 
</form> 

C'est ce qui fonctionne lorsque "Soumettre" est cliqué:

<? 
include("run_connect.php"); // this connects to the database, this works 

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','$_POST[first]')"; 
mysql_query($step1); 
echo "$step1"; 

echo "<b><center>Database Output</center></b><br><br>"; 

$step2=mysql_query("SELECT * FROM tblHurray"); 

$num=mysql_numrows($step2); 

$i=0; 
while ($i < $num) { 

$firstname=mysql_result($step2,$i,"first"); 
$ID=mysql_result($step2,$i,"ID"); 
echo "$ID: $firstname<br />"; 

$i++; 
} 
?> 

Répondre

0

Cette ligne

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','$_POST[first]')"; 

doit ressembler à ceci:

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','" . mysql_escape_string($_POST['first']) . "')"; 

C'est une bonne habitude de toujours citer vos clés de tableau (['first'] plutôt que [first]).

De plus, il est bon de s'habituer à toujours échapper l'entrée de l'utilisateur avant de l'insérer dans la base de données pour empêcher l'injection SQL.

Vérifiez également que le nom de l'entrée de votre formulaire HTML correspond à votre code PHP.

$_POST['first'] 

est pas le même que

$_POST['First'] 
+0

Il est même préférable d'utiliser des instructions préparées. Découvrez PDO ou mysqli. –

+0

mySQL a préparé des déclarations à partir de 4.1 – Mathew

+0

Je suis d'accord avec vous deux, je ne voulais pas présenter trop de concepts à la fois :) –

1

Essayez

$step1 = "INSERT INTO tblHurray(ID, first) VALUES ('','".$_POST['first']."')"; 

Bien que, si vous allez vraiment apprendre, puis commencer par PHP PDO. Cela vous épargnera BEAUCOUP de problèmes à long terme, en particulier avec des requêtes paramétrées.

+0

Cela n'a pas fonctionné ... même chose comme avant :( –

+0

ce que la sortie print_r ($ _ POST)? – rfusca

0

Mark Biek l'a cloué, mais en tant que tweak fractionnaire, la fonction mysql_real_escape_string est meilleure que mysql_escape_string car elle prend en compte le jeu de caractères associé à la connexion.

Questions connexes