[XAMPP] php scripts werken maar half

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Boyd
  • Registratie: Januari 2006
  • Laatst online: 07:27
Ik heb een php script gemaakt voor het bedrijf waar ik stage loop. Daarvoor maak ik gebruik van php en mysql.

Het script bestaat uit 2 onderdelen; namelijk de lijst voor de gebruikers en een admin gedeelte.
Ik heb eerst het script gemaakt en getest op mijn eigen webhosting (betaalde hosting bij een provider). Daar werkt het script helemaal super, je kunt nummers bekijken, zoeken, toevoegen, aanpassen, verwijderen, etc.

Nu draait het script op een server hier intern (niet zo handig om telefoonnummers op internet te zetten), en op die server draait XAMPP. Na het uploaden van het script en het importeren van de mysql database, kwamen we wat problemen tegen. De gebruikerslijst werkt prima, je kunt alle nummers zien en ook de zoekfunctie werkt. Maar het admin gedeelte werkt niet goed meer, zodra je een telefoonnummer wilt bewerken en je drukt op de knop "updaten", refresht de pagina een keer maar gebeurd er niks. Ik heb het script nogmaals bij een andere hostingprovider geupload, daar werkt het wel gewoon.

Als ik in XAMPP iets aanvink dat hij errors laat zien, staat er (bijna) onder elke pagina de volgende fout:

Warning: (null)(): 1 result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query() in Unknown on line 0

Het lijkt mij niet dat het aan het script ligt, deze werkt namelijk super op 2 betaalde hostingpakketten, maar dus niet op de XAMPP server hier lokaal. Ik ben dezelfde fout met ook XAMPP in google een aantal keer tegen gekomen, maar meestal op forums die vrij onbezocht zijn, waarbij er dus geen reactie is. Hopelijk kan iemand me hier helpen.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Zonder relevante code en/of andere relevante informatie wordt dit toch echt koffiedik kijken.

Welke versies van PHP draaien er op de servers waar het al dan niet werkt, welke functies gebruik je die eventueel niet ondersteund worden...

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


Acties:
  • 0 Henk 'm!

  • Boyd
  • Registratie: Januari 2006
  • Laatst online: 07:27
Dit is de code voor het wijzigen van een telefoonnummer:

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
<?php include ("menu_beheer.php"); ?>
<?php include ("config.php"); ?>
<?php
$id = $_GET["id"];
$query = "SELECT * FROM gegevens WHERE id = $id";
$result = mysql_query($query) or die ("Fout: " .mysql_error());
while (list($id, $naam, $nummer) = 
mysql_fetch_row($result)){

echo"<form name=\"updaten\" method=\"post\" action=\"wijzigen.php?id=".$_GET["id"]."\">
  <table width=\"50%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
    <tr> 
      <td height=\"24\"></td>
      <td></td>
    </tr>
    <tr> 
      <td width=\"10%\">Naam</td>
      <td width=\"25%\"><input name=\"naam\" id=\"naam\" maxlength=\"40\" type=\"text\" size=\"40\" value=\"$naam\"></td>
    </tr>
    <tr> 
      <td width=\"10%\">Nummer</td>
      <td width=\"25%\"><input name=\"nummer\" id=\"nummer\" maxlength=\"40\" type=\"text\" size=\"40\" value=\"$nummer\"></td>
    </tr>
    <tr> 
      <td height=\"24\"> <input name=\"updaten\" type=\"submit\" id=\"updaten\" value=\"Updaten\">
         </td>
      <td>&nbsp;</td>
    </tr>
  </table>
</form>";
}

if($updaten) {
if($_POST['nummer'] ==""){
echo 'Je hebt geen telefoonnummer ingevult!';
}


$query="UPDATE gegevens set
naam = '". $_POST["naam"] ."',
nummer = '". $_POST["nummer"] ."'
WHERE id='". $_GET["id"] ."'";
$result = mysql_query($query) or die (mysql_error());
echo ("De opdracht is uitgevoerd.<br>");
if ($result){
echo ("Record nummer " .$_GET['id'] . " is bijgewerkt<br>");
}
}

?>
<?php include ("link_onder.php"); ?>


Verder draait op 1 van mijn hosting php4, en op de andere php5.
XAMPP draait ook 5. zelfde versienummer als op mijn hosting.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

PHP:
1
if($updaten)

kijk eens naar register_globals...

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

crisp schreef op maandag 03 december 2007 @ 08:54:
(...)
kijk eens naar register_globals...
En daarna naar escaping en SQL injection :X

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


Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

en dit kun je ook anders schrijven:

PHP:
1
2
3
4
5
6
7
8
9
10
if($updaten) { 
if($_POST['nummer'] ==""){ 
echo 'Je hebt geen telefoonnummer ingevult!'; 
} 

// kan ook als

if($updaten && $_POST['nummer'] == '') {
  echo 'Je hebt geen telefoonnummer ingevult!'; 
}

Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

super-muffin schreef op maandag 03 december 2007 @ 09:42:
en dit kun je ook anders schrijven:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if($updaten) { 
if($_POST['nummer'] ==""){ 
echo 'Je hebt geen telefoonnummer ingevult!'; 
} 

// kan ook als

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (empty($_POST['nummer']) && !isset($_POST['nummer'])) {
  echo 'Je hebt geen telefoonnummer ingevult!'; 
}
else
{
 // processen
}
}
Nog beter zelfs, zie de code

[ Voor 8% gewijzigd door sky- op 03-12-2007 09:48 ]

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


Acties:
  • 0 Henk 'm!

Verwijderd

Misschien ook eens zoals de error al aangeeft mysql_free_result gebruiken ipv mysql_fetch_row?

Acties:
  • 0 Henk 'm!

  • Boyd
  • Registratie: Januari 2006
  • Laatst online: 07:27
crisp schreef op maandag 03 december 2007 @ 08:54:
PHP:
1
if($updaten)

kijk eens naar register_globals...
Dat was het! Bedankt :)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
k8skaaay schreef op maandag 03 december 2007 @ 09:47:
[...]
Nog beter zelfs, zie de code
Alleen al de empty() check volstaat. Jouw check is redundant.
offtopic:
En het moet ingevuld zijn... ;)
Voor de zekerheid nog even expliciet: slechte oplossing: register_globals aanzetten. Goede oplossing: $_GET, $_POST etc. gebruiken en user input goed controleren.

{signature}


Acties:
  • 0 Henk 'm!

  • Boyd
  • Registratie: Januari 2006
  • Laatst online: 07:27
Tweakers, bedankt voor de hulp, maar register_globals was voldoende. Zoals jullie hebben kunnen lezen wordt het script niet op het internet gegooid, maar alleen hier lokaal op een server. Dit is voor 200 medewerkers te zien. Het gaat niet om een ict bedrijf, maar om een planten import/export bedrijf. Er zitten dus 200 echte gebruikers (lees: leken) achter een pc.

Ten eerste weten ze niet wat een sql_injection is, ten tweede heeft het geen nut om het te doen, ten derde is het zo nodig om met een dna server te communiceren (onze telefooncentrale).

Oplossing is er, topic kan dicht dus. Of in ieder geval geen reacties meer. :)

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Nofi, maar dat is dus kortzichtig. Register_globals is niet alleen een veiligheidslek, als je $_GET en $_POST etc. gebruikt zie je ook gewoon beter waar elke var vandaan komt, is het programmeren makkelijker en met een beetje mazzel heb je daarom ook minder bugs. En last but not least, register_globals is dus default uit en zal ook bij een toekomstige versie verdwijnen (godzijdank). Nu denk je er aan, en als je het nu rechtzet, wat helemaal niet zo veel werk hoeft te zijn, baal je in de toekomsthier niet van. :)

En het is misschien geen ict bedrijf, maar jij noemt jezelf wel webdesigner, dus bedrijf mag het imo wel van jou verwachten dat je een beetje nette stijl hebt. :Y)

[ Voor 13% gewijzigd door Voutloos op 03-12-2007 14:50 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Boyd
  • Registratie: Januari 2006
  • Laatst online: 07:27
Voutloos schreef op maandag 03 december 2007 @ 14:47:

En het is misschien geen ict bedrijf, maar jij noemt jezelf wel webdesigner, dus bedrijf mag het imo wel van jou verwachten dat je een beetje nette stijl hebt. :Y)
Webdesign heeft totaal niks te maken met wat ik hier doe. Dit is mijn stageperiode als systeembeheerder. webdesign is hobby. php valt niet onder webdesign.

Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
Gamepie56 schreef op maandag 03 december 2007 @ 08:51:
PHP:
1
2
3
4
if($updaten) {
if($_POST['nummer'] ==""){
echo 'Je hebt geen telefoonnummer ingevult!';
}
Spelfout:
PHP:
1
2
3
4
if ($updaten) {
if ($_POST['nummer'] =="") {
    echo 'Je hebt geen telefoonnummer ingevuld!';
}

Acties:
  • 0 Henk 'm!

  • Boyd
  • Registratie: Januari 2006
  • Laatst online: 07:27
Dankje :P

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Gamepie56 schreef op maandag 03 december 2007 @ 15:17:
[...]
Webdesign heeft totaal niks te maken met wat ik hier doe. Dit is mijn stageperiode als systeembeheerder. webdesign is hobby. php valt niet onder webdesign.
offtopic:
Het is niet echt 'front-end' werk, maar PHP voor een dynamische site gebruiken zit toch dichter tegen webdesign dan systeembeheer aan. Aan de andere kant, security serieus nemen is toch zeker iets wat een systeembeheerder (ook) moet doen. ;)

Maar goed, ik hou er over op, ik heb het aangegeven en je moet zelf weten wat je ermee moet doen. Als je maar niet ten tijde van PHP6 hier een topic opent over het niet meer werken van register_globals. ;)

{signature}

Pagina: 1