webForumDet fria alternativet

mysql, blob, array, '-tecken

4 svar · 221 visningar · startad av Bäckman

BäckmanMedlem sedan nov. 2001274 inlägg
#1

Har problem när jag vill spara en array i ett mysql-fält av typen blob. Eller ja, det är inga problem så länge jag inte använda något enkelt citationstecken (').

Problemen uppstår när jag kör unserialize() på min array som jag får ut från databasen. Skulle någon kortfattat kunna beskriva hur jag ska gå tillväga för att det ska gå att spara en array i en databas och sedan kunna skriva ut den igen utan att det krånglar?

Hela detta inlägget blev väldigt diffust, men jag hoppas att någon har erfarenheter av detta iaf. :OO

SPiNMedlem sedan mars 20007 896 inlägg
#2

Vad är det som inte fungerar? Visa gärna lite kod.

Följande bör fungera alldeles utmärkt:

<?php

$arr = array( "do", "re", "mi" );
addToDatabase( serialize( $arr ) );

...

$dbValue = getFromDatabase();
$myArr = unserialize( $dbValue );

if( !$myArr ) {
     echo "The $dbValue-variable was not unserializeable";
}
?>
BäckmanMedlem sedan nov. 2001274 inlägg
#3

Mitt problem har utvecklat sig en aning, heh. Det är nämligen så att jag håller på med ett lite system för en poll, och finessen är att man ska kunna lägga till så många alternativ man önskar. Jag har därför alternativen och antal gånger man har röstat på dem i samma array.

Det kan se ut såhär t.ex.

$StrQuestion = "Vilken är din favoritfärg?"; //Inte så relevant, bara kuriosa. :P

$array['alternative']['1'] = htmlspecialchars("Blå", ENT_QUOTES);
$array['alternative']['2'] = htmlspecialchars("Gul", ENT_QUOTES);
$array['alternative']['3'] = htmlspecialchars("Orange", ENT_QUOTES);

$array['result']['1'] = 0;
$array['result']['2'] = 0;
$array['result']['3'] = 0;
$StrAlternatives = addslashes(serialize($array));

...kör min insert i mysql-databasen...

Såhär långt är allt fint, och nu kan jag faktiskt presentera alla alternativ felfritt även om de innehåller '-tecken. Nu uppstod dock ett annat problem, nämligen när jag ska presentera resultaten också. Om jag har lagt in ett '-tecken någonstans i min array så får jag "undefined index: result". :(

SPiNMedlem sedan mars 20007 896 inlägg
#4

Med htmlspecialchars() får du inte bort dina '-tecken, om du inte sätter en parameter till:

$str = htmlspecialchars( $str, ENT_QUOTE );

Och istället för addslashes(), försök med funktionen base64_encode() vid lagringen och base64_decode() vid hämtningen:

$StrAlternatives = base64_encode( serialize( $array ) );

Samt:

$StrAlternatives = base64_decode( unserialize( $array ) );

Fungerar det ändå inte, har jag inga direkta svar - men ett tips kan vara att baka in det i en klass att serialisera:
AltKlass.php

class AlternativesClass {
    // Metoder och fält för lagring av information
}

Skrivning

require( "AltKlass.php" );

$alternativeObject = new AlternativeClass();

$alternativeObject->store( "MyVar" ); // Exempelmetod

$serializedObject = serialize( $alternativeObject );

Hämtning

require( "AltKlass.php" );

$serializedVariable = getFromDatabase();

$alternativeObject = unserialize( $serializedObject );
BäckmanMedlem sedan nov. 2001274 inlägg
#5

Förstår inte alls varför allt i $array['result'] ska börja strejka så fort man använder citationstecken i den _andra_ arrayen i arrayen, eller hur det nu blir...

Provade med base64_encode, det gjorde i princip ingen skillnad mot när man använda addslashes(). :\

Knåpar vidare...

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)