Toon posts:

[PHP] Fout in PHP pagina.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hai, ik heb in PHP een pagina gemaakt en die zit vast aan een database. Maar nu geeft hij heel raar een fout.
quote: Internet Explorer 5
Warning: Supplied argument is not a valid MySQL result resource in c:\website\wwwroot\thumb.php on line 19

Warning: Cannot add header information - headers already sent by (output started at c:\website\wwwroot\thumb.php:19) in c:\website\wwwroot\thumb.php on line 39
en ik zal hier de script weergeven.

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
<?
// id uitlezen uit URL
if (isset($_GET['page'])) {
    $page = $_GET['page'];
} else {
    header('Location: index.html');
    exit;
}

// db verbinding
mysql_connect("localhost");
mysql_select_db("SkinAgency");

// db tabel ophalen
$sql = "SELECT * FROM modellen WHERE page=$page";
$result = mysql_query($sql);

// db gegevens verwerken
if ($rij = mysql_fetch_row($result)) {
    // record gevonden
    $id = $rij[0];
    $name = $rij[1];
    $height = $rij[2];
    $bust = $rij[3];
    $waist = $rij[4];
    $hips = $rij[5];
    $shoes = $rij[6];
    $hair = $rij[7];
    $eyes = $rij[8];
    $sex = $rij[9];
    $palaroid = $rij[10];
    $shoot1 = $rij[11];
    $shoot2 = $rij[12];
    $shoot3 = $rij[13];
    $thumb = $rij[14];
    $page = $rij[15];
} else {
    // record niet gevonden
    header("Location: model.php?id=1");
    exit;
}
?>


ik zal voor de zekerheid ook het script plaatsen waarvoor dit dient.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<? 
echo "
<tr>
<td>
[img]\"'.$thumb.';\"[/img]
</td>
</tr>
<tr>
<td>
'.$name.';
</td>
</tr>
";
?>


kan iemand mij hierbij helpen?
bvd.

Yorick

  • HunterPro
  • Registratie: Juni 2001
  • Niet online
pak eens [php] tags?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 29-08 22:51

D2k

or die(mysql_error()) achter je query zetten svp

Doet iets met Cloud (MS/IBM)


Verwijderd

Waar zit regel 19 ?

Oh ja, vervang mysql_fetch_row($result) door mysql_fetch_array($result) :)

En kan ie wel inloggen op je database? Heeft de user de juiste rechten op de database? Kijk eens in je mysql.log: daar staat in dat ie verbind met de database en met welke user :)

[ Voor 0% gewijzigd door Verwijderd op 20-10-2002 14:09 . Reden: Iets vergeten ]


  • HunterPro
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 20 oktober 2002 @ 14:08:
Waar zit regel 19 ?

Oh ja, vervang mysql_fetch_row($result) door mysql_fetch_array($result) :)

En kan ie wel inloggen op je database? Heeft de user de juiste rechten op de database? Kijk eens in je mysql.log: daar staat in dat ie verbind met de database en met welke user :)
hij hoeft van die if alleen maar een while te maken; dan zou dat loopje moeten werken (mits de query data terug geeft).

Verwijderd

Topicstarter
ik heb even mijn bericht aangepast, nu moet ie wat duidelijker zijn. En ik heb geen inlog informatie nodig voor de database vreemd genoeg.

  • HunterPro
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 20 oktober 2002 @ 14:15:
ik heb even mijn bericht aangepast, nu moet ie wat duidelijker zijn. En ik heb geen inlog informatie nodig voor de database vreemd genoeg.
Maak van dit

PHP:
1
if ($rij = mysql_fetch_row($result)) {


eens dit:

PHP:
1
while ($rij = mysql_fetch_row($result)) {

Verwijderd

Topicstarter
hai, ja ik test net mijn script maar dan alle lege regels weggelaten om te kijken of hij dan nog steeds de zelfde regel als fout geeft!
Ja dus...dit keer regel 16 en daar staat dit

PHP:
1
if ($rij = mysql_fetch_row($result)) {


het zelfde als op m'n oude script op regel 19 mischien helpt dit.

  • HunterPro
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 20 oktober 2002 @ 14:20:
hai, ja ik test net mijn script maar dan alle lege regels weggelaten om te kijken of hij dan nog steeds de zelfde regel als fout geeft!
Ja dus...dit keer regel 16 en daar staat dit

PHP:
1
if ($rij = mysql_fetch_row($result)) {


het zelfde als op m'n oude script op regel 19 mischien helpt dit.
dat zeg ik, maak daar nou van wat ik hierboven zei:
|HunterPro| schreef op 20 oktober 2002 @ 14:18:
[...]


Maak van dit

PHP:
1
if ($rij = mysql_fetch_row($result)) {


eens dit:

PHP:
1
while ($rij = mysql_fetch_row($result)) {
dat staat nu dus op regel 16 (stond op regel 19).

[EDIT]

nog makkelijker: haal heel die if-structuur weg, en maak er van:
PHP:
1
2
3
4
5
6
$rij = mysql_fetch_row($result);
en dan if (!$rij) {
// naar je id=1
}
echo $rij[0];
// etc

Verwijderd

Topicstarter
ik heb de
PHP:
1
if ($rij = mysql_fetch_row($result)) {
vervangen door de
PHP:
1
while ($rij = mysql_fetch_row($result)) {
en dat gaf dit als resultaat:
Parse error: parse error in c:\website\wwwroot\thumb.php on line 34
en dit is het script (zoals het nu is!)

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
<?
// id uitlezen uit URL
if (isset($_GET['page'])) {
    $page = $_GET['page'];
} else {
    header('Location: index.html');
    exit;
}
// db verbinding
mysql_connect("localhost");
mysql_select_db("SkinAgency");
// db tabel ophalen
$sql = "SELECT * FROM modellen WHERE page=$page";
$result = mysql_query($sql);
// db gegevens verwerken
while ($rij = mysql_fetch_row($result)) {
    // record gevonden
    $id = $rij[0];
    $name = $rij[1];
    $height = $rij[2];
    $bust = $rij[3];
    $waist = $rij[4];
    $hips = $rij[5];
    $shoes = $rij[6];
    $hair = $rij[7];
    $eyes = $rij[8];
    $sex = $rij[9];
    $palaroid = $rij[10];
    $shoot1 = $rij[11];
    $shoot2 = $rij[12];
    $shoot3 = $rij[13];
    $thumb = $rij[14];
    $page = $rij[15];
} else {
    // record niet gevonden
    header("Location: model.php?id=1");
    exit;
}
?>


dus de fout is de
PHP:
1
} else {
blijkbaar, dus die moet ik dan weghalen?

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 01-03 18:17
Ja die else zal je weg moeten halen als je met while werkt... heb namelijk nog nooit van een while/else loop gehoord ;)

Kijk hier voor een uitleg van de control structures in PHP: http://www.php.net/manual/nl/control-structures.php

Verwijderd

En single quote je $page in je sql query
PHP:
1
2
$sql = "SELECT * FROM modellen WHERE page='$page'"; // hier dus!
$result = mysql_query($sql);

Verwijderd

Topicstarter
ok, ik heb dus die else weg gehaalt, dan geeft hij dit:
Warning: Supplied argument is not a valid MySQL result resource in c:\website\wwwroot\thumb.php on line 16
en een gedeelte van de site.

En dit is de code nu
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
<?
// id uitlezen uit URL
if (isset($_GET['page'])) {
    $page = $_GET['page'];
} else {
    header('Location: index.html');
    exit;
}
// db verbinding
mysql_connect("localhost");
mysql_select_db("SkinAgency");
// db tabel ophalen
$sql = "SELECT * FROM modellen WHERE page=$page";
$result = mysql_query($sql);
// db gegevens verwerken
while ($rij = mysql_fetch_row($result)) {
    // record gevonden
    $id = $rij[0];
    $name = $rij[1];
    $height = $rij[2];
    $bust = $rij[3];
    $waist = $rij[4];
    $hips = $rij[5];
    $shoes = $rij[6];
    $hair = $rij[7];
    $eyes = $rij[8];
    $sex = $rij[9];
    $palaroid = $rij[10];
    $shoot1 = $rij[11];
    $shoot2 = $rij[12];
    $shoot3 = $rij[13];
    $thumb = $rij[14];
    $page = $rij[15];
}
?>

Verwijderd

Topicstarter
Verwijderd schreef op 20 oktober 2002 @ 14:46:
En single quote je $page in je sql query
PHP:
1
2
$sql = "SELECT * FROM modellen WHERE page='$page'"; // hier dus!
$result = mysql_query($sql);
ik heb dit nu ook gedaan, nu geeft hij geen fouten! THanks!! Maar ik heb het gevoel dat hij straks toch weer fouten gaat geven!
Alsnog bedankt!

  • Tom-my
  • Registratie: November 2000
  • Laatst online: 19-06 09:25

Tom-my

w03iz0rz

Verwijderd schreef op 20 oktober 2002 @ 14:53:
[...]


ik heb dit nu ook gedaan, nu geeft hij geen fouten! THanks!! Maar ik heb het gevoel dat hij straks toch weer fouten gaat geven!
Alsnog bedankt!
waarom dan

"Then there was the man who drowned crossing a stream with an average depth of six inches."


  • schijndel
  • Registratie: Juni 1999
  • Laatst online: 29-08 02:42
Zet voor je de query uitvoert in je pagina eens een :
code:
1
 echo $sql;

controleer of dit een goede query is, ergo of $page echt vervangen is door een waarde.
Klopt je query? Open dan eens een mysql client, connect naar je db, gebruik database SkinAgency (\u SkinAgency). en geef vervolgens eens de output van:
code:
1
 show TABLES;
en van
code:
1
 describe modellen;
Begin het idee te krijgen dat je query niet aansluit bij de structuur van je db.

Verwijderd

Topicstarter
ok, yup ik heb weer een fout, nou eigenlijk een vraag! ik heb namelijk een thumnail nodig die wordt gegenereerd door PHP via een Database. Een plaatje en een naam, dat lukt nog wel. Maar hoe laat ik het een tabel genereren met daarin cellen waarin dat plaatje dus staat met de naam er onder? Het tabel mag max 5 cellen breed zijn en 6 cellen hoog.
Kan iemand mij daarmee helpen?


de plaatjes en naam code heb ik al!

PHP:
1
2
3
4
// het plaatje
<img scr="<? echo "'.$thumb.'"?>" height="100" width="100"">
// de naam
<? echo "'.$name.'" ?>

Verwijderd

Tables?! kom op joh, basale html

code:
1
2
3
4
<table border="1" cellspacing="0" cellpadding="0">
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
</table>


En dan mag je zelf verzinnen hoe en waar je de plaatjes er tussen gaat mikken. Trouwens, die plaatjes code van je gaat zeker niet werken. Ik heb het vast voor je verbeterd (let bijv eens op de src en de scr).

PHP:
1
2
3
echo "[img]\"".$thumb."\"[/img]";
// de naam 
echo $name;

Zou moeten werken.

Verwijderd

Topicstarter
Verwijderd schreef op 20 oktober 2002 @ 17:30:
Tables?! kom op joh, basale html

code:
1
2
3
4
<table border="1" cellspacing="0" cellpadding="0">
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr>
</table>


En dan mag je zelf verzinnen hoe en waar je de plaatjes er tussen gaat mikken. Trouwens, die plaatjes code van je gaat zeker niet werken. Ik heb het vast voor je verbeterd (let bijv eens op de src en de scr).

PHP:
1
2
3
echo "[img]\"".$thumb."\"[/img]";
// de naam 
echo $name;

Zou moeten werken.
ja typo :( sorry

ja ik kan wel tabbellen maken enzo, maar hoe laat ik 'm het doorgeneren? Dus als er maar 2 plaatjes + namen zijn dat hij maar 2 cellen weergeeft en als het er meer zijn dan 6 dat hij een nieuwe regel maakt met 1 cel :) want anders kan ik net zo goed alles gewoon telkens updaten, en dat wil ik niet. Want het zit vast aan een database.

Verwijderd

TIP:
Gebruik list in samenwerking met fetch_array

PHP:
1
2
3
while(list($id,$name,$height, $bust, $waist) = mysql_fetch_array($sql){
    //Blaat doet een schaap
}

Verwijderd

Topicstarter
ik begrijp niet wat je bedoeld, sorry TimD

  • schijndel
  • Registratie: Juni 1999
  • Laatst online: 29-08 02:42
list is volgens mij niet eens nodig:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
while($data=mysql_fetch_array($sql){
        echo "<tr>\n";
        echo "<td>\n";
        echo "[img]\"".$data[thumb]."\"[/img]"; 
        echo "</td>\n";
        echo "<td>\n";
        echo $data[naam]; 
        echo "</td>\n";
        echo "</tr>\n";
}
?>

zou ook gewoon moeten werken. Nu heb je weliswaar de plaatjes met de naam ernaast. Maar dat los je zelf wel op neem ik aan... had code al getikt toen ik zag dat je de naam eronder wilde hebben.

succes

[ Voor 0% gewijzigd door schijndel op 21-10-2002 16:41 . Reden: wat quotes vergeten ]


Verwijderd

Topicstarter
ja dat fix ik wel ja dat het er er onder komt, alleen hoe laat ik cellen naast elkaar maken en daarna er onder?

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
echo("<table><tr>");
while($r = mysql_fetch_array($q)) {
  $i++;
  if ($i == 3) {
    echo("</tr><tr>");
    $i = 0;
  }
  echo ("<td>thumbgeblaat</td>");
}
echo ("<td colspan='" . (3 - $i) . "'>&nbsp;</td></tr>");


Zoiets? Is wel heel beginnend PHP hoor... maar iedereen moet het leren :) suukses _/-\o_

[ Voor 0% gewijzigd door Verwijderd op 21-10-2002 19:22 . Reden: Toevoeginkje :) ]


Verwijderd

is er wel een tabel die modellen heet.
Want vaak maak ik vanuit php een tabel aan maar dat gaat niet goed. maar dan gaat de query voor het eruit halen ook fout . en dan krijg je die foutmelding die jij gaf.

En die header output error is niet moeilijk. want omdat je output heb gekregen van php (die fetch_row error) mag hij header niet gebruiken.

Oplossing :

Kijk even na of de tabellen er wel zijn.

Verwijderd

Ik zie maar 1 probleem hier. Dat hij een foutmelding geeft waar je verwacht dat een foutmelding komt. Dus als je daar nou een @ voor zet dan geeft dat geen output en is er nog niks voordat de headers verzonden verstuurd. Vb:

PHP:
19
if ($rij = @mysql_fetch_row($result)) {


Kwestie van 1 teken.

Verwijderd

Topicstarter
Verwijderd schreef op 21 oktober 2002 @ 19:19:
PHP:
1
2
3
4
5
6
7
8
9
10
echo("<table><tr>");
while($r = mysql_fetch_array($q)) {
  $i++;
  if ($i == 3) {
    echo("</tr><tr>");
    $i = 0;
  }
  echo ("<td>thumbgeblaat</td>");
}
echo ("<td colspan='" . (3 - $i) . "'>&nbsp;</td></tr>");


Zoiets? Is wel heel beginnend PHP hoor... maar iedereen moet het leren :) suukses _/-\o_
jaaa, iedereen moet het leren ja, alleen ik vat het niet helemaal...sorry...ik kan wel knippen plakken, maar ik wil graag weten wat ik doe dat :D:D

  • packman
  • Registratie: November 2000
  • Laatst online: 17-12-2024
Verwijderd schreef op 20 oktober 2002 @ 14:46:
En single quote je $page in je sql query
PHP:
1
2
$sql = "SELECT * FROM modellen WHERE page='$page'"; // hier dus!
$result = mysql_query($sql);
ik zou daar minstens van maken:

PHP:
1
2
$sql = "SELECT * FROM modellen WHERE page='".addslashes($page)."'"; // hier dus!
$result = mysql_query($sql);


Dit voorkomt dat iemand urlencoded SQL statements in je $page variabele kan zetten in de urlbalk. Als ik bvb
code:
1
5'; drop database SkinAgency; --

zou urlencoden, ik sluit dus uw opening ' quote af, en begin een 2de sql commando door een ; erachter te zetten, en -- erachter om alles wat daar eventueel nog op zou kunnen volgen als SQL commentaar te laten aanduiden. De urlencoded versie van de string wordt dan:
code:
1
5%27%3B+drop+database+SkinAgency%3B+--

oplevert en dan uw url eventjes zoals het volgt vorm:

dezepagina.php?page=5%27%3B+drop+database+SkinAgency%3B+--

dan heb je een groot probleem - want dan drop ik je database als de user waarmee je inlogt bent op de database de rechten heeft dat te doen...

Security is iets wat door vele mensen serieus onderschat wordt. Je zou niet geloven hoeveel sites je op zo'n manier down krijgt. Als je bvb op een site een SQL fout kan laten genereren die te maken heeft met een user table en de admin flag kan je jezelf admin maken, en eventueel andere mensen admin-af maken, wat meestal niet de bedoeling is ;)

Conclusie: never ever trust user input - vanwaar deze ook komt, post (zelfs met velden met gelimiteerde lengte in html code etc - kan simpel gefaked worden), get of cookie variabelen.

Bij wat je hier gebruikt zou eigenlijk de volgende code beter zijn bij het assignen van de $page variabele, dan moet je de addslashes niet meer uitvoeren, want dan weet je zeker dat het een numerieke waarde is dat je in je $page variabele steekt, en geen SQL statement dat onbedoeld uit kan worden gevoerd...
PHP:
1
2
3
4
5
6
if ( (isset($_GET['page'])) && (is_numeric($_GET['page'])) ) {
    $page = $_GET['page'];
} else {
    header('Location: index.html');
    exit;
}

[ Voor 0% gewijzigd door packman op 25-10-2002 02:50 . Reden: effe iets duidelijker gemaakt ]

I heard if you play the XP CD backwards, you get a satanic message. Thats nothing compared to what happens if you play it forward, then it installs Windows XP born2oc.be - Facts Of Life


Verwijderd

Topicstarter
Verwijderd schreef op 21 oktober 2002 @ 19:19:
PHP:
1
2
3
4
5
6
7
8
9
10
echo("<table><tr>");
while($r = mysql_fetch_array($q)) {
  $i++;
  if ($i == 3) {
    echo("</tr><tr>");
    $i = 0;
  }
  echo ("<td>thumbgeblaat</td>");
}
echo ("<td colspan='" . (3 - $i) . "'>&nbsp;</td></tr>");


Zoiets? Is wel heel beginnend PHP hoor... maar iedereen moet het leren :) suukses _/-\o_
ik heb dat scriptje gebruikt maar aangepast :D duhh.... en het is nu zo..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
echo("<table><tr>"); 
while ($rij = mysql_fetch_row($result)) {
    // record gevonden
    $id = $rij[0];
    $name = $rij[1];
    $thumb = $rij[14];
    $page = $rij[15];
    $i++; 
    if ($i == 3) { 
    echo("</tr><tr>"); 
    $i = 0; 
  } 
  echo ("<td><img scr=\"$thumb\" width=\"100\" height=\"100\"></td>"); 
} 
echo ("<td colspan='" . (3 - $i) . "'>$name</td></tr></table>");
?>



maar hij geeft dan het aantal plaatjes weer van de aantal records met die $page maar alleen 1 naam en hij zet alles naast elkaar. What to do? Ik snap er nu helemaal niks meer van..iemand alsjeblieft!! Ik heb 2 php boeken, maar daarin staat niks.

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
ff uit het blote hoofd....
PHP:
1
2
3
4
5
6
7
8
9
10
echo "<table><tr>";
$i=0;
while($arr=mysql_fetch_array($result)){
  if($i++==3){
    echo "</tr><tr>";
    $i=0;
  }
  echo "<td>[img]\""[/img]</td>";
}
echo "</tr></table>";

Verwijderd

Topicstarter
/dev/null schreef op 25 oktober 2002 @ 16:57:
ff uit het blote hoofd....
PHP:
1
2
3
4
5
6
7
8
9
10
echo "<table><tr>";
$i=0;
while($arr=mysql_fetch_array($result)){
  if($i++==3){
    echo "</tr><tr>";
    $i=0;
  }
  echo "<td>[img]\""[/img]</td>";
}
echo "</tr></table>";
ok bedankt!!! maar alleen nu staat er 10 records met plaatjes die hij moet ophalen, dat lukt! Maar hij zet de eerste 3 netjes neer en dan een nieuwe regel, alleen daar zet hij er 4 neer...en dan een nieuwe regel en daar staan er weer 3. Hoe komt dat? Ik snap er geen hol van.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Hij zou er elke keer 4 neer moeten zetten volgens mij...
Humm, nee.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$i = -1;
$j = 0;
while(++$j < 20)
{
  if(++$i == 3)
  {
        echo "\n";
        $i=0;
  }
  echo " $i ";
}
?>

Let op de omgekeerde ++$i vs $i++
Daardoor wordt er elke keer tot 3 geteld en de volgende iteratie is de $i == 3 pas true
Kortom, 0, 1, 2, 3 = 4 velden.
Ipv de gewenste 0, 1, 2 = 3 velden (wat je krijgt door de ++$i wat een andere evaluatie volgorde oplevert).
Door het op 0 zetten van de $i krijg je ook nog een keer dus de 0 mee, ipv de 1 gelijk. Maar omdat er eerst $i++ gedaan wordt gaat dat met de eerste iteratie fout...

* ACM prefereert overigens:
PHP:
1
2
3
4
5
6
7
8
9
$i = 0;
while($iets)
{
    if($i % 3 == 0)
    { // Code voor als $i een veelvoud van 3 is
    }
    // Code voor de rest
   $i++;
}
Pagina: 1