Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 空格和特殊字符更新查询不起作用,带有50个输入字段的html表单47为int无问题,3为文本/字符串问题_Php_Html_Mysql - Fatal编程技术网

Php 空格和特殊字符更新查询不起作用,带有50个输入字段的html表单47为int无问题,3为文本/字符串问题

Php 空格和特殊字符更新查询不起作用,带有50个输入字段的html表单47为int无问题,3为文本/字符串问题,php,html,mysql,Php,Html,Mysql,运行MySQL版本5.5.22以下是我的代码、问题和尝试的解决方案。 我真的很困惑在哪里以及如何为3个字符串字段转义空格和特殊字符。我有很多年的编程经验,但只使用PHP一个月,我知道我需要从最近的搜索中习惯PDO。。我想让它在没有PDO的情况下工作(重新开始)。那是下一个项目的 表单是这样的,它有50个字段,除了3个包含“comments”的字符串之外都是int 如果我删除了字符串字段,一切正常,因此我在空格和特殊字符方面有问题。我还使用了几乎相同的代码来运行createTable.php,效果

运行MySQL版本5.5.22以下是我的代码、问题和尝试的解决方案。 我真的很困惑在哪里以及如何为3个字符串字段转义空格和特殊字符。我有很多年的编程经验,但只使用PHP一个月,我知道我需要从最近的搜索中习惯PDO。。我想让它在没有PDO的情况下工作(重新开始)。那是下一个项目的

表单是这样的,它有50个字段,除了3个包含“comments”的字符串之外都是int 如果我删除了字符串字段,一切正常,因此我在空格和特殊字符方面有问题。我还使用了几乎相同的代码来运行createTable.php,效果很好。哦,仅供参考,我一点也不担心注射……安全的内部网络

提交页面包含以下内容

这用于使用数据库表中已有的内容自动填充html表单页 //$Comments=“\”.$rows['Comments']。“\”;//它是有效的

非常感谢您的帮助。 这是update.php上的代码。 很多被评论的东西都是我到目前为止尝试过的东西。 "; $ID=$_POST['ID']

//******* put this text on the html page *******************

echo "This is what your update table query string will look like. for record ID=" . $_POST['ID'];
echo "</p>" ;
echo "The ID, pagetitle and Submit have been removed.";
echo "<p><hr>" ;

//********** Prepare the string **************

$query_string = "";
//if not post ie someone got here without post
if ($_POST) {
  $kv = array();
//loop thru submitted field-value keys
  foreach ($_POST as $key => $value) {

// Trim pagetitle and Submit from string
if ($key == 'pagetitle' OR $key == 'Submit' OR $key == 'ID') 
    {   }
  //else {$kv[] = "$key"."="."$value".",";} //format and add to array
  else {$kv[] = "$key"."="."'"."$value"."'".",";} //format and add to array

            } //end of foreach statement
  $query_string = join($kv);
    } //create querystring from array
else {$query_string = $_SERVER['QUERY_STRING']; } //end of if post statement
?>
<?php
    $myqrystring="";
  //$myqrystring = '"UPDATE MyTable SET '.$query_string;
  //$myqrystring = $query_string;
$query_string = rtrim($query_string, ","); // Trim last comma from string
//$myqrystring = "\"" . $query_string . "\"";

//******* put string on the html page for review.***********

// put myqrystring on the html page for review.
//echo $myqrystring;
echo $query_string;
echo "<hr>" ;
echo "<p>" ;

//******* Update DataBase Table **************

$testquery_string="Area=400, PID=400,Comments='Filled by someone@somewhere.com'";
//,Comments=Filled by someone@somewhere.com   htmlspecialchars()  htmlentities()
//urlencode()  $safeHtml = htmlentities($evilHtml, ENT_QUOTES, 'UTF-8');'".$val2."'
//this works ,Comments='Filled by someone@somewhere.com' in $testquery_string
//$testquery_string=rawurlencode($testquery_string);//Does not work
//$testquery_string = htmlentities($testquery_string, ENT_QUOTES, 'UTF-8');//Does not work
$con=mysqli_connect("localhost","root","ireene","IEC");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
//mysqli_query($con,"UPDATE MyTable SET Area=10 WHERE ID= $_POST['ID']");
//mysqli_query($con,'myqrystring');
mysqli_query($con,"UPDATE MyTable SET $testquery_string WHERE ID= $ID");
//$testquery_string works not $query_string $myqrystring
//mysqli_query($con,"UPDATE MyTable SET $query_string WHERE ID= $ID");
mysqli_close($con);
?>
//*******将此文本放在html页面上*******************
echo“这是更新表查询字符串的外观。对于记录ID=“.$”POST['ID'];
回声“

”; echo“ID、页面标题和提交已被删除。”; 回声“
”; //**********准备绳子************** $query_string=“”; //如果没有邮寄(有人没邮寄就到了这里) 如果(美元邮政){ $kv=数组(); //循环通过提交的字段值键 foreach($\发布为$key=>$value){ //修剪页面标题并从字符串提交 如果($key=='pagetitle'或$key=='Submit'或$key=='ID') { } //else{$kv[]=“$key”。”“$value”。”;}//格式化并添加到数组中 else{$kv[]=“$key”。“$value”。”,;}//格式化并添加到数组中 }//foreach语句的结尾 $query\u string=join($kv); }//从数组创建查询字符串 else{$query\u string=$\u SERVER['query\u string'];}//if post语句结束 ?> 试一试


这样转义您的值可能会解决您的问题。

Nazca您的意思似乎是将mysqli_查询($con,“updatemytable SET$testquery_string WHERE ID=$ID”);更改为mysqli_real_escape_string($con,“updatemytable SET$testquery_string WHERE ID=$ID”);替换mysqli_查询正确吗?还是应该在Prepare(build)中查询前的字符串?纳斯卡,我在那里试过了,但没用,$con让我觉得这就是你的意思也许我会试着在表单页面的帖子前为这3个字符串字段添加单引号-50个字段中有3个不会太差,我会在搜索2天后告诉你goesWell是怎么做的…偶然发现了这个,有100个tim吗es,只是不是正确的页面…自动向$\u POST变量添加斜杠。foreach($\u POST as$key=>$input\u arr){$\u POST[$key]=addslashes($input\u arr);}它工作得很好..非常感谢您的帮助。太棒了!对不起,我帮不上忙了=[你应该发布你的答案并接受它,以防有人在这里遇到同样的问题。
mysqli_real_escape_string($con, $string)