[PHP/SQL] <br> in db na opslaan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
ik heb een importeerscript waar debiteuren worden geimporteerd in de database.
heb dit al meer gedaan alleen nu heb ik iets wat ik nog niet eerder heb meegemaakt :P

ik maak gebruik van objecten en hieronder zie je een stukje van de code waar het opslaan plaats vind
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
foreach ($file AS $temp)
{   
    if ($temp != 0) 
    {
        $tempFile = explode(";", $temp);
        if (!empty($tempFile[0]) && !empty($tempFile[1])) 
        {
            $debiteur = new Debiteur($tempFile[0]);
            $debiteur->setDebiteurNaam($tempFile[1]);
            $debiteur->setDebiteurBlok($tempFile[2]);
            $debiteur->setDebiteurStraat($tempFile[5]);
            $debiteur->setDebiteurHuisnummer($tempFile[6]);
            $debiteur->setDebiteurToevoeg($tempFile[7]);
            $debiteur->setDebiteurPostcode($tempFile[8]);
            $debiteur->setDebiteurWoonplaats($tempFile[9]);
            $debiteur->setDebiteurTelefoon($tempFile[10]);
            $debiteur->setDebiteurFax($tempFile[11]);
            $debiteur->setDebiteurBeheerMobiel($tempFile[15]);
            $debiteur->setDebiteurBeheerVast($tempFile[16]);
            info($debiteur);
            $bool = $debiteur->save();
            if ($bool == 1)
                $numrows++;     
        }
    }   
}

nu haal ik met die info($debiteur); de gegevens van het object op. hieronder een voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
debiteur Object
(
    [debiteur_id] => *******
    [debiteur_naam] => *******
    [debiteur_blok] => *******
    [debiteur_straat] => *******
    [debiteur_huisnummer] => *******
    [debiteur_toevoeg] => *******
    [debiteur_postcode] => *******
    [debiteur_woonplaats] => *******
    [debiteur_telefoon] => *******
    [debiteur_fax] => *******
    [debiteur_beheermobiel] => *******
    [debiteur_beheervast] => naam_persoon
)

nu gebeurt er iets bij het opslaan wat ik eerlijk gezegt niet verwacht
bij het uitvoeren van het script worden dus de gegevens opgeslagen
als ik dan via phpmyadmin ga checken of het klopt kom ik tot het volgende:
debiteur_beheervast
naam_persoon<br>

zoals je ziet staat er op een of andere manier een "<br>" achter de naam
deze naam is niet verplicht en dit veld is dan ook vaak leeg maar ook bij deze gevallen staat en dan alleen de "<br>" in de database.

als ik dan een kijkje neem in de gemaakte csv bestand met de mogelijkheid dat misschien daar de fout zit zie het er gewoon goed uit:
code:
1
3;*****;;*****;;*****;*****;;*****;*****;*****;*****;;;;*****;naam_persoon

ik snap dus niet hoe het komt.
als ik ipv $tempFile[16]); verander in $tempFile[15]); werkt het wel gewoon en komt gewoon de waarde van 15 te staan.

de vraag dus hoe kan dit gebeuren?? :?
alvast bedankt voor de moeite!

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:33

Janoz

Moderator Devschuur®

!litemod

In de door jou gegeven code is niks vreemds te vinden. Ik vermoed echter dat er in de debiteuren class ergens een nl2br over de gegevens gehaald wordt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 20:19

Pyrus

Hardknock life

Gooi die laatste variabele dan eens in door trim(), voordat je hem aan het object toewijst. Dit haalt alle overbodige whitespace karakters (spatie, \r, \n en \t) weg :)

LinkedIn


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:33

Janoz

Moderator Devschuur®

!litemod

@pyrus: Dat lijkt me meer een workaround dan een oplossing. Aangezien het hier om debiteurengegevens gaat lijkt het me helemaal niet wenselijk dat de gegevens in html vorm in de database terecht komen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Janoz schreef op maandag 07 augustus 2006 @ 11:49:
In de door jou gegeven code is niks vreemds te vinden. Ik vermoed echter dat er in de debiteuren class ergens een nl2br over de gegevens gehaald wordt.
dit had ik dus ok al verwacht
dus bij deze mijn code van de class (alleen het nodige):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
function setDebiteurBeheerVast($sDebiteurBeheerVast){
        $this->debiteur_beheervast = cleanString($sDebiteurBeheerVast);         
    }

function getDebiteurBeheerVast(){
        return $this->debiteur_beheervast;          
    }
/**
    * Functie om het object op te slaan in de database
    * Wanneer er geen id is, zal er een nieuw record toevoegd worden
    * Wanneer er wel een id is, zal het record geupdate worden
    * @return boolean Bij succes wordt true teruggegeven en false als het niet is gelukt
    */
    function save(){
    // insert
        if (($this->bestaatDebiteur($this->getDebiteurId())) == false ){
            mysql_query('   INSERT INTO debiteuren
                            (
                             debiteur_id,
                             debiteur_naam,
                             debiteur_blok,
                             debiteur_straat,
                             debiteur_huisnummer,
                             debiteur_toevoeg,
                             debiteur_postcode,
                             debiteur_woonplaats,
                             debiteur_telefoon,
                             debiteur_fax,
                             debiteur_beheermobiel,
                             debiteur_beheervast
                            ) 
                            VALUES
                            (
                             "'.intval($this->getDebiteurId()).'",  
                             "'.mysql_real_escape_string($this->getDebiteurNaam()).'",
                             "'.mysql_real_escape_string($this->getDebiteurBlok()).'",
                             "'.mysql_real_escape_string($this->getDebiteurStraat()).'",
                             "'.intval($this->getDebiteurHuisnummer()).'",
                             "'.mysql_real_escape_string($this->getDebiteurToevoeg()).'",
                             "'.mysql_real_escape_string($this->getDebiteurPostcode()).'",
                             "'.mysql_real_escape_string($this->getDebiteurWoonplaats()).'",
                             "'.mysql_real_escape_string($this->getDebiteurTelefoon()).'",
                             "'.mysql_real_escape_string($this->getDebiteurFax()).'",
                             "'.mysql_real_escape_string($this->getDebiteurBeheerMobiel()).'",
                             "'.mysql_real_escape_string($this->getDebiteurBeheerVast()).'"
                            )');
        }
        else
        {
        // update
        if(mysql_query('    UPDATE 
                                debiteuren
                            SET
                                debiteur_naam = "'.mysql_real_escape_string($this->getDebiteurNaam()).'",
                                debiteur_blok = "'.mysql_real_escape_string($this->getDebiteurBlok()).'",
                                debiteur_straat = "'.mysql_real_escape_string($this->getDebiteurStraat()).'",
                                debiteur_huisnummer = "'.intval($this->getDebiteurHuisnummer()).'",
                                debiteur_toevoeg = "'.mysql_real_escape_string($this->getDebiteurToevoeg()).'",
                                debiteur_postcode = "'.mysql_real_escape_string($this->getDebiteurPostcode()).'",
                                debiteur_woonplaats = "'.mysql_real_escape_string($this->getDebiteurWoonplaats()).'",
                                debiteur_telefoon = "'.mysql_real_escape_string($this->getDebiteurTelefoon()).'",
                                debiteur_fax = "'.mysql_real_escape_string($this->getDebiteurFax()).'",
                                debiteur_beheermobiel = "'.mysql_real_escape_string($this->getDebiteurBeheerMobiel()).'",
                                debiteur_beheervast = "'.mysql_real_escape_string($this->getDebiteurBeheerVast()).'"
                            WHERE
                                debiteur_id = '.intval($this->getDebiteurId()).'
                            LIMIT 1
                                '))
            return true;
        else
            return false;
        }
    }


anyway waarschijnlijk al deze lapcode wel niet nodig zijn maargoed :)[/]

nu wordt er dus zoals je ziet gebruik gemaakt van dit:
PHP:
1
2
function setDebiteurBeheerVast($sDebiteurBeheerVast){
        $this->debiteur_beheervast = cleanString($sDebiteurBeheerVast);

deze functie is terug te vinden in mijn functions.php
PHP:
1
2
3
4
5
6
function cleanString($sString){
        $sString = str_replace(array("\r\n", "\n", "\r"), "<br>", $sString);
        $sString = @strip_tags($sString, '<br>');
        $sString = @stripslashes($sString);
        return $sString;
    }

maar zoals ik het zie wordt het hier juist weg gehaald lijkt me zo
en deze functie wordt bij elke set functie gebruikt waarbij het veld een string is.
en hij het doet het overal gewoon goed.

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 20:19

Pyrus

Hardknock life

Zit wat in, maar een onnodige newline kan ook voor rotzooi zorgen. Zeker bij een naam. Als je die dan ergens wilt gebruiken, moet je op dat moment eerst weer de newline er af gaan halen. Zeg nou zelf, hoe vaak is een \n handig na een naam? :)

LinkedIn


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:33

Janoz

Moderator Devschuur®

!litemod

Je begrijpt duidelijk niet hoe je eigen code werkt. Kijk eens wat str_replace doet, en wat de 2e parameter van strip_tags voor is.

Wat is het doel van die cleanString functie trouwens? Het lijkt me dat die in veel gevallen voor problemen gaat zorgen als je die in de setter gebruikt. Hij werkt namelijk alleen wanneer je de setters enkel bij post en get vars gebruikt wanneer magic_quotes aanstaan. In alle andere gevallen wordt de data verneukt.

@ hierboven:

Dat een \n in een naam niet nodig is heb je misschien wel gelijk in, maar dat is hier niet relevant. Bij een andres kan het wel handig zijn. De code van de TS laat dat echter ook niet zomaar toe. Er wordt enkel een <br> in gezet. Dit geeft alleen het juiste effect wanneer de gegevens in een webapp gebruikt worden en daadwerkelijk bekend is dat de gegevens al naar een specifiek formaat geconverteerd zijn.

[ Voor 32% gewijzigd door Janoz op 07-08-2006 12:00 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Janoz schreef op maandag 07 augustus 2006 @ 11:57:
Je begrijpt duidelijk niet hoe je eigen code werkt. Kijk eens wat str_replace doet, en wat de 2e parameter van strip_tags voor is.

Wat is het doel van die cleanString functie trouwens? Het lijkt me dat die in veel gevallen voor problemen gaat zorgen als je die in de setter gebruikt. Hij werkt namelijk alleen wanneer je de setters enkel bij post en get vars gebruikt wanneer magic_quotes aanstaan. In alle andere gevallen wordt de data verneukt.
jah ik zocht het net zelf even op en inderdaad kwam al uit op hetzelfde hij vervangt idd door die <br>
maar wat mij dan wel verbaasd is dat het bij alle andere setters hij deze fout niet weergeeft... en typisch alleen bij deze laatste veld..

bij de integer variabelen gebruik ipv cleanstring -> intval()
is het dan handig om nu voor strval() te kiezen als vervanging voor de cleanstring van mij en wordt dan ook de overbodige spaties etc eruit gefilterd?
of kan ik dit simpel vervangen door die <br> in mijn functie te vervangen naar ""??

[ Voor 21% gewijzigd door Tijgertje84 op 07-08-2006 12:05 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 17:33

Janoz

Moderator Devschuur®

!litemod

Hij zet alleen een <br> erin als in de bron een \n staat. Dat is waarschijnlijk alleen bij de laatste het geval. Of je voor strval moet kiezen? Ga eerst maar eens nadenken welke functionaliteit je eigenlijk wilt hebben. Dat bepaald natuurlijk wat je moet gebruiken!

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Janoz schreef op maandag 07 augustus 2006 @ 12:05:
Hij zet alleen een <br> erin als in de bron een \n staat. Dat is waarschijnlijk alleen bij de laatste het geval. Of je voor strval moet kiezen? Ga eerst maar eens nadenken welke functionaliteit je eigenlijk wilt hebben. Dat bepaald natuurlijk wat je moet gebruiken!
ok dan denk dat ik ervoor ga om mijn functie aan te passen naar dit:
PHP:
1
2
3
4
5
6
function cleanString($sString){ 
        $sString = str_replace(array("\r\n", "\n", "\r"), "", $sString); 
        $sString = @strip_tags($sString, '<br>'); 
        $sString = @stripslashes($sString); 
        return $sString; 
    }

want deze functie zelf wordt alleen gebruikt in de classes voor het setten van de items in de objecten

heb het al geprobeerd het dat werkt gewoon

alvast bedankt had anders ff geduurt voordat ik deze fout had achterhaald...:)

EDIT
maar wacht eens even in mijn script staat toch ook dit:
PHP:
1
$sString = @strip_tags($sString, '<br>');

zou deze dan niet die <br> weg moeten halen :o??

[ Voor 8% gewijzigd door Tijgertje84 op 07-08-2006 12:14 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • Flying_Thunder
  • Registratie: December 2001
  • Niet online
Tijgertje84 schreef op maandag 07 augustus 2006 @ 12:09:
[...]
EDIT
maar wacht eens even in mijn script staat toch ook dit:
PHP:
1
$sString = @strip_tags($sString, '<br>');

zou deze dan niet die <br> weg moeten halen :o??
Nee, want met de 2e parameter van strip_tags kun je allowable_tags aangeven, dus "<br>" heb je opgegeven als 'toegestaan' :)

Acties:
  • 0 Henk 'm!

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06 14:43
Flying_Thunder schreef op maandag 07 augustus 2006 @ 12:30:
[...]

Nee, want met de 2e parameter van strip_tags kun je allowable_tags aangeven, dus "<br>" heb je opgegeven als 'toegestaan' :)
8)7 |:( :X }:O zijn er nog meer van deze smilys? :+
anyway thnx ;)

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


Acties:
  • 0 Henk 'm!

  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 10-06 12:14

ReseTTim

Chocolate addicted

het rare is dus dat ik hier opeens ook voor het eerst last van heb. terwijl ik de gegevens via phpmyadmin heb ingevoerd..

Mijn profiel - Te koop: Overzicht van spullen..


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

En nu moeten wij in onze glazen bol kijken en raden waar het misgaat? ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 10-06 12:14

ReseTTim

Chocolate addicted

-NMe- schreef op dinsdag 08 augustus 2006 @ 16:43:
En nu moeten wij in onze glazen bol kijken en raden waar het misgaat? ;)
ja, dat zie je toch wel.. ;)

nee, maar wou alleen opmerken dat ik dit dus nog nooit eerder heb meegemaakt en nu opeens nadat ik dit topic had gezien en een gebruiker had toegevoegd.. met NULL velden ik dus op eens <br> krijg te zien.. en de velden varieren van VARCHAR tot TINYINT.

Mijn profiel - Te koop: Overzicht van spullen..


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Dan zul je toch echt wel ergens een nl2br doen die daar niet hoort, want <br>'s komen niet vanzelf in je database. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • ReseTTim
  • Registratie: Juni 2000
  • Laatst online: 10-06 12:14

ReseTTim

Chocolate addicted

-NMe- schreef op dinsdag 08 augustus 2006 @ 16:54:
Dan zul je toch echt wel ergens een nl2br doen die daar niet hoort, want <br>'s komen niet vanzelf in je database. :)
SQL:
1
INSERT INTO `geb_profiel` (`gebruikerid`, `username`, `passw`, `naam`, `achternaam`, `adres`, `postcode`, `woonplaats`, `telefoon`, `mail`, `foto`, `userlevel`) VALUES ('', 'rene', '93de1a7f9a00f8823ac377738b66236b', 'Rene', 'S', NULL, NULL, NULL, NULL, NULL, NULL, '2');


passw is ook rene.. maar dat mag je gerust weten :P

maar via phpmyadmin verwacht je toch niet dat ik een nl2br doe? ik ga er vanuit dat met mijn uiteindelijke code om via cms profiel te wijzigen dat het dan wel goed gaat.. maar heb nog nooit eerder dit gezien..

Mijn profiel - Te koop: Overzicht van spullen..

Pagina: 1