尝试过cURLOPt_FOLLOWLOCATION = true以在cURL之后强制使用标头功能,但无济于事

时间:2019-03-11 09:46:23

标签: php curl

我目前正在使用Mac上的MAMP在本地环境中工作,以创建一个表单,用户可以在其中发送食品价格数据。结果存储在mysql数据库中。但是,该数据用于比较挪威和瑞典之间的价格,因此,验证表将使用产品名称并将其翻译为瑞典语,以便将变量与其他用户输入一起提交到数据库中。我使用cURL进行此操作,然后运行标头功能以重定向到显示该项目已被注册的页面。 cURL函数的作用就像一个超级按钮,数据被发送到数据库中,但是它拒绝重定向到通知用户成功注册的页面。因此必须是header(“ Location:”)函数只是拒绝工作。我已经将CURLOPT_FOLLOWLOCATION以及CURLOPT_RETURNTRANSFER设置为true。我想知道是否有人有任何修复。

这是我已经研究过的堆栈溢出问题:

Why the header function is not working after CURL call?

我也查看了文档以获取答案,但是似乎没有很多。因此,要么我犯了一个愚蠢的错误,要么这只是问题的特定细节。

这是注册页面,用户在其中填写有关挪威产品的输入。

<?php include('server.php') ?>
    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Matvare registreringsskjema</title>
        <link rel="stylesheet" type="text/css" href="style.css">
      </head>

      <body>
        <div class="header">
           <h2>Register vare</h2>
        </div>

        <form method="post" action="register.php">

          <?php include('errors.php'); ?>
          <!--index 0-->
          <div class="input-group">
            <label>Produkt</label>
            <input type="text" name="Produkt" value="<?php echo $Produkt; ?>">
          </div>
          <!--index 1-->
          <div class="input-group">
            <label>Pris</label>
            <input type="text" placeholder="xxxkr" name="Egentlig_pris" value="<?php echo $Egentlig_pris; ?>">
          </div>
          <!--index 2-->
          <div class="input-group">
            <label>Pris per kg</label>
            <input type="text"  placeholder="xxxkr" name="Pris_per_kg" value="<?php echo $Pris_per_kg; ?>">
          </div>
          <!--index 3-->
          <div class="input-group">
            <label>Butikkjede</label>
            <input type="text" name="Butikkjede" value="<?php echo $Butikkjede; ?>">
          </div>
          <!--index 4-->
          <!--<div class="input-group">
            <label>Dato</label>
            <input type="date" placeholder="DD/MM/YYYY" name="Dato" value="<?php echo $Dato; ?>">
          </div>-->
          <!--index 5-->
          <div class="input-group">
            <button type="submit" class="btn" name="reg_user">Registrer</button>
          </div>
          <!--Button which guides the user to the price-log page-->
          <button class="btn" onclick="location.href='http://localhost:8888/display.php'" type="button">Prishistorikk</button>

        </form>
      </body>
    </html>

这是发送到的验证页面,该页面位于html页面顶部。抱歉,代码中混用了挪威语和英语,但是需要注意的重要事项是$ txt_for_translator是从register.php中“ Produkt”字段获取输入的变量。最终将其放入变量“ $ oversettelse”(翻译)中。

    <?php
session_start();

// Sets values
$Produkt = "";
$Egentlig_pris = "";
$Pris_per_kg = "";
$Butikkjede = "";
$Dato = date("Y-d-m");
$errors = array();
$txt_for_translator = "";
$oversettelse = "";
$apiKey = 'not tryna let people use my api now that google charges';




// Connect to database
//$db = mysqli_connect('localhost', 'root', '', 'b019-g25');
$db = new mysqli('localhost', 'root', 'root', 'b019-g25');
$db->set_charset("utf8"); 
//$apiKey = 'not tryna let people use my api now that google charges';


//These two lines  included with same line integrated in dsiplay.php with some adjustments will show æøå within the browser page and database.

// Register products
if (isset($_POST['reg_user'])) {
  // Recive all inputs from the form
  $Produkt = mysqli_real_escape_string($db, $_POST['Produkt']);
  $Egentlig_pris = mysqli_real_escape_string($db, $_POST['Egentlig_pris']);
  $Pris_per_kg = mysqli_real_escape_string($db, $_POST['Pris_per_kg']);
  $Butikkjede = mysqli_real_escape_string($db, $_POST['Butikkjede']);
  //$Dato = mysqli_real_escape_string($db, $_POST['Dato']);

  // This section checks if the form is filled in correctly by adding (array_push()) corresponding error unto $errors array
  if (empty($Produkt)) { array_push($errors, "Må fylle inn produkt!"); }
  if (empty($Egentlig_pris)) { array_push($errors, "Må fylle inn egentlig pris!"); }
  if (empty($Pris_per_kg)) { array_push($errors, "Må fylle inn pris per kg!"); }
  if (empty($Butikkjede)) { array_push($errors, "Må fylle inn butikkjede!"); }
  //if (empty($Dato)) { array_push($errors, "Må fylle inn dato!"); }

以上基本上只是从Register.php获取所有输入并检查是否填写了所有内容。然后我检查是否有任何错误(也就是检查是否未填写任何字段)。然后,如果一切正常,我将运行cURL函数并获取翻译结果,并将其放入变量“ $ oversettelse”中

// Register product if there are no errors in the form
  if (count($errors) == 0) {

    $txt_for_translator = mysqli_real_escape_string($db, $_POST['Produkt']);
    $url = 'https://www.googleapis.com/language/translate/v2?key=' . $apiKey . '&q=' . rawurlencode($txt_for_translator) . '&source=no&target=sv';


    $handle = curl_init($url);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($handle, CURLOPT_HEADER, false);
    curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
    $response = curl_exec($handle);                 
    $responseDecoded = json_decode($response, true);
    curl_close($handle);




    $oversettelse = $responseDecoded['data']['translations'][0]['translatedText'];
    echo "<script>console.log('$oversettelse')</script>";

    $query = "INSERT INTO skjema (Produkt, Oversettelse, Egentlig_pris, Pris_per_kg, Butikkjede, Dato)
              VALUES('$Produkt', '$oversettelse', '$Egentlig_pris', '$Pris_per_kg', '$Butikkjede', '$Dato')";
    echo "<script>console.log('Done with inserting the query')</script>";
    mysqli_query($db, $query);
    echo "<script>console.log('Done with mysqli_query')</script>";
    $_SESSION['Produkt'] = $Produkt;
    echo "<script>console.log('Done Session:produkt')</script>";
    $_SESSION['success'] = "Varen er registert";
    echo "<script>console.log('product is registered')</script>";
    header("Location: http://localhost:8888/done.html");
    //exit;
  }
}

?>

然后最后应该重定向到我在下面包含的done.html。我知道从技术上来说,您应该在最后使用退出功能,并且我已对此进行了评论,但似乎并没有什么不同。上一节中对脚本日志的所有回显只是一种检查功能是否已实际完成的方法(可能是一种简单的方法,但这是我惯用的方法)。如果有人对如何解决此问题有任何想法,将不胜感激!否则,有关测试错误的任何技巧也将有所帮助。提前致谢!

0 个答案:

没有答案