Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

PHP Array zonder elements wil maar niet werken...

Pagina: 1
Acties:

  • sebasmac
  • Registratie: Februari 2010
  • Laatst online: 12:26
Beste mede tweakers,

Inmiddels heb ik er hoofdpijn van gekregen.. Ik ben al een paar avonden flink aan het stoeien met php array's nu is de boedeling dat ik een mysql loop maak dat die daar alle resultaten vandaan haalt en deze vervolgens netjes in een array zet en returnt naar het script wat de functie opvraagt.. dit gaat nu helemaal goed en hij laat ook keurig netjes de array zien met de opgevraagde resultaten. Nu heb ik alleen een probleem Hij laat ook de array elements mee. Om de functie te returne met de array erin gebruik ik Print_r. Maar dan laat die dus ook "Array ( [0] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => ) ) 1" dat zien...

Ik zat zelf al te denken om met preg_macth aan de gang te gaan maar dit beinvloed ook mijn resultaten uit de database.... Dus dit leek mij ook niet helemaal de oplossing

Is er iemand die mij hier mee kan helpen? Ik ben daar zeer dankbaar voor!

[ Voor 10% gewijzigd door sebasmac op 20-01-2013 21:25 ]


Verwijderd

Misschien is het handiger als je het script gedeelte plaatst van de functie die de data opvraagt en de functie die het moet tonen?

Dan kunnen mensen in ieder geval beter hulp bieden als nu, want nu is het gissen naar wat er eventueel fout moet gaan?

  • sebasmac
  • Registratie: Februari 2010
  • Laatst online: 12:26
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function informatie($userid){
$start = microtime(true);
$result = $this->send("SELECT * FROM `basaal` WHERE `userid` = $userid");
while($row = mysql_fetch_assoc($result)) {
    $eenheden = $row['eenheden'];
    $van = $row['van'];
    $tot = $row['tot'];
    $tabelvar[] = $tabel10 = "<tr><td>$eenheden</td><td>$van</td><td>$tot</td></tr>";
}   
$tabelvar = array($tabelvar);
//print_r($url_array);

foreach($tabelvar as $item) {
return printf($tabelvar);
}
}


EDIT:

En het andere script waarin de functie dan uiteindelijk aangeroepen word ziet er zo uit:

HTML:
1
2
3
4
5
6
7
8
<table border='1' WIDTH='200px'>
<tr>
<center><td>Eenheden</td></center>
<center><td>Van</td></center>
<center><td>Tot</td></center>
</tr>
<?php echo $db->informatie($userid); ?>
</table>


Dat is de functie waar het over gaat... Is dit voldoende informatie?

[ Voor 30% gewijzigd door RobIII op 20-01-2013 21:55 . Reden: Code tags toegevoegd ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Voor het plaatsen van code hebben we code tags ;)

Kijk eens wat je doet op regel 8 :?
PHP:
1
$tabelvar[] = $tabel10 = ...

Ik neem aan dat je dat niet bedoelt? Waar komt die variabele tabel10 überhaupt vandaan en waarom staat 'ie in die assignment van $tabelvar[]?

Overigens zie ik ook even niet waarom tabelvar een array zou moeten zijn, dan moet je 'm namelijk voordat de functie returned imploden (of functies die deze functie gebruiken dat laten doen). Waarom return je niet gewoon een string?

Verder return je in een foreach... je weet wat dat betekent? En waarom zou je een printf gebruiken als je in je template een echo gebruikt? De info uit je functie is dan al door die functie (door printf) ge-output en, als 't een beetje zinnige(re) code was geweest, een echo zou die gegevens at best nog een keer echo'en.

[ Voor 108% gewijzigd door RobIII op 20-01-2013 22:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • sebasmac
  • Registratie: Februari 2010
  • Laatst online: 12:26
Nee sorry dat is een foutje vanaf mijn kant... ik wilde eerst die variable gebruiken omdat stukje te echoen maar dit is uiteindelijk blijven staan.. Dat was inderdaad niet de bedoeling. Maar als ik het weg haal voegd dat ook helemaal niks toe aan de output van de array

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Ik zou je ook aanraden om naar iets als PDO te kijken. De `mysql_` functies zijn vanaf PHP5.4 (?!) deprecated en dat is met een reden. PDO ea. zijn veiliger en wellicht ook efficiënter.

http://php.net/manual/en/class.pdo.php

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Aloys schreef op zondag 20 januari 2013 @ 22:01:
Ik zou je ook aanraden om naar iets als PDO te kijken. De `mysql_` functies zijn vanaf PHP5.4 (?!) deprecated en dat is met een reden. PDO ea. zijn veiliger en wellicht ook efficiënter.

http://php.net/manual/en/class.pdo.php
Dat is nog wel 't minst van z'n problemen. TS mist een (behoorlijk) stuk basiskennis.
sebasmac schreef op zondag 20 januari 2013 @ 21:59:
Nee sorry dat is een foutje vanaf mijn kant... ik wilde eerst die variable gebruiken omdat stukje te echoen maar dit is uiteindelijk blijven staan.. Dat was inderdaad niet de bedoeling. Maar als ik het weg haal voegd dat ook helemaal niks toe aan de output van de array
Check ook even m'n edit.

Als je nou eens zoiets doet:
PHP:
1
2
3
4
5
6
7
8
9
10
11
function informatie($userid){ 
    $result = $this->send("SELECT * FROM `basaal` WHERE `userid` = $userid"); 
    while($row = mysql_fetch_assoc($result)) { 
        $eenheden = $row['eenheden']; 
        $van = $row['van']; 
        $tot = $row['tot']; 
        $tabelvar .= "<tr><td>$eenheden</td><td>$van</td><td>$tot</td></tr>"; 
    }    
    return $tabelvar;
    //rest van de meuk weg hier.
}

Ook is 't verstandig zinnige(re) functie/variabele-namen te verzinnen dan "send()", "informatie()" en tabelvar bijvoorbeeld. Ik denk dat je 't best eens even een boek over programmeren in z'n algemeen en daarna nog een boek over PHP specifiek leest.

[ Voor 63% gewijzigd door RobIII op 20-01-2013 22:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • sebasmac
  • Registratie: Februari 2010
  • Laatst online: 12:26
RobIII schreef op zondag 20 januari 2013 @ 22:01:
[...]

Dat is nog wel 't minst van z'n problemen. TS mist een (behoorlijk) stuk basiskennis.

[...]

Check ook even m'n edit.

Als je nou eens zoiets doet:
PHP:
1
2
3
4
5
6
7
8
9
10
11
function informatie($userid){ 
    $result = $this->send("SELECT * FROM `basaal` WHERE `userid` = $userid"); 
    while($row = mysql_fetch_assoc($result)) { 
        $eenheden = $row['eenheden']; 
        $van = $row['van']; 
        $tot = $row['tot']; 
        $tabelvar .= "<tr><td>$eenheden</td><td>$van</td><td>$tot</td></tr>"; 
    }    
    return $tabelvar;
    //rest van de meuk weg hier.
}

Ook is 't verstandig zinnige(re) functienamen te verzinnen dan "send()" en "informatie()".
Die printf was even een uitprobeersel omdat ik daar verschillende dingen over gelezen had.. Kan ik jouw even een DM sturen over het idee van de site? de printf is inmiddels een print_r geworden. Kwa kennis weet ik dat ik inderdaad een stuk mis. Maar al met al ben ik me druk door de nodige php boeken aan het worstelen ik wil graag die kennis in huis hebben.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
sebasmac schreef op zondag 20 januari 2013 @ 22:06:
Die printf was even een uitprobeersel omdat ik daar verschillende dingen over gelezen had.. Kan ik jouw even een DM sturen over het idee van de site?
Nee. Sorry, maar ik (noch anderen hier!) ben/zijn geen persoonlijke helpdesk ;) Los daarvan: als alles zich opeens in DM's gaat afspelen schieten mensen die in de toekomst middels de search/google/whatever op je topic stuiten niets op met je topic en (mogelijke) oplossing want die staat dan in "een DM ergens". Zie ook "mail/dm me" is ongewenst. Stel je voor dat iedereen dat deed, dan kon je googlen tot je een ons woog voor elk van je problemen; die kwam je dan misschien zat soortgelijke tegen maar allemaal zonder oplossing :X Handig! :P
sebasmac schreef op zondag 20 januari 2013 @ 22:06:
de printf is inmiddels een print_r geworden.
Die print_r is hooguit voor debuggen handig (Debuggen: Hoe doe ik dat?), maar die hoort dus niet in die functie thuis.

[ Voor 29% gewijzigd door RobIII op 20-01-2013 22:11 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • sebasmac
  • Registratie: Februari 2010
  • Laatst online: 12:26
RobIII schreef op zondag 20 januari 2013 @ 22:07:
[...]

Nee. Sorry, maar ik (noch anderen hier!) ben/zijn geen persoonlijke helpdesk ;) Los daarvan: als alles zich opeens in DM's gaat afspelen schieten mensen die in de toekomst middels de search/google/whatever op je topic stuiten niets op met je topic en (mogelijke) oplossing want die staat dan in "een DM ergens". Zie ook "mail/dm me" is ongewenst. Stel je voor dat iedereen dat deed, dan kon je googlen tot je een ons woog voor elk van je problemen; die kwam je dan misschien zat soortgelijke tegen maar allemaal zonder oplossing :X Handig! :P
Ik begrijp je punt! ik heb jouw functie doorgevoerd en het ziet er een stuk beter uit! ontzettend bedankt voor je hulpt! en nu snel me PHP boeken maar weer in ;) haha

fijne avond!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
sebasmac schreef op zondag 20 januari 2013 @ 22:10:
ik heb jouw functie doorgevoerd en het ziet er een stuk beter uit!
Ik hoop alleen dat je er iets van opgestoken hebt en inziet waar nu je probleem/problemen in zat/zaten. Want doorgaans zijn we hier niet zo heel happig op 't aanreiken van kant-en-klare oplossingen op een zilveren dienblaadje ;) Het was in dit geval gewoon luiheid mijnerzijds de correcte(re) code te posten dan dieper op de problemen in je code in te gaan.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Je zou het ook zo kunnen doen, scheelt je een stuk meer aan type werk.
PHP:
1
2
3
4
5
6
7
8
9
<?php
function informatie($userid){ 
    $result = $this->send("SELECT * FROM `basaal` WHERE `userid` = $userid"); 
    while($row = mysql_fetch_assoc($result)) { 
        $tabelvar .= "<tr><td>". $row['eenheden'] ."</td><td>". $row['van'] ."</td><td>". $row['tot'] ."</td></tr>"; 
    }    
    return $tabelvar;
}
?>


Kleinigheidje, maar wat doe je als er geen data uitkomt?

[ Voor 6% gewijzigd door Verwijderd op 21-01-2013 11:24 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat nog niet aangekaart is, maar waar Aloys waarschijnlijk wel op doelt, en wat niet helemaal uit de gegeven code is af te leiden is dat er mogelijk kans is op SQL Injection. Als TS ervoor zorgt dat de param $userid altijd een int is (door gebruik van intval() bijv.) dan is er niets aan de hand, maar 't moest wel nog even gezegd. Persoonlijk vind ik 't, in dit geval, de verantwoordelijkheid van de method informatie() dat er over $userid nog even een intval() wordt getrokken of, hell, desnoods een exception gegooid wanneer $userid geen geldige integer oid. is.

Ook zie ik, omdat er nergens iets escaped wordt, kans op XSS. Het is niet gezegd dat 't zo is, maar de kans is wél aanwezig.

[ Voor 30% gewijzigd door RobIII op 21-01-2013 11:40 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1