Chercher MYSQL ligne par id et de modifier et de mettre à jour dans le formulaire?
J'ai une table MYSQL avec lien modifier et supprimer bouton sur chaque ligne. Le lien modifier en va edit_movie.php qui a une forme. Mon problème est que le formulaire ne s'affiche pas toutes les données pour être mis à jour/modifiés. Comment puis-je récupérer l'id de la ligne cliqué sur ou quelle fonction à écrire pour le ramasser. La forme est tout simplement vide, pas de champs sont remplis.
Quelqu'un pourrait-il aider l'Id d'être très heureux! Été assis avec ce problème depuis 3 jours maintenant et juste ne peux pas le faire fonctionner. Je suis un PHP débutant...
Je sais que je suis en utilisant les fonctions de mysql qui sont obsolètes et j'ai besoin de lookover injection SQL que je vais une fois que je reçois ce travail.
Table info:
Tableau 1 nom: Films
Champs: id (clé primaire, AI), titre, release_year, genre_id, directeur
Tableau 2 nom: Catégories
Champs: genre_id (clé primaire, AI), genre
Ils ont une étrangère relation entre genre_id.
Voici le code dans index.php fichier
<?php
require('movie.inc.php');
if ( isset($_GET['delete']) && isset($_GET['id']) ){
if ( delete_movie_by_id($_GET['id']) ){ //it's 100% safe
die('Movie has been removed. Refresh the page now'); //or the like
} else {
echo 'Sorry movie could not be deleted'; //could not - handle here
}
}
include 'add_movie.php';
?>
<!DOCTYPE html>
<html>
<head>
<title>My movie library</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="mall.css" />
</head>
<body>
<table>
<tr>
<th>Title</th>
<th>Release year</th>
<th>Genre</th><th>Director</th>
<th>Update</th>
<th>Delete</th>
</tr>
<?php foreach (get_all_movies() as $index => $row) : ?>
<tr>
<td><?php echo $row['title'];?></td>
<td><?php echo $row['release_year']; ?></td>
<td><?php echo $row['genre'];?></td>
<td><?php echo $row['director'];?></td>
<td><a href='<?php printf('edit_movie.php?edit=%s', $row['id']);?>'>Edit</a></td>
<td>
<form action="index.php" method="GET">
<input type="hidden" name="delete" value="yes" />
<input type="hidden" name="id" value="<?php echo $row['id'];?>" />
<input type="submit" value="Delete" />
</form>
</td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
Ici est la edit_movie.php code:
<?php
require 'connect.inc.php';
require_once('movie.inc.php');
?>
<!DOCTYPE html>
<html>
<head>
<title>My movie library</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="mall.css" />
</head>
<body>
<h1>Edit movie</h1>
<div id="form_column">
<form action="edit_movie.php" method="post">
<input type="hidden" name="id" value="<?php if (isset($row["id"])) ?>" /> <br>
Title:<br> <input type="text" name="title" value="<?php if (isset($row["title"])) { echo $row["title"];} ?>" /> <br>
Release Year:<br> <input type="text" name="release_year" value="<?php if (isset($row["release_year"])) { echo $row["release_year"];} ?>" /> <br>
Director:<br> <input type="text" name="director" value="<?php if (isset($row["director"])) { echo $row["director"];} ?>" /> <br><br>
Select genre:
<br>
<br> <input type="radio" name="genre_id" value="1" checked />Action<br>
<br> <input type="radio" name="genre_id" value="2" />Comedy<br>
<br> <input type="radio" name="genre_id" value="3" />Drama<br>
<br> <input type="radio" name="genre_id" value="4" />Horror<br>
<br> <input type="radio" name="genre_id" value="5" />Romance<br>
<br> <input type="radio" name="genre_id" value="6" />Thriller<br><br>
<input type="submit" value="Update movie" />
</form>
</div>
</body>
</html>
Et voici le movie.inc.php fichier
<?php
require_once('connect.inc.php');
function get_all_movies(){
$query = "SELECT * FROM movies m INNER JOIN categories c ON m.genre_id = c.genre_id";
$result = mysql_query($query);
if ( ! $result ){
return false;
} else {
$return = array();
while ($row = mysql_fetch_assoc($result)){
$return[] = array('director' => $row['director'], 'genre' => $row['genre'], 'release_year' => $row['release_year'], 'title' => $row['title'], 'id' => $row['id']);
}
return $return;
}
}
function delete_movie_by_id($id){
return mysql_unbuffered_query(sprintf("DELETE FROM `movies` WHERE id='%s' LIMIT 1", mysql_real_escape_string($id)));
}
if ( isset($_POST['delete'], $_POST['id']) ){
delete_movie_by_id($_POST['id']);
}
?>
- Omg, Après 4 ans, cette question est édité.
Vous devez vous connecter pour publier un commentaire.
Dans
edit_movie.php
il ne semble pas que vous êtes réellement un film passé à la vue de la forme. Vous avez besoin de quelque chose comme cela dans votremovie.inc.php
:Puis dans edit_movie.php vous devez appeler cette fonction. Quelque chose comme...
Bien sûr, comme vous l'avez mentionné, vous avez besoin pour nettoyer une grande partie du code afin de prévenir d'injection et vérifier un scénario où, disons, vous arrivez à
edit_movie.php
et l'ID ro modifier n'existe pas, mais c'est le sens de base.Vous aussi, vous avez ensuite modifier les valeurs dans le formulaire en
edit_movie.php
pour refléter le nouveau tableau, par exemple:Mis à jour
Pour le genre de boutons radio...
$return = ...
au lieu de$return[] = ...
if($movie['genre'] == 'Action')
ou ce que vous genres ne le sont réellement. Je dirais une réponse à votre question et que vous avez assez de comprendre le reste avec des expérimentations.