dou47732 2019-02-18 10:47
浏览 19
已采纳

是否可以在两个varchar值之间执行

Kund = customer We know that we lack in security in our code but so far that is not the problem and this code will not go on to an public website.

This code sorts out values from an database and puts them in a table. We need to sort the customer S001 and everything between to S176 in a checkbox but we cant get BETWEEN to work with Varchar.

 <!doctype html>
<html>
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<link rel="stylesheet" href="css.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">

</head>
<body>

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "garp";

$conn = new mysqli ($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

/*                                                                                                                                      $query = $_GET['query']; */
$orderkund = $_GET['Orderkundinput']; 
$artikel = $_GET['Artikelinput']; 
$startDate =$_GET['startDate']; 
$endDate =$_GET['endDate'] ;
$kund =$_GET['kund'];
$kund2 =$_GET['kund2'];
$kunds;

$min_length = 0;
$artikelQuery="";
$orderkundQuery="";
$kundQuery="";
$kund2Query="";
$kundsQuery;
if(strlen($artikel) >= $min_length){ 
    $artikel = htmlspecialchars($artikel); 

    $artikel = mysqli_real_escape_string($conn, $artikel);
    $artikelQuery = " AND Artikelnr = '$artikel'";
}

if (strlen($orderkund) >= $min_length){ 
    $orderkund = htmlspecialchars($orderkund); 

    $orderkund = mysqli_real_escape_string($conn, $orderkund);
    $orderkundQuery = " AND OrderKund = '$orderkund'";
}
if(strlen($kund) >= $min_length){ 
    $kund = htmlspecialchars($kund); 

    $kund = mysqli_real_escape_string($conn, $kund);
    $kundQuery = " OR OrderKund = '$kund'";
}
if(strlen($kund2) >= $min_length){ 
    $kund2 = htmlspecialchars($kund2); 

    $kund2 = mysqli_real_escape_string($conn, $kund2);
    $kund2Query = " OR OrderKund = '$kund2'";
}
if(strlen($kunds) >= $min_length){ 
    $kunds = htmlspecialchars($kunds); 

    $kunds = mysqli_real_escape_string($conn, $kunds);
    $kundsQuery = " between 'S176'";
}
if (strlen($startDate) >= $min_length){ 
    $startDate = htmlspecialchars($startDate); 

    $startDate = mysqli_real_escape_string($conn, $startDate);
    $startDateQuery = " AND Orderdatum between '$startDate' ";
}

if (strlen($endDate) >= $min_length){ 
    $endDate = htmlspecialchars($endDate); 

    $endDate = mysqli_real_escape_string($conn, $endDate);
    $endDateQuery = "AND '$endDate'";
}

$query = $artikelQuery.$orderkundQuery.$kundQuery.$kund2Query.$kundsQuery.$startDateQuery.$endDateQuery;
if(strlen($query) >= $min_length){ 
$sql = "SELECT OrderHuvud.Ordernummer ,OrderHuvud.OrderserieIK ,OrderKund ,Fakturakund ,Orderdatum ,Erreferens ,Levereratvarde ,Radnummer ,Artikelnr ,Benamning ,Leveranstid ,Ursprungligtantal ,Levereratantal ,Forspris ,Bruttopris ,Varukostnad FROM garp.OrderHuvud left join garp.OrderRad on OrderHuvud.Ordernummer = OrderRad.Ordernummer where  OrderHuvud.OrderserieIK = 'K'" .$query ;
echo $sql;
$raw_results = $conn->query ($sql);
    $row_cnt = false === $raw_results ? 0 : $raw_results->num_rows;
        echo " <p class='rows'> Numbers of rows loaded: $row_cnt </p>";
    if($row_cnt > 0){
   while($raw_result = mysqli_fetch_array($raw_results)){
   echo "<table class='table'><thead class='thead-light'><tr><th class='col'>".'Ordernummer'."</th><th class='col'>".'OrderserieIK'."</th><th class='col'>".'Orderkund'."</th><th class='col'>".'fakturakund'."</th><th class='col'>".'orderdatum'."</th><th class='col'>".'erreferens'."</th><th class='col'>".'leveratvarde'."</th><th class='col'>".'radnummer'."</th><th class='col'>".'artikelnr'."</th><th class='col'>".'benamning'."</th><th class='col'>".'leveranstid'."</th><th class='col'>".'Ursprungligtantal'."</th><th class='col'>".'Levereratantal'."</th><th class='col'>".'forspris'."</th><th class='col'>".'bruttopris'."</th><th class='col'>".'varukostnad'."</th></tr></thead>";
   echo "<tbody><tr><td>".$raw_result['Ordernummer']."</td><td>".$raw_result['OrderserieIK']."</td><td>".$raw_result['OrderKund']."</td><td>".$raw_result['Fakturakund']."</td><td>".$raw_result['Orderdatum']."</td><td>".$raw_result['Erreferens']."</td><td>".$raw_result['Levereratvarde']."</td><td>".$raw_result['Radnummer']."</td><td>".$raw_result['Artikelnr']."</td><td>".$raw_result['Benamning']."</td><td>".$raw_result['Leveranstid']."</td><td>".$raw_result['Ursprungligtantal']."</td><td>".$raw_result['Levereratantal']."</td><td>".$raw_result['Forspris']."</td><td>".$raw_result['Bruttopris']."</td><td>".$raw_result['Varukostnad']."</td></tr></tbody></table>";

   }
    }

    else{
   echo "No return";
    }
}
else{
    echo "Minimum length is ".$min_length;
}
$query = substr($query, 4);
$sql2 = "SELECT OrderKund,Artikelnr, SUM(Forspris) as Forspris,SUM(Levereratantal) as Levereratantal FROM orderhuvud
left JOIN orderrad on orderhuvud.Ordernummer = orderrad.Ordernummer
 where ". $query ." GROUP BY OrderKund,Artikelnr";
$result = mysqli_query($conn, $sql2) or die(mysqli_error($conn));
while($row = mysqli_fetch_array($result)){

    echo "<div class='continer'><table class='table'><thead class='thead-light'><tr><th class='col'>".'OrderKund'."</th><th class='col'>".'Artikelnr'."</th><th class='col'>".'Forspris'."</th><th class='col'>".'levereratantal'."</th></tr></thead></div>";
    echo "<div class='continer'><tbody><tr><td>".$row['OrderKund']."</td><td>".$row['Artikelnr']."</td><td>".$row['Forspris']."</td><td>".$row['Levereratantal']."</td></tr></tbody></table></div>";   
}
    ?>
</body>
</html>
  • 写回答

2条回答 默认 最新

  • dongzheng3113 2019-02-18 11:10
    关注

    I think this part is responsible for not giving the rows you expect.

    OR orderkund = 'S001' BETWEEN 'S176' AND orderdatum BETWEEN '' AND '' 
    

    First of all, I would remove the last part since it's empty strings on each side and it doesn't really do anything.

    orderdatum BETWEEN '' AND '' 
    

    I have never used the between function before, but from what I see it seems like you shouldn't have the equal comparison before the between. I would also suggest to wrap the specific between condition within parantheses so we're sure the conditions aren't mixed with eachother, so the end-result should look something like this:

    OR (orderkund BETWEEN 'S001' AND 'S176') AND (orderdatum BETWEEN '' AND '') 
    

    As mentioned above, I would suggest you to remove the last part if orderdatum value is not available.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog