Попытка установить заголовок данных в fancybox как динамический, но переменные с экранированными апострофами не выводят правильный формат для заголовка

#php #html #dynamic #fancybox

#php #HTML #динамический #fancybox

Вопрос:

Я пытаюсь динамически отображать информацию о моем изображении в атрибуте заголовка данных для fancybox3. Это довольно долго, и я не уверен, как изменить его, чтобы он не был отвратительным. Конкретная проблема заключается в том, что когда он получает информацию из базы данных mysql, которая может содержать специальные символы, такие как ‘ или » заголовок данных думает, что он закрывается, когда это не то, что я хотел бы.

Я попытался разделить очень длинное выражение echo на несколько, но это ничего не изменило. Я попытался добавить строки для заголовка данных как такового, » .$ var .» и это не сработало. Я пробовал использовать mysqli_real_escape() во время объявления переменных, и это не меняет функциональность при попытке вывода информации из базы данных.

 <table style="margin:1em auto;">
        <?php
        //  require_once('DB_connection.php');

        $j = 0;

        while ($fetch_all_posts =  mysqli_fetch_assoc($all_posts)) {


            if ($j % 3 == 0) {
                echo "<tr>";
            }
            $getUser = $fetch_all_posts['userName'];
            $getPostID = $fetch_all_posts['postID'];
            $getDateUploaded = $fetch_all_posts['dateUploaded'];
            $getImg = $fetch_all_posts['img']; //dont really need
            $getLocation = mysqli_real_escape_string($connection,$fetch_all_posts['location']);
            $getCaption = mysqli_real_escape_string($connection,$fetch_all_posts['caption']);
            $getImageMetadata = mysqli_real_escape_string($connection,$fetch_all_posts['imageMetadata']);
            $getCameraGearPost = mysqli_real_escape_string($connection,$fetch_all_posts['cameraGearPost']);
            $getPhotoEdit = mysqli_real_escape_string($connection,$fetch_all_posts['photoEdit']);
            $getCopyright = mysqli_real_escape_string($connection,$fetch_all_posts['copyright']);


            //grab user profile pic from user table
            $sql_profilePic = "SELECT * FROM $dbtableUser WHERE userName = '$getUser' ";
            $all_users = mysqli_query($connection, $sql_profilePic);
            $fetch_all_users = mysqli_fetch_assoc($all_users);

            //change data caption's userName link   also incorrectly interprets '  " for datacaption
            echo "<td><br/><br/><br/><br/><a data-fancybox='images' data-caption= '<h1><a href=Profile.php><img id=profpic src=$fetch_all_users[profilePic] height=auto width=100px>   $getUser</a></h1> <br/> <h5>@$getLocation</h5>  <hr/> <br/> <h5>$getCaption</h5>   <br/> <h5>$getImageMetadata</h5> <br/> <h5>$getCameraGearPost</h5> <br/><h5>$getPhotoEdit<h5> <br/><br/><br/> <h6>PostID: $getPostID </h6> <br/>Copyrighted: $getCopyright <br/> $getDateUploaded <br/>'  href ='$getImg'>   <img id=postPics src='$getImg' alt='$getCaption'</a>  </td>";


            if ($j % 3 == 2) {
                echo "</tr>";
            }
            $j  ;
        }
        ?>
    </table>
  

Я ожидаю, что при нажатии на изображение он отобразит заголовок данных соответствующим образом со специальными символами.

эта ссылка,https://ibb.co/QK3Nkfw , показывает, как выглядит страница в настоящее время, первое изображение является проблемой, и я хочу, чтобы оно было таким же, как остальные. При щелчке по изображению должны отображаться такие данные:https://ibb.co/qnTJYf3

Комментарии:

1. Используйте подготовленные операторы. Это единственный правильный способ выполнения инструкций SQL.

2. @Dharman Интересно, я могу попробовать это, мой вопрос в том, как бы мне переписать строку echo с подготовленными операторами?

3. Даже при использовании подготовленных операторов проблема все еще сохраняется. Проблема заключается в том, как интерпретируется заголовок данных, переменные, на которые ссылаются, имеют некоторые символы ‘ и «, которые заканчивают заголовок данных раньше, чем предполагалось. Или это то, что, как я полагаю, происходит.

4. Моя рекомендация не имела отношения к вашей проблеме. Используя подготовленные инструкции, вы можете избавиться от этой неприятности mysqli_real_escape_string и убедиться, что вы не уязвимы для SQL-инъекции.

Ответ №1:

htmlspecialchars() это ответhttps://www.php.net/manual/en/function.htmlspecialchars.php

Кроме того, научитесь отлаживать свой код — если бы вы использовали инструменты разработчика для проверки сгенерированного HTML-кода, я могу гарантировать, что вы бы увидели, что ваш html сломан (из-за неэкранированных символов)

Комментарии:

1. Спасибо! Я не знал, что это существует, и буду широко использовать его! И да, я видел, что он был сломан, и попытался экранировать ввод, но он не делал того, что я хотел.