2012-02-29 3 views
0

Je suis un peu perdu d'être nouveau dans les bases de données. J'essaie de créer une page/formulaire qui, à partir d'un lien que seul l'administrateur peut voir, extrait les informations de $ id de la base de données, les affiche afin que chaque champ puisse être mis à jour et sauvegardé dans la base de données. J'ai également ajouté un formulaire au bas de la page pour entrer un nouveau champ dans la base de données. Par souci de simplicité je les ai mis sur une page mais je peux les séparer si nécessaire. Mon code ne fonctionne pas encore et toute aide serait grandement appréciée.MySQL PHP insérer et mettre à jour

echo "<a href=\"test.html?p=ID{$row["id"]}\">Edit</a><br>"; 

un lien recrache à test.html? P = ID (#) La partie de lien fonctionne parfaitement.

page Admin

<div><h1 class="pageTitle">Episode List UPDATE</h1></div> 
    <?php 
// Connect to the database 
require 'include/episodelist.db.php'; 

// Ask the database for the information from the season table BUT how to only get info for the ID? 
$query="SELECT * FROM `season` WHERE `id` = $id"; 
$result = mysql_query("SELECT * FROM season"); 
$num=mysql_numrows($result); 
mysql_close(); 
?> 
<form action="include/epslist.update.php" method="POST"> 
<table> 
<tr> 
<td>Season Number: </td><td><input type="text" name="season_sum" size="50" value="<? echo "$season_num";?>"></td> 
</tr> 
<tr> 
<td>Episode Number: </td><td><input type="text" name="eps_num" size="50" value="<? echo "$eps_num";?>"></td> 
</tr> 
<tr> 
<td>Temp Episode Number: </td><td><input type="text" name="temp_eps_num" size="50" value="<? echo "$temp_eps_num";?>"></td> 
</tr> 
<tr> 
<td>Title: </td><td><input type="text" name="title" size="50" value="<? echo "$title";?>"></td> 
</tr> 
<tr> 
<td>Description: </td><td><textarea type="text" name="descrip" cols="50" rows="7" value="<? echo "$descrip";?>"></textarea></td> 
</tr> 
<tr> 
<td colspan="2"> 
<input type="Submit" value="Update"> 
</td> 
</tr> 
</table></form> 
<div class="Down10px"></div> 
<div><h1 class="pageTitle">Episode List NEW</h1></div> 
<form action="include/epslist.new.php" method="POST"> 
<table> 
<tr> 
<td>Season Number: </td><td><input type="text" name="season_sum" size="50" value="<? echo "$season_num";?>"></td> 
</tr> 
<tr> 
<td>Episode Number: </td><td><input type="text" name="eps_num" size="50" value="<? echo "$eps_num";?>"></td> 
</tr> 
<tr> 
<td>Temp Episode Number: </td><td><input type="text" name="temp_eps_num" size="50"></td> 
</tr> 
<tr> 
<td>Title: </td><td><input type="text" name="title" size="50"></td> 
</tr> 
<tr> 
<td>Description: </td><td><textarea type="text" name="descrip" cols="50" rows="7"></textarea></td> 
</tr> 
<tr> 
<td colspan="2"> 
<input type="Submit" value="New Item"> 
</td> 
</tr> 
</table></form> 

epslist.update.php

<?php 
require "episodelist.db.php"; 

//Test for user inout 
if (!empty($_GET[season_sum])&& 
    !empty($_GET[eps_num])&& 
    !empty($_GET[temp_eps_num])&& 
    !empty($_GET[title])&& 
    !empty($_GET[descrip])) 

    { 
// Im at a lost how to pull in the data just for test.html&=edit(#), check if a user changed it, then if so update that value in the database 

    // Trying to redirect the user back to the list once the update is finished 
     header("Location:"); 
?> 

epslist.new.php MISE À JOUR

<?php 
require "episodelist.db.php"; 

//Test for user inout 
if (!empty($_POST[season_sum])&& 
    !empty($_POST[eps_num])&& 
    !empty($_POST[temp_eps_num])&& 
    !empty($_POST[title])&& 
    !empty($_POST[descrip])) 

    { 
     $season_sum = mysqlclean($_POST,"season_sum",$link); 
     $eps_num = mysqlclean($_POST,"eps_num",$link); 
     $temp_eps_num = mysqlclean($_POST,"temp_eps_num",$link); 
     $title = mysqlclean($_POST,"title",$link); 
     //This is a text area cols 50 rows 7 
     $descrip = mysqlclean($_POST,"descrip",$link); 
     $ID = mysqlclean($_POST,"id",$link); 
    } 

    if (! empty($_POST['ID'])) 
    $id = (int)$_POST['ID']; 
    else $id = 'NULL'; 

    //Insert new entry 
    $query = "INSERT INTO `season` (`ID`, `season_num`, `temp_eps_num`, `esp_num`, `title`, `descrip`) VALUES ({$id}, '{$season_sum}', '{$eps_num}', '{$temp_eps_num}', '{$title}', '{$descrip}')"; 

    // Trying to rederect the user back to the list once the update is successfully finished 
     header("Location: episodelist_superadmin.html"); 
?> 
+0

Veuillez faire en sorte que le titre de votre question décrive la question plutôt que de simplement lister les technologies. –

Répondre

2

Je ne comprends pas bien votre question, mais Je pense que ce que vous demandez est une modification à

$query="SELECT * FROM `season` WHERE 1"; 

qui devrait être quelque chose comme

$query="SELECT * FROM `season` WHERE `id` = $id"; 
+0

mal donner un coup de feu, en tirant l'information actuelle dans le formulaire est la première partie de la question. Voyons si cela résout le premier problème :) –

+0

Ok, je suppose que mon premier problème est de passer la valeur de l'ID dans le lien sur la page de formulaire. donc 'admin.html & = ID {$ row ['id']} \"> Editer
";' va à admin.html & = ID1. Sur la page de formulaire, je dois extraire les informations de la base de données qui correspondent à ID1 hors de la chaîne d'URL. À moins qu'il y ait une autre façon de dire au formulaire quelles informations de base de données tirer en fonction du lien sur lequel un utilisateur a cliqué dans la liste sur la page d'administration? –

+0

vous avez besoin de lire sur les formulaires HTML et en utilisant GET et POST. Je me sens bien, je vais vous montrer du doigt. Vous avez besoin que votre lien ressemble à admin.html? ID = $ row ['id'] et vous pouvez alors faire $ _GET ['ID'] dans la requête. – Josh

0

Je ne pouvais pas comprendre votre question, voulez-vous montrer un lien, et lorsque le lien est cliqué sur une nouvelle émission avec des informations relatives à ce lien id, et après l'avoir édité vous voulez l'enregistrer dans la base de données contre cet id?

Si vous voulez cela mettre une réponse, je vais vous donner un code pour résoudre votre problème.

+0

Le lien est affiché à côté des informations extraites de ma base de données. Lorsqu'un utilisateur clique sur le lien pour (exemple) élément 4, il est redirigé vers une page de formulaire avec toutes les informations de l'élément 4 renseignées dans les champs de formulaire corrects. Il met alors à jour quelque chose (exemple) le prix. Hits mise à jour, puis renvoie à la liste de tous les éléments où il affiche le nouveau prix pour l'article 4. –

0

Une chose que je remarqué ...

$query="SELECT * FROM `season` WHERE 1"; 
$result = mysql_query("SELECT * FROM season"); 
$num=mysql_numrows($result); 

Vous n'êtes pas réellement utiliser la variable de requête $ partout dans le code (page d'administration). En supposant que vous définissez $ query comme indiqué Josh, vous voudriez que ça ressemble à ceci:

$id = mysql_real_escape_string($id); 
$query="SELECT * FROM `season` WHERE `id` = $id"; 
$result = mysql_query($query); 
$num=mysql_numrows($result); 
+0

À droite, mon problème est, tirant l'ID de la chaîne URL, puis aller à la base de données et remplir tout le champ de formulaire avec le contenu correct basé sur cet ID. (Exemple) si je vais à admin.html? P = ID4 le formulaire devrait être plein de toutes les informations de la base de données sous ID4. De cette façon, l'utilisateur peut mettre à jour les informations et les renvoyer à la base de données. –

1

En dehors de ce que tout le monde a déjà mentionné, vous envoyez vos données method = « POST » mais votre page de mise à jour ne s'exécute que si les valeurs actuelles sont GET. Commencez par remplacer $ _GET par $ _POST.

Il y a beaucoup de choses qui manquent dans votre code. Ma suggestion honnête est d'en lire plus ou de commencer par essayer des tâches plus simples. À ce stade, vous obtiendrez quelque chose de plus fait par nous alors si vous tapez PHP comment tout devrait ressembler.

Edit:

Une solution vraiment bien que vous pouvez faire est de réutiliser epslist.new.php pour la mise à jour:

if (! empty($_POST['ID'])) 
    $id = (int)$_POST['ID']; 
else $id = 'NULL'; 

$query = "INSERT INTO `season` (`ID`, `season_num`, `temp_eps_num`, `esp_num`, `title`, `descrip`) VALUES ({$id}, '{$season_sum}', '{$eps_num}', '{$temp_eps_num}', '{$title}', '{$descrip}') ON DUPLICATE KEY UPDATE season_num = VALUES(season_num), temp_eps_num = VALUES(temp_eps_num), esp_num = VALUES(esp_num), title = VALUES(title), descrip = VALUES(descrip)"; 

Et ajoutez une entrée cachée qui envoie l'ID si vous avez un (mise à jour de la page).

En savoir plus ici ON DUPLICATE KEY UPDATE

2ème édition:

Maintenant, nous plongeons profondément dans mysql ici:

$query = " 
INSERT INTO season (ID, season_num, temp_eps_num, esp_num, title, descrip) 
SELECT * 
FROM (SELECT {$id}, '{$season_sum}', '{$eps_num}', '{$temp_eps_num}', '{$title}', '{$descrip}') AS h 
HAVING (SELECT COUNT(*) FROM season WHERE ID = {$id}) OR {$id} IS NULL 
ON DUPLICATE KEY UPDATE season_num = VALUES(season_num), temp_eps_num = VALUES(temp_eps_num), esp_num = VALUES(esp_num), title = VALUES(title), descrip = VALUES(descrip) 
"; 

Je pense cela fonctionne ...: P Désolé pour peut-être vous dérouter.

+0

J'espérais ne pas être aussi loin de la cible que je le pensais. Cela semble dans ma tête comme une simple tâche :) –

+0

J'ai cependant changé de $ _GET à $ _POST –

+0

Mon code new.php ne veut toujours pas fonctionner ... –

Questions connexes