2010-11-17 8 views
1

J'ai un formulaire de soumission qui envoie des données à une base de données. Ensuite, je publie ces données de la base de données en HTML. Maintenant, je dois soumettre un autre morceau de données à travers un formulaire à la base de données. Je n'arrive pas à comprendre comment faire correspondre les nouvelles données aux entrées existantes.Ajouter des données aux entrées correspondantes dans la base de données MySQL

Ceci est mon code de sortie (données de base de données au format HTML avec une nouvelle forme pour les données supplémentaires):

<html> 
<body> 
<?php 

mysql_connect(localhost,root,root); 
@mysql_select_db(test) or die("Unable to select database"); 
$query="SELECT * FROM submission"; 
$result=mysql_query($query); 

$num=mysql_numrows($result); 

mysql_close(); 
?> 
<table border="0" cellspacing="2" cellpadding="2"> 
<tr> 
<th><font face="Arial, Helvetica, sans-serif">Read By</font></th> 
<th><font face="Arial, Helvetica, sans-serif">Date/Time</font></th> 
<th><font face="Arial, Helvetica, sans-serif">URL</font></th> 
<th><font face="Arial, Helvetica, sans-serif">Uploaded File</font></th> 
<th><font face="Arial, Helvetica, sans-serif">Email/Twitter</font></th> 
<th><font face="Arial, Helvetica, sans-serif"></font></th> 
</tr> 

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

$Date=mysql_result($result,$i,"Date"); 
$url=mysql_result($result,$i,"url"); 
$uploadedfile=mysql_result($result,$i,"uploadedfile"); 
$contact=mysql_result($result,$i,"contact"); 
?> 

<tr><form name="reader" action="reader.php" method="POST"> 
<td><font face="Arial, Helvetica, sans-serif"><input type="checkbox" name="reader" value="Max"> Max <input type="checkbox" name="reader" value="Aaron"> Aaron</font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $Date; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $url; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $uploadedfile; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $contact; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><input type="submit" value="Submit"></font></td> 
</form> 
</tr> 

<?php 
$i++; 
} 
?> 
</body> 
</html> 

Et ceci est le code reader.php:

<?php 

$error=0; 

$con = mysql_connect('localhost', 'root', 'root'); //Replace with your actual MySQL DB Username and Password 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("longform", $con); //Replace with your MySQL DB Name 
$reader=mysql_real_escape_string($_POST['reader']); //This value has to be the same as in the HTML form file 
$sql="INSERT INTO submission (reader) VALUES ('$reader')"; /*collect is the name of the MySQL table where the form data will be saved.name, email and comments are the respective table fields*/ 

if (!mysql_query($sql,$con)) { 
die('Error: ' . mysql_error()); 
} 

$message="Done!"; 
mysql_close($con); 


?> 

En ce moment, lecteur .php ajoute une nouvelle entrée de base de données avec le contenu du formulaire, j'en ai besoin pour ajouter ces données à l'entrée correspondante existante.

EDIT: Alors, je viens de réaliser que je dois être utiliser la commande UPDATE au lieu de INSERT, mais je ne sais pas comment ...

EDIT: Je pense que je l'ai fait quelques progrès dans la bonne direction, grâce aux commentateurs. Le nouveau code ne fonctionne toujours pas si:

Formulaire de sortie +:

<html> 
<body> 
<?php 

$id=$_GET['id']; 

mysql_connect(localhost,root,root); 
@mysql_select_db(longform) or die("Unable to select database"); 
$query="SELECT * FROM submission"; 
$result=mysql_query($query); 

$num=mysql_numrows($result); 

mysql_close(); 
?> 
<table border="0" cellspacing="2" cellpadding="2"> 
<tr> 
<th><font face="Arial, Helvetica, sans-serif">Read By</font></th> 
<th><font face="Arial, Helvetica, sans-serif">Date/Time</font></th> 
<th><font face="Arial, Helvetica, sans-serif">URL</font></th> 
<th><font face="Arial, Helvetica, sans-serif">Uploaded File</font></th> 
<th><font face="Arial, Helvetica, sans-serif">Email/Twitter</font></th> 
<th><font face="Arial, Helvetica, sans-serif"></font></th> 
</tr> 

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

$Date=mysql_result($result,$i,"Date"); 
$url=mysql_result($result,$i,"url"); 
$uploadedfile=mysql_result($result,$i,"uploadedfile"); 
$contact=mysql_result($result,$i,"contact"); 
?> 

<tr><form name="reader" action="reader.php" method="POST"> 
<td style="display:none;"><input type="hidden" name="unique_id" value="<? echo $id; ?>"></td> 
<td><font face="Arial, Helvetica, sans-serif"><input type="checkbox" name="reader" value="Max"> Max <input type="checkbox" name="reader" value="Aaron"> Aaron</font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $Date; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $url; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $uploadedfile; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $contact; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><input type="submit" value="Submit"></font></td> 
</form> 
</tr> 

<?php 
$i++; 
} 
?> 
</body> 
</html> 

reader.php:

<?php 

$error=0; 

$con = mysql_connect('localhost', 'root', 'root'); //Replace with your actual MySQL DB Username and Password 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("longform", $con); //Replace with your MySQL DB Name 

$reader=mysql_real_escape_string($_POST['reader']); //This value has to be the same as in the HTML form file 

$query="UPDATE submission SET reader='$reader' WHERE id='$unique_id'"; 
mysql_query($query); 
echo "Record Updated"; 
mysql_close(); 

?> 

Toute aide sur ce point tout à fait basculer mon monde.

EDIT: ça marche! Je voulais juste afficher le code fonctionnel ici au cas où quelqu'un d'autre a besoin il:

output.php

<html> 
<body> 
<?php 

mysql_connect(localhost,root,root); 
@mysql_select_db(test) or die("Unable to select database"); 
$query="SELECT * FROM table WHERE field = ''; 
"; 
$result=mysql_query($query); 

$num=mysql_numrows($result); 

mysql_close(); 
?> 
<table border="0" cellspacing="2" cellpadding="2"> 
<tr> 
<th></th> 
<th><font face="Arial, Helvetica, sans-serif">Read By</font></th> 
<th><font face="Arial, Helvetica, sans-serif">Date/Time</font></th> 
<th><font face="Arial, Helvetica, sans-serif">URL</font></th> 
<th><font face="Arial, Helvetica, sans-serif">Uploaded File</font></th> 
<th><font face="Arial, Helvetica, sans-serif">Email/Twitter</font></th> 
<th><font face="Arial, Helvetica, sans-serif"></font></th> 
</tr> 

<?php 
$i=0; 
while ($i < $num) { 
$id=mysql_result($result,$i,"id"); 
$date=mysql_result($result,$i,"date"); 
$url=mysql_result($result,$i,"url"); 
$uploadedfile=mysql_result($result,$i,"uploadedfile"); 
$contact=mysql_result($result,$i,"contact"); 
?> 

<tr><form action="reader.php" method="POST"> 
<td><input type="hidden" name="id" value="<? echo $id; ?>"></td> 
<td><font face="Arial, Helvetica, sans-serif"><input type="checkbox" name="reader" value="Max"> Max <input type="checkbox" name="reader" value="Aaron"> Aaron</font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $date; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $url; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $uploadedfile; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><?php echo $contact; ?></font></td> 
<td><font face="Arial, Helvetica, sans-serif"><input type="submit" value="Submit"></font></td> 
</form> 
</tr> 

<?php 
$i++; 
} 
?> 
</body> 
</html> 

reader.php

<?php 

$error=0; 

$con = mysql_connect('localhost', 'root', 'root'); //Replace with your actual MySQL DB Username and Password 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db("longform", $con); //Replace with your MySQL DB Name 

$reader=mysql_real_escape_string($_POST['reader']); //This value has to be the same as in the HTML form file 
$id=mysql_real_escape_string($_POST['id']); 
$query="UPDATE submission SET reader='$reader' WHERE id='$id'"; 
mysql_query($query); 
echo "Record Updated"; 
mysql_close(); 
?> 
+0

Une façon d'apprendre les modèles de requête est de les exécuter avec PHPMyAdmin puis utilisez PHP sprintf et% s pour remplacer les paramètres. – fncomp

Répondre

0

C'est là que vous semblez avoir de la difficulté:

 
$sql="INSERT INTO submission (reader) VALUES ('$reader')";

Essayez de remplacer que par:

 
if($_POST['unique_id']){ 
    $sql = "UPDATE submission (reader) VALUES ($reader) WHERE id = $unique_id LIMIT 1;"; 
}else{ 
    $sql="INSERT INTO submission (reader) VALUES ('$reader')"; 
}

+0

Cela m'a conduit à la réponse. Merci! –

+0

Pas de soucis, juste bon à savoir, je suis parfois utile;) – fncomp

0

obtenir l'ID de la ligne existante que vous voulez insérer.

En fait, il n'est pas inséré. Sa mise à jour

Pour cela, vous devez exécuter une requête de mise à jour.

UPDATE table_name 
SET column1=value, column2=value2,... 
WHERE some_column=some_value 

faire condition vérifier php.

if(id exist) 
run update 
else 
run insert 

http://www.w3schools.com/php/php_mysql_update.asp

http://www.weberdev.com/get_example-4392.html

comprennent les exemples dans le lien ci-dessus et essayer de le mettre en œuvre dans votre script

+0

Oui, je comprends comment écrire la requête, je ne sais pas comment traduire cela en variables pour le formulaire ... –

+0

avez-vous vérifié les exemples dans le deuxième lien? – zod

+0

Vous pouvez utiliser n'importe quelle colonne de la table pour obtenir l'enregistrement en utilisant un champ valide dans la clause WHERE. C'est juste que l'identifiant est juste le moyen le plus sûr (en supposant que l'incrément automatique de ce champ). – fncomp

0
//Assuming - parameters ready, connection establish and $connString set 
$sql1 = "SELECT * FROM submissions"; 
$res = mysql_query($sql, $connString); 

//loop like you did, but check out foreach loops, mysql_fetch_assoc, alternative forms 

    $id=mysql_result($result,$i,"id"); //similarly for other fields 
    //HTML form, elements, submit button as necessary for elements in $res 
    echo "<input type='hidden' name='submission_row_id' id='prev_insert_id_".$i."' value='$prevId' />"; 
     //within loop and form. HTML with php tag for variable is fine too, im just fairly unfamiliar 

//end loop 

reader.php - garder la plupart de vos

$reader=mysql_real_escape_string($_POST['reader']); 
$id = $_POST['submission_row_id']; 
$sql2="INSERT INTO submission (id, reader) VALUES ($id,'$reader')"; 
$sql2success = mysql_query($sql2, $connString); 
$outmessage = $sql2success ? 
       "Successful - table1 row $prevId updated" : 
       "Failure on update - $sql2" 

echo $outmessage; //among other things 
+0

'$ resource' est * non * la valeur de retour de mysql_query, c'est la valeur de retour de mysql_connect et c'est optionnel. En outre, ne pas vraiment résoudre le problème. – deceze

+0

pourquoi l'attitude? au moins être correct si vous allez être comme ça. resource (et la ressource $ j'ai précédemment eu) est le retour d'un mysql_query SELECT. les ops qui ne résultent pas en lignes (update, insert) ont le type booléen –

+0

Je corrigeais ta remarque sur 'mysql_insert_id' en acceptant la ressource retournée par' mysql_query', qui [* était * incorrect] (http://php.net/mysql_insert_id). Toute attitude que vous avez lu dans cette déclaration n'était pas intentionnelle. – deceze

0

Réponse courte: Vous devez restructurer votre formulaire.

Moins courte réponse: Votre page est capable d'afficher des entrées existantes et d'en créer de nouvelles. Ce que ne fait pas, c'est fournir un moyen d'éditer ceux qui sont sortis (ce que vous voulez faire).

Et modifier le formulaire et une nouvelle forme sont presque identiques: la différence principale est que la forme doit soumettre l'ID actuel de l'entrée en cours d'édition. La page de soumission peut ensuite l'utiliser pour déterminer si elle doit générer une instruction INSERT ou une instruction UPDATE.

Le rendu du formulaire pour l'édition doit également être effectué. L'URL doit fournir un moyen de spécifier quelle ligne, généralement par ID, que la page peut utiliser pour obtenir uniquement cette ligne de la base de données pour pré-remplir les champs édités.

(plus long terme, vous aussi devriez vraiment soit trouver un cadre ou construire votre propre. Cela vous permettra d'isoler les appels SQL loin de la génération de la page et le traitement des données.)

0

expansion sur la réponse de Zod, chaque entrée la base de données doit avoir un identifiant unique, ce qui correspond à zod.

id INT NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(id), 

Vous pouvez maintenant se référer à chaque entrée par son identifiant, et quand « ajouter [traduction] e [e] des données à l'entrée correspondante existante. » Vous pouvez dire

UPDATE .. FROM ... WHERE id = '$id' 
+0

Vous ne devriez pas avoir besoin de guillemets autour de $ id, car c'est numérique. – fncomp

0

Bonjour Megan, zod est correct. D'abord, vous devez passer l'identifiant pour la soumission de la table. Ensuite, vous devez vérifier si l'enregistrement existe. Vous pouvez le faire de deux façons:

SELECT COUNT(*) as total FROM submission WHERE ID = $id 

Si total> 0, alors vous savez que vous devez mettre à jour; sinon, vous devez insérer l'enregistrement.

Si vous utilisez MySQL (comme vous montrez des codes). Vous pouvez également utiliser la fonction « Duplicate KEY UPDATE »

INSERT INTO submission (id, Date,url,uploadedfile,contact) VALUES (1,'2010-12-31','www.google.com', 'Megan') 
ON DUPLICATE KEY UPDATE Date = now(); 

Il est un outil pratique, mais vous devez vérifier si elle vous concerne. Vous pouvez obtenir plus d'informations concernant cette fonctionnalité sur le site suivant: http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

1

Dans votre formulaire, vous souhaitez probablement ajouter un champ caché qui est l'ID à mettre à jour. Ainsi, pour chacune des lignes que vous retirez de la base de données, vous devez afficher les champs que vous souhaitez modifier, puis inclure dans le formulaire type = les champs masqués qui incluent l'ID de l'objet ou d'autres informations d'identification. Par exemple:

<form> 
    <input type="text" name="full_name" value="<?php echo $full_name ?>" /> 
    <input type="hidden" name="id" value="<?php echo $id ?>" /> 
</form> 
Questions connexes