Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--doc/setup.rst14
-rw-r--r--libraries/classes/InsertEdit.php5
-rw-r--r--libraries/classes/Sql.php2
-rw-r--r--psalm-baseline.xml19
-rw-r--r--test/classes/InsertEditTest.php120
6 files changed, 143 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 710fd208b4..32824cfe62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -26,6 +26,7 @@ phpMyAdmin - ChangeLog
- issue #17388 Find and Replace using regex now makes a valid query if no matching result set found
- issue #17551 Enum/Set editor will not fail to open when creating a new column
- issue #17659 Fix error when a database group is named tables, views, functions, procedures or events
+- issue #17673 Allow empty values to be inserted into columns
5.2.0 (2022-05-10)
- issue #16521 Upgrade Bootstrap to version 5
diff --git a/doc/setup.rst b/doc/setup.rst
index 736592ea3e..c2b7b78928 100644
--- a/doc/setup.rst
+++ b/doc/setup.rst
@@ -88,7 +88,7 @@ Installing from Git
In order to install from Git, you'll need a few supporting applications:
-* `Git <https://git-scm.com/downloads>`_ to download the source, or you can download the most recent source directly from `Github <https://codeload.github.com/phpmyadmin/phpmyadmin/zip/master>`_
+* `Git <https://git-scm.com/downloads>`_ to download the source, or you can download the most recent source directly from `Github <https://codeload.github.com/phpmyadmin/phpmyadmin/zip/QA_5_2>`_
* `Composer <https://getcomposer.org/download/>`__
* `Node.js <https://nodejs.org/en/download/>`_ (version 10 or higher)
* `Yarn <https://classic.yarnpkg.com/en/docs/install>`_
@@ -394,37 +394,37 @@ To connect phpMyAdmin to a given server use:
.. code-block:: sh
- docker run --name myadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin/phpmyadmin
+ docker run --name phpmyadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin:latest
To connect phpMyAdmin to more servers use:
.. code-block:: sh
- docker run --name myadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin/phpmyadmin
+ docker run --name phpmyadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin:latest
To use arbitrary server option:
.. code-block:: sh
- docker run --name myadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin/phpmyadmin
+ docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin:latest
You can also link the database container using Docker:
.. code-block:: sh
- docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin/phpmyadmin
+ docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin:latest
Running with additional configuration:
.. code-block:: sh
- docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php phpmyadmin/phpmyadmin
+ docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php phpmyadmin:latest
Running with additional themes:
.. code-block:: sh
- docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /custom/phpmyadmin/theme/:/www/themes/theme/ phpmyadmin/phpmyadmin
+ docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/custom/phpmyadmin/themeName/:/var/www/html/themes/themeName/ phpmyadmin:latest
Using docker-compose
--------------------
diff --git a/libraries/classes/InsertEdit.php b/libraries/classes/InsertEdit.php
index 97b46419f2..26b16c1856 100644
--- a/libraries/classes/InsertEdit.php
+++ b/libraries/classes/InsertEdit.php
@@ -1664,9 +1664,8 @@ class InsertEdit
} elseif (
! (empty($multiEditFuncs[$key])
&& isset($multiEditColumnsPrev[$key])
- && (($currentValue === "'" . $this->dbi->escapeString($multiEditColumnsPrev[$key]) . "'")
- || ($currentValue === '0x' . $multiEditColumnsPrev[$key])))
- && $currentValue
+ && $currentValue === $multiEditColumnsPrev[$key])
+ && $currentValueAsAnArray !== ''
) {
// avoid setting a field to NULL when it's already NULL
// (field had the null checkbox before the update
diff --git a/libraries/classes/Sql.php b/libraries/classes/Sql.php
index 6e1cd870df..faacb9be32 100644
--- a/libraries/classes/Sql.php
+++ b/libraries/classes/Sql.php
@@ -1431,7 +1431,7 @@ class Sql
}
}
- $hasUnique = $table && $this->resultSetContainsUniqueKey($db, $table, $fieldsMeta);
+ $hasUnique = $table !== null && $this->resultSetContainsUniqueKey($db, $table, $fieldsMeta);
$editable = ($hasUnique
|| $GLOBALS['cfg']['RowActionLinksWithoutUnique']
diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index a3e526e3b7..4f43b4f72a 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -3658,13 +3658,16 @@
<InvalidArgument occurrences="1">
<code>$insertErrors</code>
</InvalidArgument>
- <MixedArgument occurrences="28">
+ <MixedArgument occurrences="31">
<code>$_POST['db']</code>
<code>$_POST['rel_fields_list']</code>
<code>$_POST['table']</code>
<code>$_POST['transform_fields_list']</code>
<code>$column_name</code>
<code>$column_name</code>
+ <code>$current_value</code>
+ <code>$current_value</code>
+ <code>$current_value</code>
<code>$errorMessages</code>
<code>$extra_data</code>
<code>$lastMessages</code>
@@ -3710,7 +3713,7 @@
<MixedArrayOffset occurrences="1">
<code>$mimeMap[$column_name]</code>
</MixedArrayOffset>
- <MixedAssignment occurrences="31">
+ <MixedAssignment occurrences="32">
<code>$GLOBALS['active_page']</code>
<code>$GLOBALS['cfg']['InsertRows']</code>
<code>$GLOBALS['disp_message']</code>
@@ -3726,6 +3729,7 @@
<code>$column_name</code>
<code>$column_name</code>
<code>$curr_rel_field</code>
+ <code>$current_value</code>
<code>$extra_data['row_count']</code>
<code>$insertRows</code>
<code>$multi_edit_auto_increment</code>
@@ -3751,9 +3755,12 @@
<code>$where_clause</code>
<code>$where_clause</code>
</MixedOperand>
- <PossiblyNullArgument occurrences="8">
+ <PossiblyNullArgument occurrences="11">
<code>$GLOBALS['urlParams']</code>
<code>$GLOBALS['urlParams']</code>
+ <code>$current_value</code>
+ <code>$current_value</code>
+ <code>$current_value</code>
<code>$multi_edit_columns_null</code>
<code>$multi_edit_columns_null</code>
<code>$multi_edit_columns_null_prev</code>
@@ -7903,7 +7910,7 @@
</file>
<file src="libraries/classes/InsertEdit.php">
<LessSpecificReturnStatement occurrences="1"/>
- <MixedArgument occurrences="77">
+ <MixedArgument occurrences="76">
<code>$_POST['fields']['multi_edit']</code>
<code>$backupField</code>
<code>$columnMime['input_transformation_options']</code>
@@ -7963,7 +7970,6 @@
<code>$multiEditColumnsName[$key]</code>
<code>$multiEditColumnsName[$key]</code>
<code>$multiEditColumnsName[$key]</code>
- <code>$multiEditColumnsPrev[$key]</code>
<code>$protectedRow[$multiEditColumnsName[$key]]</code>
<code>$rows[$keyId]</code>
<code>$singleQuery</code>
@@ -8082,12 +8088,11 @@
<code>new $className()</code>
<code>new $className()</code>
</MixedMethodCall>
- <MixedOperand occurrences="5">
+ <MixedOperand occurrences="4">
<code>$_POST['where_clause'][0]</code>
<code>$column['pma_type']</code>
<code>$file</code>
<code>$maxlength</code>
- <code>$multiEditColumnsPrev[$key]</code>
</MixedOperand>
<MixedReturnStatement occurrences="2">
<code>$_POST['err_url']</code>
diff --git a/test/classes/InsertEditTest.php b/test/classes/InsertEditTest.php
index 0d0776ce62..af43d48400 100644
--- a/test/classes/InsertEditTest.php
+++ b/test/classes/InsertEditTest.php
@@ -2097,6 +2097,126 @@ class InsertEditTest extends AbstractTestCase
],
$result
);
+
+ // Test to see if a zero-string is not ignored
+ $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit(
+ $multi_edit_columns_name,
+ [],
+ '0',
+ [],
+ [],
+ false,
+ [],
+ [],
+ "'0'",
+ [],
+ '0',
+ []
+ );
+
+ $this->assertEquals(
+ [
+ ["`fld` = '0'"],
+ [],
+ ],
+ $result
+ );
+
+ // Can only happen when table contains blob field that was left unchanged during edit
+ $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit(
+ $multi_edit_columns_name,
+ [],
+ '',
+ [],
+ [],
+ false,
+ [],
+ [],
+ '',
+ [],
+ '0',
+ []
+ );
+
+ $this->assertEquals(
+ [
+ [],
+ [],
+ ],
+ $result
+ );
+
+ // Test to see if a field will be set to null when it wasn't null previously
+ $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit(
+ $multi_edit_columns_name,
+ ['on'],
+ '',
+ [],
+ [],
+ false,
+ [],
+ [],
+ 'NULL',
+ [],
+ '0',
+ []
+ );
+
+ $this->assertEquals(
+ [
+ ['`fld` = NULL'],
+ [],
+ ],
+ $result
+ );
+
+ // Test to see if a field will be ignored if it was null previously
+ $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit(
+ $multi_edit_columns_name,
+ ['on'],
+ '',
+ [],
+ [],
+ false,
+ [],
+ [],
+ 'NULL',
+ [],
+ '0',
+ ['on']
+ );
+
+ $this->assertEquals(
+ [
+ [],
+ [],
+ ],
+ $result
+ );
+
+ // Test to see if a field will be ignored if it the value is unchanged
+ $result = $this->insertEdit->getQueryValuesForInsertAndUpdateInMultipleEdit(
+ $multi_edit_columns_name,
+ [],
+ "a'b",
+ ["a'b"],
+ [],
+ false,
+ [],
+ [],
+ "'a\'b'",
+ [],
+ '0',
+ []
+ );
+
+ $this->assertEquals(
+ [
+ [],
+ [],
+ ],
+ $result
+ );
}
/**