2016-04-08 19 views
1

Entschuldigung, wenn es einen anderen Feed mit dem gleichen Problem gibt, habe ich verschiedene vorgeschlagene Lösungen ausprobiert, aber ich bekomme immer noch einen Fehler, und ich kann nicht sehen, warum!sql update nicht ausgeführt

Ich möchte eine Zeile in meiner Tabelle mit einem HTML-Formular aktualisieren. Ich habe die Form mit den vorhandenen Werten gefüllt, und will in der Lage sein, diese zu bearbeiten und aktualisieren, wenn das Formular abgeschickt wird, aber ich bin immer diese Fehlermeldung:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /Applications/XAMPP/xamppfiles/htdocs/love-deals/admin/update_offer.php:46 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/love-deals/admin/update_offer.php(46): PDOStatement->execute(Array) #1 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/love-deals/admin/update_offer.php on line 46

Hier ist die PHP/SQL-Code:

if(isset($_POST['update'])) { 
$updateTitle = trim($_POST['title']); 
$updateDesc = trim($_POST['desc']); 
$updateRedeem = trim($_POST['redeem']); 
$updateStart = trim($_POST['start']); 
$updateExpiry = trim($_POST['expiry']); 
$updateCode = trim($_POST['code']); 
$updateTerms = trim($_POST['terms']); 
$updateImage = trim($_POST['image']); 
$updateUrl = trim($_POST['url']); 

$updateSql = 'UPDATE codes SET (title,description,redemption,start,expiry,textcode,terms,image,url) = (:title,:description,:redeem,:start,:exp,:code,:terms,:image,:url) WHERE id=:offerid'; 
$update = $db->prepare($updateSql); 
$update->execute(array(':title'=>$updateTitle,':description'=>$updateDesc,':redeem'=>$updateRedeem,':start'=>$updateStart,':exp'=>$updateExpiry,':code'=>$updateCode,':terms'=>$updateTerms,':image'=>$updateImage,':url'=>$updateUrl,':id'=>$offerID)); 
} 

und das hTML-Formular:

<form id="update_offer" class="col-md-6 col-md-offset-3" method="post" action="update_offer.php?id=<?php echo $offerID; ?>"> 
     <div class="form-group col-md-12"> 
      <label class="col-md-12" for="title">Title</label> 
      <input id="title" class="form-control col-md-12" type="text" name="title" placeholder="Offer Title" value="<?php echo $title; ?>" required> 
     </div> 
     <div class="form-group col-md-12"> 
      <label class="col-md-12" for="desc">Description</label> 
      <textarea id="desc" class="form-control col-md-12" name="desc" placeholder="Description" value="<?php echo $desc; ?>"></textarea> 
     </div> 
     <div class="form-group col-md-12"> 
      <label class="col-md-12" for="redeem">Redemption</label> 
      <input id="redeem" class="form-control col-md-12" type="text" name="redeem" placeholder="Where to redeem" value="<?php echo $redeem; ?>" required> 
     </div> 
     <div class="form-group col-md-12"> 
      <label class="col-md-12" for="start">Start Date</label> 
      <input id="start" class="form-control col-md-12" type="date" name="start" value="<?php echo $startDate->format('Y-m-d'); ?>" min="<?php echo date('Y-m-d') ?>" max="2021-12-31" required> 
     </div> 
     <div class="form-group col-md-12"> 
      <label class="col-md-12" for="expiry">Expiry Date</label> 
      <input id="expiry" class="form-control col-md-12" type="date" name="expiry" value="<?php echo $expDate->format('Y-m-d'); ?>" min="<?php echo date('Y-m-d') ?>" max="2021-12-31" required> 
     </div> 
     <div class="form-group col-md-12"> 
      <label class="col-md-12" for="code">Code</label> 
      <input id="code" class="form-control col-md-12" type="text" name="code" placeholder="Code (if applicable)" value="<?php echo $code; ?>"> 
     </div> 
     <div class="form-group col-md-12"> 
      <label class="col-md-12" for="terms">Terms</label> 
      <textarea id="terms" class="form-control col-md-12" name="terms" placeholder="Terms & Conditions" value="<?php echo $terms; ?>" required></textarea> 
     </div> 
     <div class="form-group col-md-12"> 
      <label class="col-md-12" for="url">Offer URL</label> 
      <input id="url" class="form-control col-md-12" type="text" name="url" placeholder="Offer URL (if applicable)" value="<?php echo $url; ?>"> 
     </div> 
     <div class="form-group col-md-12"> 
      <label class="col-md-8" for="image">Image <img src="../images/offers/<?php echo $image; ?>" alt="" style="width: 200px;" /></label> 
      <input id="image" class="form-control col-md-4" type="file" name="image"> 
     </div> 
     <div class="form-group col-md-12 pull-right"> 
      <button id="update" type="submit" name="update" class="btn btn-primary"><i class="glyphicon glyphicon-refresh"></i> Update</button> 
     </div> 
    </form> 

, was mache ich falsch ?! Ich lerne immer noch PHP usw., also sei bitte sanft, jede Hilfe wird sehr geschätzt.

+4

Verbringen Sie etwas Zeit, das Handbuch über die UPDATE-Syntax zu lesen http://dev.mysql.com/doc/refman/5.7/en/update.html - Was Sie jetzt haben, ist INSERT-Syntax (bis zu einem gewissen Grad). –

+0

Sie fügen den Parameter "': id' => $ offerID" hinzu, der nicht in der Abfrage enthalten ist ... – Random

+1

Außerdem ist '$ offerID' nicht definiert, je nachdem was gepostet wird. –

Antwort

1

Zuerst müssen Sie falsche Syntax für Update-Anweisung, wie andere Jungs bereits erwähnt, ändern:

UPDATE codes SET (title,description,redemption,start,expiry,textcode,terms,image,url) = (:title,:description,:redeem,:start,:exp,:code,:terms,:image,:url) WHERE id=:offerid 

In

UPDATE `codes` 
    SET `title` = :title, 
     `description` = :description, 
     `redemption` = :redeem, 
     `start` = :start 
     `expiry` = :expiry 
     `textcode` = :code 
     `terms` = :terms 
     `image` = :image 
     `url` = :url 
WHERE `id` = :offerid 

Erfahren Sie mehr über die SQL-Update Syntax here.

Dann haben Sie einen Fehler mehr in execute(). Ändern Sie Ihre :id in :offerid wie unten:

$update->execute(array(
    ':title' => $updateTitle, 
    ':description' => $updateDesc, 
    ':redeem' => $updateRedeem, 
    ':start' => $updateStart, 
    ':exp' => $updateExpiry, 
    ':code' => $updateCode, 
    ':terms' => $updateTerms, 
    ':image' => $updateImage, 
    ':url' => $updateUrl, 
    ':offerid' => $offerID 
)); 
+1

Fehler ja, aber das behebt es nicht. Wenn das, was OP für die UPDATE-Syntax verwendet, hätte ich für heute ein paar neue PDO-Guru-Sachen gelernt. –

+0

@ Fred-ii- Nun, meine Antwort ist streng, ihm zu helfen, Fehler zu lösen, der mit dem fehlenden Parameter mit verbindlichen Daten verbunden ist. Was meinst du damit, es nicht zu reparieren? – Tomasz

+1

Das OP verwendet keine korrekte Syntax für UPDATE. Mein Kommentar zum OP enthält einen Link dafür, ebenso wie Satys Antwort einschließlich der richtigen Syntax. –

1

Sie verwenden falsche Syntax von Update

Es wäre

$updateSql = "UPDATE codes SET title =:title, 
description =:description, 
redemption =:redeem, 
start =:start, 
expiry =:exp, 
textcode =:code, 
terms :=terms,image =:image, 
url =:url 
WHERE id=:id";// write id instead of offset because you are binding ':id'=>$offerID 

prüfen http://dev.mysql.com/doc/refman/5.7/en/update.html

0

Dank für Ihre Antworten. Meine ursprüngliche Aktualisierungssyntax war tatsächlich so, wie du es erwähnt hast, ich hatte sie geändert, als ich andere Lösungen durchgesehen habe, und sie nicht zurück geändert, aber so oder so, selbst mit korrekter Syntax, habe ich immer noch den gleichen Fehler.

Wenn ich durch deine Antworten schaue, kann ich sehen, dass ich ': id' => $ offerID habe aber: offerid im SQL-Code, der offensichtlich aktualisiert werden muss, also danke, dass du darauf hingewiesen hast! Hoffentlich wird das das Problem beheben ...