2017-03-19 17 views
0

この質問をする前に、私は多くの場所(ここを含む)で回答を探しましたが、私は尋ねるには必死です。MySQL/PHP UPDATEクエリが機能しない

个人设定

<?php 
    if($_SERVER['REQUEST_METHOD'] == "POST") 
    { 
     include("lib/functions.php"); 
     mysql_connect("localhost","root","") or die(mysql_error()); //Connect to server 
     mysql_select_db("proyectoinmob") or die("Cannot connect to the selected database"); //Connect to database 
     $nombreCalle = mysql_escape_string($_POST["nombreCalle"]); 
     $numeroCasa = mysql_escape_string($_POST["numeroCasa"]); 
     $precio = mysql_escape_string($_POST["precio"]); 

     $sql = "UPDATE propiedades SET nombreCalle='$nombreCalle', numeroCasa='$numeroCasa', precio='$precio' WHERE id='$id'"; 
     executesql($sql); 
     header("location: index.php"); 
    } 
?> 
<html> 
    <head> 
     <title>Proyecto Inmobiliaria - Editar</title> 
    </head> 
    <body> 
    <h2>Editar Propiedad</h2> 
    <?php 
    if(!empty($_GET["id"])) 
     { 
     $id = $_GET["id"]; 
     $_SESSION["id"] = $id; 
       include("lib/functions.php"); 
     mysql_connect("localhost","root","") or die(mysql_error()); //Connect to server 
     mysql_select_db("proyectoinmob") or die("Cannot connect to the selected database"); //connect to database 
       $sql = "SELECT * FROM propiedades WHERE id='$id'"; 
       $output = executesql($sql); 
     $row = mysql_fetch_array($output); 
     Print "<form class='' action='' method='POST'>"; 
      Print "<div class=''>"; 
      Print "<label>Nombre Calle</label>"; 
      Print "<input type='text' name='nombreCalle' value='".$row["nombreCalle"]."' placeholder='ej: Antonio del Viso'>"; 
      Print "</div>"; 
      Print "<div class=''>"; 
      Print "<label for=''>Número de Casa</label>"; 
      Print "<input type='text' name='numeroCasa' value='".$row["numeroCasa"]."' placeholder='ej: 440'>"; 
      Print "</div>"; 
      Print "<div class=''>"; 
      Print "<label for=''>Precio</label>"; 
      Print "<input type='text' name='precio' value='".$row["precio"]."' placeholder='ej: 150000'>"; 
      Print "</div>"; 
      Print "<button type='submit' name='add'>Guardar</button>"; 
      Print "<a href='index.php' style='display:inline-block;border:2px solid #000;border-radius:25%;padding:10px;margin:10px;'>Regresar</a>"; 
     Print "</form>"; 
     } 
    ?> 
     <br/> 
    </body> 
</html> 

のlib /のfunctions.php

<?php 
    function executesql($sql) { 
    $test = substr($sql,0,6); 
    if($test == "INSERT" || $test == "insert" || $test == "Insert") { 
     return mysql_query($sql); 
    } elseif ($test == "UPDATE" || $test == "update" || $test == "Update") { 
     return mysql_query($sql); 
    } elseif ($test == "SELECT" || $test == "select" || $test == "Select") { 
     return mysql_query($sql); 
    } elseif ($test == "DELETE" || $test == "delete" || $test == "Delete") { 
     return mysql_query($sql); 
    } else { 
     $var = "echo '<script>alert('This is not a valid query')</script>'"; 
    } 
    return $var; 
    } 
?> 

追加するための他のファイルと一緒にこの事(、削除:

私には、以下の持っていますデータを挿入する)はこのの設定では正常に動作しています

  • Apache Webサーバーバージョン2.2.4
  • PHPスクリプト言語のバージョン5.2.3
  • MySQLデータベースのバージョン5.0.45
  • phpMyAdminのデータベースマネージャバージョン2.10.2

今、私は次のものにアップグレードする理由がないと決めました:

  • Apache Webサーバーバージョン2.4.25
  • PHPスクリプト言語のバージョン5.6.30 & 7.1.1
  • MySQLデータベースのバージョン5.7.17
  • phpMyAdminのデータベースマネージャバージョン4.6.6

とブーム! 、UPDATEクエリのみが全く機能していません(他のスクリプト/クエリは完全に正常に動作しています)。

私は何かエラーや警告を見てみましたが、ヘッダ・ステートメントとindex.phpへのリダイレクトがヒットしましたが、UPDATEクエリは実行されませんでした。

私は何かがあった場合のために、5.2.3から5.3.10までのPHPバージョンログの変更を見直しますが、運はありません。

その後、私は上から同じ結果で次の設定を試してみてください。

  • Apache Webサーバーバージョン2.2.22
  • PHPスクリプト言語のバージョン5.3.10
  • MySQLデータベースのバージョン5.5.54
  • phpMyAdminのデータベースマネージャバージョン3.4.10

そして、この:

  • Apache Webサーバーバージョン2.4.25
  • PHPスクリプト言語のバージョン5.6.30
  • MariaDB 10.1.21
  • phpMyAdminのデータベースマネージャバージョン4.6.5。2

私はApache、PMA、PHPはこの問題とは関係がないと思うので、これまでの私の勝者はMySQLです。しかし...

  • 本当の問題は何でしょうか?
  • 質問に何か不足していますか?
  • 私は私のコードで別の何かを試すことができますか?
  • それは本当に私のクエリ構文を好きではないのMySQLで何ですか?

ヘルプ、ライト、ガイド、視力​​など、ここで役立つものは何でも。いつものように

どうもありがとう!

+1

なぜ、 'executeql()'関数を最初に持っているのですか?それは実際に何もしない抽象化の層を追加しています。単一の一貫したMySQL APIを使用してSQLコマンドを実行してください。 – David

+0

@Davidなぜあなたは重複としてマークしますか?クエリをそのまま実行しても、どちらも機能しません。そして、「一貫したMySQL APIを使用する」とはどういう意味ですか?私はこれが古いプロジェクトであることを明確にしています。私の設定をアップグレードする途中で、これが私の懸念事項であることが判明しました。「なぜMySQLバージョンを変更するのがなぜか分かりません」 – markite

+0

これは複製であり、MySQL APIを混在させるためです。 'INSERT'、' SELECT'、および 'DELETE'クエリは' mysql_query() 'を使用するため動作します。 'UPDATE'クエリはmysqli_query()を使用していて(2つのパラメータが必要なので間違って使います)、動作しません。コードには他の*問題もあるかもしれませんが、UPDATEクエリが "うまくいかない"主な理由のようです。異なるバージョンの依存関係をインストールする作業は間違っています.MySQL APIの混在はどのバージョンでも機能しません。 – David

答えて

0

mysql_error()と他のものを試した後、私はになりました(途中で)。

PHP> = 5.3の場合(私がテストしたすべての設定に基づいて)、私はコードの順序を変更して、魅力的に機能しました。

これは个人设定(PHPで動作しませんでした> = 5.3)前に変更した:

<?php 
    if($_SERVER['REQUEST_METHOD'] == "POST") 
    { 
     include("lib/functions.php"); 
     mysql_connect("localhost","root","") or die(mysql_error()); //Connect to server 
     mysql_select_db("proyectoinmob") or die("Cannot connect to the selected database"); //Connect to database 
     $nombreCalle = mysql_escape_string($_POST["nombreCalle"]); 
     $numeroCasa = mysql_escape_string($_POST["numeroCasa"]); 
     $precio = mysql_escape_string($_POST["precio"]); 

     $sql = "UPDATE propiedades SET nombreCalle='$nombreCalle', numeroCasa='$numeroCasa', precio='$precio' WHERE id='$id'"; 
     executesql($sql); 
     header("location: index.php"); 
    } 
?> 
<html> 
    <head> 
     <title>Proyecto Inmobiliaria - Editar</title> 
    </head> 
    <body> 
    <h2>Editar Propiedad</h2> 
    <?php 
    if(!empty($_GET["id"])) 
     { 
     $id = $_GET["id"]; 
     $_SESSION["id"] = $id; 
       include("lib/functions.php"); 
     mysql_connect("localhost","root","") or die(mysql_error()); //Connect to server 
     mysql_select_db("proyectoinmob") or die("Cannot connect to the selected database"); //connect to database 
       $sql = "SELECT * FROM propiedades WHERE id='$id'"; 
       $output = executesql($sql); 
     $row = mysql_fetch_array($output); 
     Print "<form class='' action='' method='POST'>"; 
      Print "<div class=''>"; 
      Print "<label>Nombre Calle</label>"; 
      Print "<input type='text' name='nombreCalle' value='".$row["nombreCalle"]."' placeholder='ej: Antonio del Viso'>"; 
      Print "</div>"; 
      Print "<div class=''>"; 
      Print "<label for=''>Número de Casa</label>"; 
      Print "<input type='text' name='numeroCasa' value='".$row["numeroCasa"]."' placeholder='ej: 440'>"; 
      Print "</div>"; 
      Print "<div class=''>"; 
      Print "<label for=''>Precio</label>"; 
      Print "<input type='text' name='precio' value='".$row["precio"]."' placeholder='ej: 150000'>"; 
      Print "</div>"; 
      Print "<button type='submit' name='add'>Guardar</button>"; 
      Print "<a href='index.php' style='display:inline-block;border:2px solid #000;border-radius:25%;padding:10px;margin:10px;'>Regresar</a>"; 
     Print "</form>"; 
     } 
    ?> 
     <br/> 
    </body> 
</html> 

そして、これが後个人设定です変更:

<html> 
    <head> 
     <title>Proyecto Inmobiliaria - Editar</title> 
    </head> 
    <body> 
    <h2>Editar Propiedad</h2> 
    <?php 
    if(!empty($_GET["id"])) 
     { 
     $id = $_GET["id"]; 
     $_SESSION["id"] = $id; 
       include("lib/functions.php"); 
     mysql_connect("localhost","root","root") or die(mysql_error()); //Connect to server 
     mysql_select_db("proyectoinmob") or die("Cannot connect to the selected database"); //connect to database 
       $sql = "SELECT * FROM propiedades WHERE id='$id'"; 
       $output = executesql($sql); 
     $row = mysql_fetch_array($output); 
     Print "<form class='' action='' method='POST'>"; 
      Print "<div class=''>"; 
      Print "<label>Nombre Calle</label>"; 
      Print "<input type='text' name='nombreCalle' value='".$row["nombreCalle"]."' placeholder='ej: Antonio del Viso'>"; 
      Print "</div>"; 
      Print "<div class=''>"; 
      Print "<label for=''>Número de Casa</label>"; 
      Print "<input type='text' name='numeroCasa' value='".$row["numeroCasa"]."' placeholder='ej: 440'>"; 
      Print "</div>"; 
      Print "<div class=''>"; 
      Print "<label for=''>Precio</label>"; 
      Print "<input type='text' name='precio' value='".$row["precio"]."' placeholder='ej: 150000'>"; 
      Print "</div>"; 
      Print "<button type='SUBMIT' name='add'>Guardar</button>"; 
      Print "<a href='index.php' style='display:inline-block;border:2px solid #000;border-radius:25%;padding:10px;margin:10px;'>Regresar</a>"; 
     Print "</form>"; 
     } 

     if($_SERVER['REQUEST_METHOD'] == 'POST') 
      { 
       mysql_connect("localhost","root","root") or die(mysql_error()); //Connect to server 
       mysql_select_db("proyectoinmob") or die("Cannot connect to the selected database"); //Connect to database 
       $nombreCalle = mysql_escape_string($_POST["nombreCalle"]); 
       $numeroCasa = mysql_escape_string($_POST["numeroCasa"]); 
       $precio = mysql_escape_string($_POST["precio"]); 
       $sql = "UPDATE propiedades SET nombreCalle='$nombreCalle', numeroCasa='$numeroCasa', precio='$precio' WHERE id='$id'"; 
       executesql($sql); 
       header("location: index.php"); 
      } 
    ?> 
     <br/> 
    </body> 
</html> 

しかし、その後、私はPHP < = 5.3(5.2.3)に戻って取得し、それを破ったbecauこの機能はheader()です。元のファイル(クイックフィックス)を使用して修正しました。

私はheader()の問題を取り除くことができるようにスクリプトを修正できることは知っていますが、それは後の話です。

私はこれを「解決策」とは全く考えていませんが、この目的のためには細かいで動作します。心配、私はより深刻なもののため少なくとも mysqliのAPIやPDOに変更しますしません

そして

は旅ありがとうございました!

1

これを解決するための第一歩は、mysqlオブジェクトに送信する正確なUPDATEクエリを出力することです。

私もPHP MySQLiを(新しい)にPHPのMySQLからの切り替えをお勧めします:http://php.net/manual/en/book.mysqli.php

私はこの問題はエコー「クエリ:$クエリ」で解決するだろうどのようにして、MySQLのデータベースエクスプローラにその正確なクエリを貼り付け(MySQL Workbench、Navicat、DataGripなど)。

データベースは、エクスプローラの[クエリの実行]タブでは、エラーがクエリ(可能な構文、廃止予定の何か、など)このことができます

希望とは何かを教えてくれます。

+0

私はこれを試してみます。正直なところ、私はこのことでかなり新しいので、それは私の心にはなかった。おかげで束と私は結果をあなたに戻す:) – markite

関連する問題