[PHP] waarden uit mysql correct weergeven op browser.

Pagina: 1
Acties:
  • 58 views sinds 30-01-2008

  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
Hoi, ik heb een vraag over het werken met gegevens uit een mysql databse. Ik heb via een formulier gegevens in een mysql db gezet, en wil deze weer terughalen naar de browser. Op zich niet moeilijk. Alleen lukt het me niet om een veld te splitsen zodat deze waarde goed leesbaar wordt.
Voorbeeldje om het te verduidelijken:
Een waarde die ik ophaal uit de database is bijvoorbeeld: meerdan10ontladingenperminuut. Ik kan niet in php/mysql-boeken, forums of andere infobronnen vinden hoe ik deze waarde leesbaar op browser kan plaatsen. Als ik 'm echo, krijg je uiteraard de zin aan elkaar geplakt. Terwijl ik toch liever:

meer dan 10 ontladingen per minuut

zou krijgen.

Wie heeft het antwoord?
Alvast bedankt voor het meedenken!

Greets Fer.

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Waarom zet je de tekst in de database niet meteen goed ?

Wat je kan doen is een lijst bij houden van woorden en dan daarop gaan filteren en spaties er tussen gaan zetten.

don't be afraid of machines, be afraid of the people who build and train them.


  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 19:48
php kent helaas de regels van de Nederlandse taal niet en ook niet de woordjes. Met andere woorden, het grenst aan het onmogelijke. (tenzijn alle waardes vrijwel dezelfde opbouw hebben, dan loont het om een woordenlijst te maken)

Die waardes moeten gewoon anders in de database gezet worden, zoals k8skaaay al zegt.

Verwijderd

Je kan met reguliere expressies zowat alle mogelijkheden in de Nederlandse taal gaan aflopen :p

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
je moet deze functie gebruiken, die lost het voor je op:

PHP:
1
2
3
4
5
6
7
8
9
function fixSpaces($inp) {
  for (i=0;i<strlen($inp);i++) {
    $inp = substr($inp,0,i) . (rand()*4>1?" ":'') . substr($inp, i);
  }
  return $inp;
}

//en zo aanroepen
echo fixSpaces("hier je input string");

[ Voor 13% gewijzigd door BasieP op 22-05-2007 21:46 ]

This message was sent on 100% recyclable electrons.


  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
Is er een manier om "meerdan10ontladingenperminuut" meteen correct en de database te zetten. Want dan hoef ik er naderhand niet meer mee te stoeien. Ik weet overigens niet hoe je deze waarde correct (met de spaties er tussen) in de database kunt opnemen. Kan iemand me dat uitleggen aub of heeft iemand een suggestie :)

Greets Fer.

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
oke 'een methode op het met spaties in de DB te krijgen'

wat dacht je van volgens de eerste handleiding php + mysql die er op internet staat?
hier ik heb een lijstje voor je gemaakt :)

[ Voor 25% gewijzigd door BasieP op 22-05-2007 21:48 ]

This message was sent on 100% recyclable electrons.


  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
Hey BasieP, dat is wat ik zeer waarschijnlijk nodig heb. Eens kijken of het hiermee lukt. Alvast hartelijk dank zeg! 8)

  • Noork
  • Registratie: Juni 2001
  • Niet online
Wat voor datatype heb je dan voor dat veld gebruikt? Varchar?

  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
BasieP schreef op dinsdag 22 mei 2007 @ 21:47:
oke 'een methode op het met spaties in de DB te krijgen'

wat dacht je van volgens de eerste handleiding php + mysql die er op internet staat?
hier ik heb een lijstje voor je gemaakt :)
Ik heb een aantal boeken, php en mysql basismateriaal. Daar staat ook in wat er op de sites die je netjes voor me opzocht staat. Ik zal even verduidelijken hoe ik ik mijn gegevens ophaal en verstuur:

met een formulier worden variabelen naar mysql gestuurd. Bijvoorbeeld $onweer. Maar ik kan in de <form> niet value="meer dan 10 ontladingen per minuut" opnemen. Want mysql laat dan alleen het eerst woord zien in het veld.

Gr. Fer

  • Noork
  • Registratie: Juni 2001
  • Niet online
Je haalt hier HTML, PHP en Mysql aardig door elkaar. Je kunt zowel in een form (html) als in een php variabele als mysql prima variabelen met spaties hebben. Post eens wat meer van je code. Je insert statement, hoe je de var afvangt in php, en je html formulier en wat info over je tabel.

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

volgens mijn glazen bol fetcht ie gewoon de rowset en plempt ie alle waardes op het scherm zonder html opmaak :X

Stop uploading passwords to Github!


  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 21-10 21:48
Doe je soms een replace " " into "" voordat je alles in de DB stopt ? Als je gewoon "10 ontladingen per minuut" als waarde ingeeft in bijvoorbeeld een textfield, en je pakt deze op in je afhandeling en stopt hem zonder bewerking (Altijd ff controleren of ze je DB niet proberen te hacken) in je DB, dan worden ook de spaties opgeslagen. Spatie is namelijk ook een waarde in de ascii tabel, net als /r en /n.
SchizoDuckie schreef op dinsdag 22 mei 2007 @ 22:15:
volgens mijn glazen bol fetcht ie gewoon de rowset en plempt ie alle waardes op het scherm zonder html opmaak :X
Dan nog, als het er met spaties in gaat, komt het er met saties uit. En zelfs zonder html heb je dan alsnog je spaties, als het met een echo of print als output geeft.

[ Voor 32% gewijzigd door fleppuhstein op 22-05-2007 22:18 ]


  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
Noork schreef op dinsdag 22 mei 2007 @ 22:11:
Je haalt hier HTML, PHP en Mysql aardig door elkaar. Je kunt zowel in een form (html) als in een php variabele als mysql prima variabelen met spaties hebben. Post eens wat meer van je code. Je insert statement, hoe je de var afvangt in php, en je html formulier en wat info over je tabel.
Oké, wat code, betreffende op de situatie:

PHP:
1
2
3
4
5
<input type="radio" name="onweer" value=meerdan20ontladingenperminuut>

$onweer =  $_POST['onweer'];

$sql = "INSERT INTO categorie (onweer) VALUES(''$onweer'";


:)

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 21-10 21:48
Waterspout schreef op dinsdag 22 mei 2007 @ 22:17:
[...]


Oké, wat code, betreffende op de situatie:

PHP:
1
2
3
4
5
<input type="radio" name="onweer" value=meerdan20ontladingenperminuut>

$onweer =  $_POST['onweer'];

$sql = "INSERT INTO categorie (onweer) VALUES(''$onweer'";


:)
PHP:
1
2
3
4
5
<input type="radio" name="onweer" value="meer dan 20 ontladingen per minuut">

$onweer =  $_POST['onweer'];

$sql = "INSERT INTO categorie (onweer) VALUES(''$onweer'";


of


PHP:
1
2
3
4
5
6
7
<input type="radio" name="onweer" value="20">

$onweer =  $_POST['onweer'];

$db_input_onweer = "Meer dan " . $onweer . " ontladingen per minuut."

$sql = "INSERT INTO categorie (onweer) VALUES(''$onweer'";

[ Voor 43% gewijzigd door fleppuhstein op 22-05-2007 22:22 ]


  • Noork
  • Registratie: Juni 2001
  • Niet online
Waterspout schreef op dinsdag 22 mei 2007 @ 22:17:
[...]
Oké, wat code, betreffende op de situatie:
[.....] :)
Doe eens dit
PHP:
1
<input type="radio" name="onweer" value="meer dan 20 ontladingen per minuut">


En het is misschien ook aardig om het wat meer te beveiligen tegen SQL injects
PHP:
1
$onweer =  htmlspecialchars($_POST['onweer']);

[ Voor 22% gewijzigd door Noork op 22-05-2007 22:23 ]


  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
fleppuhstein schreef op dinsdag 22 mei 2007 @ 22:16:
Doe je soms een replace " " into "" voordat je alles in de DB stopt ? Als je gewoon "10 ontladingen per minuut" als waarde ingeeft in bijvoorbeeld een textfield, en je pakt deze op in je afhandeling en stopt hem zonder bewerking (Altijd ff controleren of ze je DB niet proberen te hacken) in je DB, dan worden ook de spaties opgeslagen. Spatie is namelijk ook een waarde in de ascii tabel, net als /r en /n.


[...]

Dan nog, als het er met spaties in gaat, komt het er met saties uit. En zelfs zonder html heb je dan alsnog je spaties, als het met een echo of print als output geeft.
Er zijn verschillende waarden die een variabele kan krijgen. Ik vraag in het formulier hoeveel onweer er op een moment was. Dat kan 1. geen zijn. 2. > 10 ontladingen per minuut 3. meer dan 20. enz. Het ziet er zo'n beetje uit:

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
<tr>
    <td width=400 class=text rowspan=4>
    <b>Onweer [hoogtepunt]:</b>
    </td>
    <td width=300 class=text>
    Geen
    </td>
    <td width=10>
    <input type="radio" name="onweer" value=geen>
    </td>
    </tr>
    <td width=300 class=text>
    Onweer meer dan 20 ontladingen per minuut
    </td>
    <td width=10>
    <input type="radio" name="onweer" value=meerdan20ontladingenperminuut>
    </td>
    </tr>
    <td width=300 class=text>
    Onweer meer dan 10 ontladingen per minuut
    </td>
    <td width=10>
    <input type="radio" name="onweer" value=meerdan10ontladingenperminuut>
    </td>
    </tr>
    <td width=300 class=text>
    Onweer minder dan 10 ontladingen per minuut
    </td>
    <td width=10>
    <input type="radio" name="onweer" value=minderdan10ontladingenperminuut>
    </td>
    </tr>

  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
Noork schreef op dinsdag 22 mei 2007 @ 22:20:
[...]

Doe eens dit
PHP:
1
<input type="radio" name="onweer" value="meer dan 20 ontladingen per minuut">
Werkt helaas niet, want dan wordt alleen 'meer' in de database opgeslagen. :/

  • Noork
  • Registratie: Juni 2001
  • Niet online
Waterspout schreef op dinsdag 22 mei 2007 @ 22:23:
[...]


Werkt helaas niet, want dan wordt alleen 'meer' in de database opgeslagen. :/
Wat is het datatype + lengte van je kolom?

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Values in HTML moeten tussen quotjes (helemaal met spaties)

Daarnaast lijkt me dit handiger om te inserten:

PHP:
1
$sql = "INSERT INTO categorie (onweer) VALUES('$onweer')";

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:27

crisp

Devver

Pixelated

Noork schreef op dinsdag 22 mei 2007 @ 22:20:
[...]

En het is misschien ook aardig om het wat meer te beveiligen tegen SQL injects
PHP:
1
$onweer =  htmlspecialchars($_POST['onweer']);
htmlspecialchars is niet bedoelt voor SQL-escaping...

Intentionally left blank


  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
fleppuhstein schreef op dinsdag 22 mei 2007 @ 22:19:
[...]


PHP:
1
2
3
4
5
<input type="radio" name="onweer" value="meer dan 20 ontladingen per minuut">

$onweer =  $_POST['onweer'];

$sql = "INSERT INTO categorie (onweer) VALUES(''$onweer'";


of


PHP:
1
2
3
4
5
6
7
<input type="radio" name="onweer" value="20">

$onweer =  $_POST['onweer'];

$db_input_onweer = "Meer dan " . $onweer . " ontladingen per minuut."

$sql = "INSERT INTO categorie (onweer) VALUES(''$onweer'";
Bedankt voor het meedenken alvast. Maar dit gaat niet werken, omdat de waarde ook 'geen" kan hebben. Er kan natuurlijk tijdens een stormchase ook wel eens geen onweer zijn waargenomen. Dus de waarde kan ook geen zijn.

  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
Noork schreef op dinsdag 22 mei 2007 @ 22:24:
[...]

Wat is het datatype + lengte van je kolom?
varchar 100

Verwijderd

Waterspout schreef op dinsdag 22 mei 2007 @ 22:23:
[...]


Werkt helaas niet, want dan wordt alleen 'meer' in de database opgeslagen. :/
Wat dan een oplossing kan zijn is:

<input type="radio" name="onweer" value="meer.dan.20.ontladingen.per.minuut">

Dus met puntjes werken
Daarna ff door een functie halen die de puntjes omzet naar spaties en dan ben je al een heel eind
Zo lastig is niet om een . te replacen naar een spatie lijkt me

  • Noork
  • Registratie: Juni 2001
  • Niet online
crisp schreef op dinsdag 22 mei 2007 @ 22:26:
[...]

htmlspecialchars is niet bedoelt voor SQL-escaping...
Ja idd, was even te gehaast. addslashes(); dan maar.
Verwijderd schreef op dinsdag 22 mei 2007 @ 22:30:
[...]
Wat dan een oplossing kan zijn is:

<input type="radio" name="onweer" value="meer.dan.20.ontladingen.per.minuut">

Dus met puntjes werken
Daarna ff door een functie halen die de puntjes omzet naar spaties en dan ben je al een heel eind
Zo lastig is niet om een . te replacen naar een spatie lijkt me
Haha, wel een hele mooie kunstgreep. :D Maar zoals BtM909 aangeeft, is de insert statement ook niet helemaal juist. Waarschijnlijk zit hier het euvel in.

[ Voor 56% gewijzigd door Noork op 22-05-2007 22:35 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:27

crisp

Devver

Pixelated

Noork schreef op dinsdag 22 mei 2007 @ 22:32:
[...]

Ja idd, was even te gehaast. addslashes(); dan maar.
die ook niet; doe maar mysql_(real_)escape_string() in het geval van een mysql database.

Intentionally left blank


  • Noork
  • Registratie: Juni 2001
  • Niet online
crisp schreef op dinsdag 22 mei 2007 @ 22:34:
[...]

die ook niet; doe maar mysql_(real_)escape_string() in het geval van een mysql database.
haha okay, weer wat geleerd. thnx

  • Gwaihir
  • Registratie: December 2002
  • Niet online
En zorg ervoor eerst even te kijken of magic_quotes_gpc aan staat en de "schade" daarvan zonodig met stripslashes te herstellen.

  • Waterspout
  • Registratie: November 2006
  • Laatst online: 10-03-2021
Mensen bedankt voor het meedenken. Het werkt nu. Ik gebruik de manier die speedydre noemde. Werkt perfect, mooie oplossing voor mijn situatie waar ik toch al een paar dagen mee zat!

Zo werkt 't nu:

PHP:
1
2
3
4
5
invoer:
<input type="radio" name="onweer" value=meer.dan.10.ontladingen.per.minuut>

uitdraai:
$chase['onweer'] = str_replace("."," ", $chase['onweer']);


:) :) :)

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Is het je niet opgevallen dat er in veel posts die zijn aangedragen quotes om de value heenstaan? Wanneer je die over zou nemen, kun je spaties in plaats van punten gebruiken.

HTML:
1
<input type="radio" name="onweer" value="meer dan 10 ontladingen per minuut">


In het topic is ook vaak genoemd dat die quotes er horen, en nu uiteindelijk laat je ze alsnog achterwege. Weet je zeker dat je ze bij eerdere pogingen wel had staan? Het zou namelijk prima verklaren waarom alleen het eerste woord in de DB terechtkomt.

[ Voor 31% gewijzigd door GlowMouse op 23-05-2007 00:12 ]


Verwijderd

Waterspout schreef op dinsdag 22 mei 2007 @ 22:22:

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
<tr>
    <td width=400 class=text rowspan=4>
    <b>Onweer [hoogtepunt]:</b>
    </td>
    <td width=300 class=text>
    Geen
    </td>
    <td width=10>
    <input type="radio" name="onweer" value=geen>
    </td>
    </tr>
    <td width=300 class=text>
    Onweer meer dan 20 ontladingen per minuut
    </td>
    <td width=10>
    <input type="radio" name="onweer" value=meerdan20ontladingenperminuut>
    </td>
    </tr>
    <td width=300 class=text>
    Onweer meer dan 10 ontladingen per minuut
    </td>
    <td width=10>
    <input type="radio" name="onweer" value=meerdan10ontladingenperminuut>
    </td>
    </tr>
    <td width=300 class=text>
    Onweer minder dan 10 ontladingen per minuut
    </td>
    <td width=10>
    <input type="radio" name="onweer" value=minderdan10ontladingenperminuut>
    </td>
    </tr>
gewoon quotes om de values heen, daar zit je fout.

dus:
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
<tr>
    <td width=400 class=text rowspan=4>
    <b>Onweer [hoogtepunt]:</b>
    </td>
    <td width=300 class=text>
    Geen
    </td>
    <td width=10>
    <input type="radio" name="onweer" value="geen">
    </td>
    </tr>
    <td width=300 class=text>
    Onweer meer dan 20 ontladingen per minuut
    </td>
    <td width=10>
    <input type="radio" name="onweer" value="meer dan 20 ontladingen per minuut">
    </td>
    </tr>
    <td width=300 class=text>
    Onweer meer dan 10 ontladingen per minuut
    </td>
    <td width=10>
    <input type="radio" name="onweer" value="meer dan 10 ontladingen per minuut">
    </td>
    </tr>
    <td width=300 class=text>
    Onweer minder dan 10 ontladingen per minuut
    </td>
    <td width=10>
    <input type="radio" name="onweer" value="minder dan 10 ontladingen per minuut">
    </td>
    </tr>


edit:
zoals glowmouse al zei..

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ik wil me er graag nog even tegenaan bemoeien.

HTML:
1
2
3
4
5
Aantal ontladingen per minuut:
<input type="radio" name="ontladingen" id="r0" value="0" /><label for="r0">Geen</label>
<input type="radio" name="ontladingen" id="r1" value="10" /><label for="r1">0-10</label>
<input type="radio" name="ontladingen" id="r2" value="20" /><label for="r2">11-20</label>
<input type="radio" name="ontladingen" id="r3" value="30" /><label for="r3">Meer dan 20</label>


En dan zet je je kolom fijn op integer, length 2.

[ Voor 11% gewijzigd door CodeCaster op 23-05-2007 01:44 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • B-Man
  • Registratie: Februari 2000
  • Niet online
CodeCaster schreef op woensdag 23 mei 2007 @ 01:43:
Ik wil me er graag nog even tegenaan bemoeien.

HTML:
1
2
3
4
5
Aantal ontladingen per minuut:
<input type="radio" name="ontladingen" id="r0" value="0" /><label for="r0">Geen</label>
<input type="radio" name="ontladingen" id="r1" value="10" /><label for="r1">0-10</label>
<input type="radio" name="ontladingen" id="r2" value="20" /><label for="r2">11-20</label>
<input type="radio" name="ontladingen" id="r3" value="30" /><label for="r3">Meer dan 20</label>


En dan zet je je kolom fijn op integer, length 2.
Hmmm, maak er dan meteen een ENUM van (in MySQL, anders een koppeltabel die de waarden 0, 10, 20 en 30 verklaart). Zonder ENUM of koppeltabel zit je in de database met redelijk cryptische waarden.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Liever cryptische waarden in mijn database dan teksten als "minder dan 10 ontladingen per minuut".

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Alleen het getal is nuttige data, de rest is verpakking (presentatie), dus sla gewoon een int in de DB op. Is ook leuker als je een keer je site in meer talen wil aanbieden, en zo zijn er nog 1001 voordelen. :P

En imo is een kolom genaamd 'AantalOntladingen' met type integer zo'n beetje de minst cryptische kolom ooit. ;)

TS: Als je je datatypes niet kent en je wel een boek hebt liggen: eerst inlezen over datatypes ipv aanprutsen. Die leestijd is totaal verwaarloosbaar tov de tijd die je anders uiteindelijk mag gaan steken in het oplossen allerlei shit. En lees wat over datamodellen.

{signature}


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Zie o.a. Voutloos dus. Met wat lezen, tutorials volgen e.d. moet je een heel eind komen. Je haalt nu verschillende zaken door elkaar en weet nu niet precies waar het zit. Gewoon beginnen bij de basis door eerst de syntax van PHP goe onder de knie te krijgen en vervolgens de koppeling met MySQl te gaan maken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.