2009-05-14 13 views
0

Ceci est mon code pour mettre à jour une table. Mon problème est qu'après avoir soumis un nouvel enregistrement, je suis incapable de mettre à jour la première fois (il apparaît vide), mais la deuxième fois, cela fonctionne très bien.mise à jour de la table via php mysql

Encore une chose: lorsque je supprime l'instruction include, cela fonctionne correctement sur submessage.php, il n'y a pas de phpcode. [annakata: Je ne sais pas ce que cela signifie]

$pid = $_GET['id']; 
$title = $_POST['title']; 
$summary = $_POST['summary']; 
$content = $_POST['content']; 
$catid = $_POST['cid']; 
$author = $_POST['author']; 
$keyword = $_POST['keyword']; 
$result1= mysql_query("update listing set catid='$catid',title='$title', 
summary='$summary',content='$content', author='$author', keyword='$keyword' where pid='$pid'",$db); 
    include("submessage.php"); 
+0

Je pense que vous avez oublié d'ajouter votre code. – NinethSense

+0

Et maintenant s'il vous plaît formater votre code :-) – foraidt

+0

Je pense que cela ne devrait pas être wiki communautaire;) –

Répondre

1

Les choses qui sont mal avec ce morceau de code sont difficiles à énumérer. Cependant, à tout le moins, vous devriez establish a connection to the database avant de pouvoir l'interroger.

+0

j'ai déjà inclus la base de données –

0

Outre les avertissements habituels de l'injection SQL - très probablement étant donné votre code et d'où vous obtenez les paramètres de requête (sans aucune validation) - il est fort possible que votre problème n'ait rien à voir avec les requêtes, en particulier si cela fonctionne sur des tentatives ultérieures. Êtes-vous sûr que $ _GET ['id'] est défini la première fois que vous appelez le script?

Juste à noter, il n'y a absolument aucune raison d'avoir à effectuer plusieurs requêtes de mise à jour pour chaque champ que vous devez mettre à jour - il suffit de les combiner en une seule requête.

+0

merci, mais le problème n'est pas résolu –

+0

sans inclure submessage il fonctionne très bien, mais quand j'inclus submessage il ne fonctionne pas pour le premier mettre à jour –

1

Pourquoi ne pas simplement rediriger vers submessage.php plutôt que de l'intégrer? La redirection empêche également les opérations db dupliquées lorsque l'utilisateur actualise la page. Il suffit de remplacer include déclaration avec:

header('Location: submessage.php?id=' . $pid); 
die(); 

Aussi, avant de déployer votre application: NE JAMAIS PORTER ENTREE UTILISATEUR DIRECTEMENT SQL QUERY. Vous devriez utiliser des paramètres liés à la place. Sinon, vous pouvez tout aussi bien publiciser votre mot de passe d'administrateur de base de données. En savoir plus sur AOP et des déclarations préparées à http://ie.php.net/pdo

Voici comment je le ferais:

$pdo = new PDO(....); // some configuration parameters needed 
$sql = " 
    UPDATE listing SET 
     catid=:catid, title=:title, summary=:summary, 
     content=:content, author=:author, keyword=:keyword 
    WHERE pid=:pid 
"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindValue('catid', $_POST['catid']); 
$stmt->bindValue('title', $_POST['title']); 
$stmt->bindValue('summary', $_POST['summary']); 
$stmt->bindValue('content', $_POST['content']); 
$stmt->bindValue('author', $_POST['author']); 
$stmt->bindValue('keyword', $_POST['keyword']); 
$stmt->bindValue('pid', $pid = $_GET['id']); 
$stmt->execute(); 

header('Location: submessage.php?id=' . $pid); 
die(); 

Ou en fait, j'utiliser une solution ORM pour le rendre plus comme ça:

$listing = Listing::getById($pid = $_GET['id']); 
$listing->populate($_POST); 
$listing->save(); 

header('Location: submessage.php?id=' . $pid); 
die(); 
Questions connexes