2010-12-03 3 views
1

Je me demande si cela nécessite nécessairement un tableau et/ou une boucle, et quelles solutions pourraient résoudre ce problème. En tant qu'exercice d'apprentissage, j'essaie d'insérer deux des cinq variables dans deux lignes successives dans MY SQL. J'ai mis en place une table simple avec une colonne en SQL appelée test. Ma première "INSERT INTO table VALUES ('$ Word1')"; instruction insère avec succès la valeur dans la première ligne. Le code suivant similaire/presque identique avec $ Word2 n'ajoute pas la valeur à SQL. J'imagine que je dois avancer d'une manière ou d'une autre jusqu'au prochain rang, mais je suis complètement perdu quant à la façon d'accomplir cela. J'ai parcouru les forums, mon livre PHP, et w3Schools en vain.PHP/MYSQL: Seulement capable d'insérer des valeurs dans la première ligne

/*retrieve user input from separate HTML input form */ 
/* and initializes variables */ 
$Word1 = $_POST["Word1"]; 
$Word2 = $_POST["Word2"]; 
$Word3 = $_POST["Word3"]; 
$Word4 = $_POST["Word4"]; 
$Word5 = $_POST["Word5"]; 

//select db 
mysql_select_db("madlibs", $con); 

//insert user input for word 1 into SQL 
$sql = "INSERT INTO test (MadWords) 
VALUES 
('$Word1')"; 
if (!mysql_query($sql,$con)) 
{ 
    die('Error: ' . mysql_error()); 
} 

//word 2  
/* ***THIS CODE AND MANY VARIATIONS OF IT FAIL TO ENTER $WORD2 INTO SQL*/ 
"INSERT INTO test (MadWords) 
VALUES 
('$Word2')"; 

if (!mysql_query($sql2,$con))  
    /*I've cut this if statement in other debugging runs with the same result*/ 
{ 
    die('Error: ' . mysql_error()); 
} 

echo "1 record added"; 
+3

avez-vous assigné une deuxième requête dans $ sql2 variable et aussi vérifier la clé primaire dans la table? –

+0

Avez-vous un identifiant d'incrémentation automatique? – Dezigo

+0

Méfiez-vous des injections SQL dans le code ci-dessus. – stribika

Répondre

2

Cela peut être la duplication de la clé primaire qui empêche d'insérer des secondes valeurs dans la table.

+0

Lorsque j'ai défini la deuxième requête comme $ sql2, le problème a été corrigé, mais par "duplication de la clé primaire" voulez-vous dire utiliser test (MadWords) dans deux instructions INSERT? Est-ce quelque chose à éviter? Je me demande parce que le code fonctionne malgré cette duplication maintenant. – Bodhidarma

0

votre problème est avec primery Key si vous créez une colonne comme id qui est la clé primery cette requête fonctionne très bien

0

En supposant que vous utilisez la même requête pour les deux itérations, la raison la plus probable pourquoi la deuxième requête échouerait est que le champ MadWords est votre clé primaire, ou n'autorise pas les doublons.

  • Est-ce que les champs Word1 et Word2 ont la même valeur?
  • Qu'est-ce que vous obtenez lorsque vous exécutez EXPLAIN test dans MySQL?
1

Vous n'avez jamais déclaré votre variable $ sql2. Il exécute une requête nulle au lieu de celle que vous voulez exécuter.

//word 2  
/* ***THIS CODE AND MANY VARIATIONS OF IT FAIL TO ENTER $WORD2 INTO SQL*/ 
$sql2 = "INSERT INTO test (MadWords) 
VALUES 
('$Word2')"; 

if (!mysql_query($sql2,$con))  
    /*I've cut this if statement in other debugging runs with the same result*/ 
{ 
    die('Error: ' . mysql_error()); 
} 

Cela devrait être le correctif, sauf s'il y a du code pertinent que vous n'avez pas publié.

Pour répondre à votre commentaire, vous pouvez faire quelque chose comme:

foreach ($_POST as $value) { 
    $sql = "Insert into test (madwords) values('$value')"; 
    mysql_query($sql,$con); 
} 
+0

Merci. Cela l'a réparé. Stylistiquement, y compris cette affirmation si après chaque insertion n'est pas si attrayant pour moi. Y a-t-il un moyen plus propre d'atteindre les mêmes objectifs? – Bodhidarma

+0

Vous pouvez faire une boucle for en utilisant le tableau $ _POST. EDIT: Ajout d'un exemple de code à mon message d'origine pour votre problème. – Brains1994

0
mysql> create database madlibs; 
Query OK, 1 row affected (0.03 sec) 

mysql> use madlibs; 
Database changed 

mysql> create table test(MadWords varchar(200)); 
Query OK, 0 rows affected (0.01 sec)   

mysql> select * from test; 
Empty set (0.00 sec) 

mysql> insert into test(MadWords) values ('foo'); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from test; 
+----------+ 
| MadWords | 
+----------+ 
| foo  | 
+----------+ 
1 row in set (0.00 sec) 

mysql> insert into test(MadWords) values ('bar'); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from test; 
+----------+ 
| MadWords | 
+----------+ 
| foo  | 
| bar  | 
+----------+ 
2 rows in set (0.00 sec) 

semble ok.

Votre entrée peut être fauchée. Dans l'exemple fourni, vous n'avez pas défini la variable $ sql2. Essayez d'utiliser les requêtes directement sur la base de données sans impliquer PHP, soit via la ligne de commande ou PHPMyAdmin. Si vous rencontrez des problèmes avec votre base de données et que vous n'êtes pas sûr que ce soit dans la couche d'application ou la couche de base de données, imprimez littéralement toutes vos requêtes de base de données. Autrement dit, au lieu d'utiliser mysql_query, renvoyez la requête que vous alliez exécuter. Est-ce que cela ressemble à ce que vous attendez? Essayez d'exécuter les requêtes que vous obtenez par rapport à la base de données.

Si vous avez une table pour chaque histoire MadLibs, il devrait y avoir une colonne pour chaque mot. De cette façon, une soumission entière est une rangée. Il devrait y avoir une colonne ID pour identifier cette ligne; alors vous pouvez vous fier uniquement à cet ID pour extraire toutes les données pour toute cette soumission avec un select * from test where id = 12345; ou autre.

+0

Est-ce que je vous connais quelque part? – Bodhidarma

+0

Je voterais si je pouvais. Je suis sûr que je pourrai avoir une application madlibs d'ici samedi. – Bodhidarma

+0

c'est très improbable, car je n'ai pas de forme physique. – jorelli

Questions connexes