Как добавить di git в MySQL запись в базе данных, если она уже существует? - PullRequest
0 голосов
/ 07 мая 2020

Я создаю систему ввода блогов для своего веб-сайта, и если уже есть URL-адрес входа, я хочу, чтобы он создавал тот же URL-адрес плюс di git.

Итак, давайте использовать URL-адрес "test" Например, если URL-тест уже существует, я бы хотел, чтобы он был "test1", если URL-адрес "test1" уже существует, я бы хотел, чтобы он был "test2".

Вот какой я ( не совсем) делаю это сейчас:

Итак, как вы можете видеть, на самом деле это не работает так, как я хочу. Он может только go сформировать "test" в "test1" - как я могу заставить его динамически переименовывать бесконечно?

Edit:

Хорошо, после того, как я получил брови, я переключил все в PDO:

$title = $_POST['title'];
$author = $_POST['author'];
$content = $_POST['content'];

$date = new DateTime('now');
$date = $date->format('Y-m-d');

$domainurl = 'https://test.com/entry.php?';
$maxlength = (75 - strlen($domainurl));

if (strlen($_POST['title']) > $maxlength) {

    $url = wordwrap($_POST['title'], $maxlength);
    $url = substr($url, 0, strpos($url, "\n"));
    $url = strtr(strtolower($url), ' ', '-');

}else{

    $url = strtr(strtolower($_POST['title']), ' ', '-');

}

$url = preg_replace('/[^A-Za-z0-9\-]/', '', $url);

try {
    $options = [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    \PDO::ATTR_EMULATE_PREPARES => false,
    ];
    $conn = new PDO("mysql:charset=utf8mb4;host=$servername;dbname=$dbname", $username, $password);

    $sql = "SELECT count(*) FROM blog WHERE url = ?"; 

    $sql = $conn->prepare($sql); 
    $sql->execute([$url]); 

    $rowCount = $sql->fetchColumn();

    if ($rowCount >= 1) {

        $url = $url . $rowCount;

    }

    try {

        $sql = $conn->prepare("INSERT INTO blog (date, title, url, author, content) 
        VALUES (:date, :title, :url, :author, :content)");

        $sql->bindParam(':date', $date);
        $sql->bindParam(':title', $title);
        $sql->bindParam(':url', $url);
        $sql->bindParam(':author', $author);
        $sql->bindParam(':content', $content);

        $sql->execute();

        $rowCount = $sql->rowCount();
        $id = $conn->lastInsertId();

        if ($rowCount > 0) {

            echo json_encode(array ('type' => 'success', 'message' =>"Blog entry created successfully"));

        }else{

            echo json_encode(array ('type' => 'danger', 'message' =>"Blog entry <strong>not</strong> created successfully"));

        }

    }catch(PDOException $e){

        echo json_encode(array ('type' => 'danger', 'message'=>$e->getMessage()));

    }

}catch(PDOException $e){

    echo json_encode(array ('response'=>'error','errorMessage'=>$e->getMessage()));
}
    $conn = null;

Еще раз: желаемое поведение, которое я хочу, - это если ввод "test" и "test" уже существует, тогда он переходит в "test1", если "test1" существует в базе данных затем он переименовывается в «test2» и т. д.

Что касается деталей отладки go, в настоящее время он переходит только в «test1», и я не знаю, как получить его в «test2» и и так далее.

1 Ответ

0 голосов
/ 07 мая 2020

Попробуйте следующее:

if ($rowcount >= 1) {
         preg_match_all('/\d+/', $url, $matches);

         $matches = $matches[0];

         if(count($matches)==0)
            $url.=1;
          else
          {
              $digit = $matches[count($matches) -1 ] + 1;
              $url= preg_replace('/'.($digit-1).'/', $digit, $url);
          }
   }

Для ваших SQL команд я рекомендую использовать подготовленные операторы для предотвращения внедрения SQL.

...