首页 > 解决方案 > 为什么爆炸不分离我的字符串值?

问题描述

我正在尝试explode从字符串中获取值,但它不起作用。

我想做这个

$requestedby = 'Hello World-two';

进入

$requestedname = 'Hello';
$requestedlast_name = 'World-two';

我试过使用explode并且array_pad我保持它没有爆炸价值,它保持不变。

$requestedby = 'Hello World-Two';
list($requestedname, $requestedlast_name) = explode(' ', "$requestedby");
echo $requestedname;

我收到此错误,好像值中没有空格

注意:未定义的偏移量:1


完整代码如下:

<?php require('includes/config.php');

//if not logged in redirect to login page
if(!$user->is_logged_in()){ header('Location: index.php'); exit(); }

//include header template
require('layout/header.php'); 

$stmt = $db->query("SELECT name, last_name FROM `designers` WHERE `username` = '" . $_SESSION['username'] . "'");
$result1 = $stmt->fetch(PDO::FETCH_ASSOC); 
$name = $result1['name'];
$last_name = $result1['last_name'];

      if (isset($_GET['pageno'])) {
        $pageno = $_GET['pageno'];
    } else {
        $pageno = 1;
    }
    $no_of_records_per_page = 15;
    $offset = ($pageno-1) * $no_of_records_per_page;
    $conn=mysqli_connect("xxxx", "xxxx", "xxxx", "xxxx");
    $total_pages_sql = "SELECT COUNT(*) FROM requests";
    $result = mysqli_query($conn,$total_pages_sql);
    $total_rows = mysqli_fetch_array($result)[0];
    $total_pages = ceil($total_rows / $no_of_records_per_page);

?>
            <?php
 $query = "SELECT * FROM `requests` LIMIT $offset, 
 $no_of_records_per_page";
 $search_result = filterTable($query);

// function to connect and execute the query
function filterTable($query)
{
$connect = mysqli_connect("xxxx", "xxxx", "xxxx", "xxxx");
 $filter_Result = mysqli_query($connect, $query);
return $filter_Result;
}

?>
<?php
if(empty($_GET['id'])){
?>
<div class="container">
<div class="row">
    <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
    <?php
    if(isset($_GET['action']) && $_GET['action'] == 'updated'){
            $IDrequest = $_GET['IDrequest'];
                echo "<h2 class='bg-success'>Request number $IDrequest has been updated successfully.</h2>";
                    $requestedby = $_GET['requestedby'];
                    list($requestedname, $requestedlast_name) = explode(' ', "$requestedby");
            }?>
            <h3>View Requests</h3><hr>
                                    </div>
            </div>
     </div>
<div class="container">
<div class="row">
                     <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
                     <a href="index.php">Back</a><br />
<ul class="pagination">
    <li><a href="?pageno=1">First</a></li>
    <li class="<?php if($pageno <= 1){ echo 'disabled'; } ?>">
        <a href="<?php if($pageno <= 1){ echo '#'; } else { echo "?pageno=".($pageno - 1); } ?>">Prev</a>
    </li>
    <li class="<?php if($pageno >= $total_pages){ echo 'disabled'; } ?>">
        <a href="<?php if($pageno >= $total_pages){ echo '#'; } 
else { echo "?pageno=".($pageno + 1); } ?>">Next</a>
    </li>
    <li><a href="?pageno=<?php echo $total_pages; ?>">Last</a></li>
</ul> 
            <table>
            <tr>
                <th>Request Number</th>
                <th>Request Type</th>
                <th>Requested By</th>
                <th>Due Date</th>
                <th>Status</th>
                <th>Designer Assigned</th>
                <th>Action</th>
            </tr>

  <!-- populate table from mysql database -->
            <?php while($row = mysqli_fetch_array($search_result)):?>
            <tr>
                <td><?php echo $row['requestID'];?></td>
                <td><?php echo $row['request_type'];?></td>
                <td><?php echo $row['designer'];?></td>
                <td><?php echo $row['duedate'];?></td>
                <td><?php echo $row['status'];?></td>
                <td><?php echo $row['wip_designer'];?></td>
                <td><?php 
                if ($row['status'] == 'Submitted') {
                    ?><a href="viewrequests.php?id=<?php echo $row['requestID'];?>" style="color: #F00">Start</a>
                    <?php
                }
                if ($row['status'] == 'In Progress') { ?>
                <a href="viewrequests.php?id=<?php echo $row['requestID'];?>">Continue</a>
                <?php
                }
                if ($row['status'] == 'Completed') { ?>
                <a href="viewrequests.php?id=<?php echo $row['requestID'];?>" style="color: #69c45a">Completed</a><?php
                }
                ?></td>
            </tr>
            <?php endwhile;?>
        </table>

                </div></div>


<?php
} else {
 //if form has been submitted process it
if(isset($_POST['submit'])){
$requestedby = $_POST['requestedby'];
$IDrequest = $_POST['IDrequest'];
$status = $_POST['status'];
$wip_designer = $_POST['wip_designer'];
if(!isset($error)){
$stmt = $db->prepare('UPDATE requests SET status = :status, 
wip_designer = :wip_designer WHERE requestID = :id');
$stmt->execute(array(
    ':status' => $status,
    ':wip_designer' => $wip_designer,
    ':id' => $_GET['id']
    ));
       header('Location: viewrequests.php?IDrequest='.$IDrequest.'&action=updated&requestedby='.$requestedby.'');
        exit;
}
}

  $stmt = $db->query("SELECT * FROM `requests` WHERE `requestID` = '" . $_GET['id'] . "'");
$result4 = $stmt->fetch(PDO::FETCH_ASSOC); 
?>
<div class="container">

<div class="row">
    <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
            <h3>Working on Request # <?php echo $result4['requestID']; ?></h3><hr>
                                    </div>
            </div>
     </div>
<script> 
$(document).ready(function(){
$('[name=status]').change(function(){
    if($(this).val() === 'In Progress'){
         alert("Please only continue if you will be starting this project. Otherwise go back.");
    }
            if($(this).val() === 'Completed'){
         alert("Please only continue after checking that every single task on this request is done. Otherwise go back.");
    }
});
});
</script>
<div class="container">

<div class="row">

    <div class="col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
        <form role="form" method="post" action="">
        <div class="form-group">Requested by:  <input type="text" name="requestedby" id="requestedby" class="form-control input-lg" placeholder="" value="<?php echo $result4['designer']; ?>" tabindex="1" readonly><br />Customer:<br />
                            <input type="text" name="customer" id="customer" class="form-control input-lg" placeholder="" value="<?php echo $result4['customer']; ?>" tabindex="2" readonly><br />Due Date:<br />
                            <input type="text" name="duedate" id="duedate" class="form-control input-lg" placeholder="" value="<?php echo $result4['duedate']; ?>" tabindex="3" readonly><br />DPI:<br />
                            <input type="text" name="dpi" id="dpi" class="form-control input-lg" placeholder="" value="<?php echo $result4['customer']; ?>" tabindex="4" readonly><br />Background Color:<br />
                            <input type="text" name="backgroundcolor" id="backgroundcolor" class="form-control input-lg" placeholder="" value="<?php echo $result4['backgroundcolor']; ?>" tabindex="5" readonly><br />Dimensions:<br />
                            <input type="text" name="dimensions" id="dimensions" class="form-control input-lg" placeholder="" value="<?php echo $result4['dimensions']; ?>" tabindex="6" readonly><br />Orientation:<br />
                            <input type="text" name="orientation" id="orientation" class="form-control input-lg" placeholder="" value="<?php echo $result4['orientation']; ?>" tabindex="7" readonly><br />Pack Size:<br />
                            <input type="text" name="packsize" id="packsize" class="form-control input-lg" placeholder="" value="<?php echo $result4['packsize']; ?>" tabindex="8" readonly>
                            <br />Styles and Colorways:<br />
                            <textarea rows="10" cols="50" name="styles_colorways" id="styles_colorways" class="form-control input-lg" tabindex="9" readonly><?php echo $result4['styles_colorways']; ?></textarea><br />Current Status:<br />
                                            <select name="status" id="status" class="form-control input-lg" tabindex="10">
                    <?php
                    if($result4['status'] == 'Submitted') { 
                    ?><option value="Submitted">Submitted</option>
                    <option value="In Progress">In Progress</option>
                    <option value="Completed">Completed</option>
                    <?php
                    } 
                    if($result4['status'] == 'In Progress') {
                        ?><option value="In Progress">In Progress</option>
                    <option value="Completed">Completed</option>
                    <?php
                    }
                    if($result4['status'] == 'Completed') {
                        ?><option value="Completed">Completed</option>
                        <?php
                    }
                    ?>
                    </select><br />Designer Assigned:<br />
                            <input type="text" name="wip_designer" id="wip_designer" class="form-control input-lg" placeholder="" value="<?php echo $result1['name']; ?>&nbsp;<?php echo $result1['last_name']; ?>" tabindex="11" readonly><br />
<input type="submit" name="submit" value="Update" class="btn btn-primary btn-block btn-lg" placeholder="Update" tabindex="12">
<input type="hidden" name="IDrequest" id="IDrequest" class="form-control input-lg" placeholder="" value="<?php echo $result4['requestID']; ?>" tabindex="13"><br>
                                                    <a href="viewrequests.php">Back</a><br>
</form></div></div></div></div>
<?php
}
//include header template
require('layout/footer.php');
?>

标签: phpstringvariablessplitexplode

解决方案


基于您的完整代码的新答案:

  1. 你应该解码$_GET['requestedby']withurldecode()因为它的 url 编码。这将 ie%20变成空格字符。
  2. %C2%A0不是空格字符,而是不间断空格(如&nbsp;在 html 中),因此您无法使用urldecode(). 您必须使用 str_replace() 函数将其更改为空格字符。
$requestedby = urldecode(str_replace(['%C2%A0','=C2=A0', ' '], '%20', $_GET['requestedby']));
list($requestedname, $requestedlast_name) = explode(' ', $requestedby);

这首先用正常的编码空间替换所有非破坏空间,然后对其进行解码。

[旧答案:]

因为您在explode 中使用的是字符串而不是var:

explode(' ', "$requestedby");

尝试这个:explode(' ', $requestedby);


推荐阅读