2016-04-18 8 views
-1

Es ist ein Fehler, während ich "3 + 1 Zimmer" einfügen oder Beschreibung Bereich mit "3 + 1 Zimmer" in MySQL-Datenbank aktualisieren.PHP-Fehler Daten mit Wert einschließlich Additionszeichen (+) zur Datenbank einfügen

ich sah, es gibt keine Pluszeichen "+" in MySQL log (in der Datenbank eingefügten Daten)

UPDATE testtable set status='0',title='3 1 room', 
description='3 1 Daire. 1 Balkon kapalı.' WHERE id='60'; 

create table testtable (id int(11), status tinyint(4), title varchar(20), 
description text) ENGINE=InnoDB DEFAULT CHARSET=utf8 

PHP-Datei

$baglanti=new PDO("mysql:host="localhost";dbname="test";charset=utf8",$us 
ername,$passwd) or die("error"); 
$val=$baglanti->exec("UPDATE testtable set status='0',title='$title', 
    description='$dest' WHERE ad_no='$ad_no' "); 
return $val; 

Was soll ich tun?

EDIT

update.php

<?php 
     include("database.php"); 

     $fields = array(); 
     $values=array(); 
     $fvalue=$_POST['id']; 

     $table=$_POST['table']; 
     foreach ($_POST as $key => $value) { 

       if($key!='table' && $key!='id' && $key!='alan'){ 
         if(strpos($key,"date")){ 
           $datet=new DateTime($value); 
           $value=$datet->format('Y-m-d'); 
         } 
         array_push($fields,$key); 
         array_push($values,$value); 
       } 
     } 
     $alan=$_POST['alan']; 

$ID=Updt($table,$fields,$values,$alan,$fvalue); 

     if($ID!=0){ 

       echo $ID; 
     } 
?> 

database.php

<?php 
    $baglanti=new PDO("mysql:host="localhost";dbname="test";charset=utf8",$us 
ername,$passwd) or die("error"); 
#UPDATE 
function Updt($table,$set,$value,$field,$fvalue){ 
     $bag=$GLOBALS['baglanti']; 
     $sts=''; 
     if(is_array($set)){ 
       for ($i=0; $i < count($set); $i++) { 
         $sts.=$set[$i]."='".$value[$i]."',"; 
       } 
       $sts=rtrim($sts,","); 
     }else{ 
       $sts=$set."='".$value."'"; 
     } 
     $val=$bag->exec("UPDATE $table set $sts WHERE $field='$fvalue'"); 

     return $val; 
} 

?> 

dieses, schrieb Programmierer Code. Ich versuche, Teile aus dem gesamten Code zu nehmen. Es gab viele Codes in der Datei.

+0

Woher kommen all diese Variablen ?? – RiggsFolly

+0

Hat Ihr 'pdo new ......' wirklich einen Zeilenumbruch in der Mitte der Variable '$ username'? – RiggsFolly

+0

Siehst du die Meldung 'error' auf dem Bildschirm oder im mysql-Fehlerprotokoll – RiggsFolly

Antwort

0

Meine Vermutung ist, dass Sie nicht die Abfrage generieren, die Sie denken, dass Sie sind.

Dies sollte Ihnen ermöglichen, die Abfrage zu sehen.

Ich habe auch einige Fehlerprüfung hinzugefügt, die wirklich in diesem Code verwendet werden sollte.

Ich habe die Verbindungslinie geändert, da ich sicher bin, dass ein Newline in der Mitte der $username Variable einen Fehler verursacht.

database.php

<?php 
    try { 
     $baglanti = new PDO("mysql:host=localhost;dbname=test;charset=utf8", 
          $username,$passwd); 
    } catch (PDOException $e) { 
     echo 'Connection failed: ' . $e->getMessage(); 
     exit; 
    } 

#UPDATE 
function Updt($table,$set,$value,$field,$fvalue){ 
    $bag = $GLOBALS['baglanti']; 
    $sts=''; 
    if(is_array($set)){ 
     for ($i=0; $i < count($set); $i++) { 
      $sts.=$set[$i]."='".$value[$i]."',"; 
     } 
     $sts=rtrim($sts,","); 
    }else{ 
     $sts=$set."='".$value."'"; 
    } 

    $sql = "UPDATE $table set $sts WHERE $field='$fvalue'"; 
    echo $sql;  // you can comment this line out when you are sure the SQL is good 

    $val = $bag->exec($sql); 

    return $val; 
} 
?> 

update.php

Kleine Änderung hier nur damit Sie wissen, was ist aus der Funktion zurück tatsächlich wird, eine Zählung und nicht eine ID Reihe. Es könnte auch FALSE sein, was auf einen Fehler in der Updt()-Funktion in der Abfrage hinweist.

<?php 
    include("database.php"); 

    $fields = array(); 
    $values=array(); 
    $fvalue=$_POST['id']; 

    $table=$_POST['table']; 
    foreach ($_POST as $key => $value) { 

      if($key!='table' && $key!='id' && $key!='alan'){ 
        if(strpos($key,"date")){ 
          $datet=new DateTime($value); 
          $value=$datet->format('Y-m-d'); 
        } 
        array_push($fields,$key); 
        array_push($values,$value); 
      } 
    } 
    $alan=$_POST['alan']; 

    //$ID=Updt($table,$fields,$values,$alan,$fvalue); 
    // this is not an ID it is a coumt of the number or rows 
    // updated by the Updt() function 

    $cnt = Updt($table,$fields,$values,$alan,$fvalue); 

    if ($cnt === FALSE) { 
     // then we had an error in Updt() 
     print_r($baglanti->errorInfo(), true); 
     exit; 
    } 

    if($cnt != 0){ 
     echo 'Rows updated = ' . $cnt; 
    } 
?> 

Ich habe zu erwähnen, wie andere, wenn ich nicht. Ihr Code ist offen für SQL Injection Sie sollten wirklich vorbereitete Anweisungen verwenden. Vielleicht solltest du das den Programmierern sagen, die du erwähnt hast. Vielleicht solltest du auch nicht davon ausgehen, dass alles, was sie geschrieben haben, richtig gemacht wurde.