Ik loop nog tegen een probleempje op. Ik krijg na het uploaden van een foto nog de volgende error: Warning: mysql_db_query(): supplied argument is not a valid MySQL-Link resource in /home/a9533661/public_html/loggedin/add_bedrijf.php on line 148 (Hier is dit lijn 152 in het onderste php script)

Ik heb al een aantal dingen geprobeerd om dus achter de mysql_db_query($dbname,$query,$db)) een ; neer te zetten of de die(mysql_error()) weg te halen maar nog zonder resultaat.
Het gaat om het script van Cynthia: http://www.phphulp.nl/php/scripts/3/645/

Ik hoop dat iemand mij wat verder kan helpen, alvast bedankt.

Hier is het script:
*update: Is het zo beter leesbaar?

<?php


/* Deze 3 regels zijn het enige vereiste om te controleren of er is ingelogd */
ob_start();
session_start();
include("auth.php");
checkAuth();
/* Tot hier dus  ;-) */
 
# De verwerking van de gegevens doen we gewoon 
# met een eenvoudig formulier.

# Procedure geschreven door Cynthia Fridsma

// verbind de server
require_once("config.php");

// gebruik het filter voor de afbeeldingen
include ("filter.php");

// lees de waarde van 'go'
$go = $_POST['go'];


# als het formulier nog niet eerder is gebruikt dan 
# wordt er een formulier getoond op je scherm.

if ($go ==""): 

?>


<div align="right">
<div align="right"><a href="logout.php">logout [<?php echo $_SESSION['loggedin'] ?>]</a>
</div>
<form name="form1" method="post" action="<?php $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">

<!-- Hier komt het verborden veld 'go met de waarde 'go' -->
   <input name="go" type="hidden" value="go">
       

<table width="450" border="0" bgcolor="c5caea" align="center">
     <tr>
      <td bgcolor="c5caea">Afbeelding</td>
      <td><input name="afbeelding" type="file" accept="image/jpeg" id="afbeelding" size="40"></tr>
   
<tr><td bgcolor="c5caea">Naam Bedrijf:</td>
      <td><input type='text' name='naam' size=40></tr>

<tr><td bgcolor="c5caea">Omschrijving:</td>
      <td><textarea name='omschrijving' rows='3' cols='40' ></textarea></tr>

<tr><td bgcolor="c5caea">Adres:</td>
      <td><input type='text' name='adres' size=40></tr>

<tr><td bgcolor="c5caea">Tel Nr.:</td>
      <td><input type='text' name='telnr' size=40></tr>

<tr><td bgcolor="c5caea">Website:</td>
      <td><input type='text' name='website' size=40>


    </tr>
    <tr>
      <td bgcolor="c5caea">&nbsp;</td>
      <td><input type="submit" name="Submit" value="Verzenden">
      <input type="reset" name="Reset" value="Herstellen"></td>
    </tr>
  </table>
  <p>

  <?php 
endif;

// Deze procedure wordt aangeroepen nadat men op verzenden heeft gedrukt

if ($go =="go"):
# Deze procedure zordt ervoor dat de afbeeldingen
# op je server worden geplaatst en tevens in je 
# mysql database.

// bepaal de huidige directory
$hello = getcwd();

# hier komen de afbeeldingen, als je 
# het script in de directory hallo hebt geinstalleerd
# dan worden de afbeeldingen in hallo/images/ 
# geplaatst. 

$file_dir = ($hello . "/images/");

# we moeten natuurlijk wel zeker weten 
# dat de directory bestaat. Dit controleren wij
# met de opdracht is_dir via de volgende routine :

if (is_dir ($file_dir)) {
  print "<br><br>++directorty bestaat";  
  }  else {  
  print "<br><br>--Directory bestaat nog niet" . $file_dir;  
    $newpage = $file_dir;
    echo ("<br>we gaan daarom de directory aanmaken");
    mkdir ($newpage, 0777);    
  }  

// toon de systeem datum
echo date("m/d/y G.i:s");


echo ("<br><br>");

# Ik heb besloten om $_FILES als een array te
# laden, zodat je (eventueel) meer afbeeldingen via
# een formulier op je server kunt plaatsen.

foreach($_FILES as $file_name => $file_array) {
       
       # Verander de bestandsnaam zodat het een geldig bestandsnaam wordt 
       # in een Linux omgeving. (Een Mac en een Windows omgeving zijn
       # veel relaxer met bestandsnaam m.b.t. spaties, hoofdletters en 
       # een mengeling van beide, maar dit geldt niet voor Linux, bovendien
       # zijn bestanden in een Linux omgeving hoofdletter gevoelig.
       
       $file_name=str_replace("'", "_", $file_array['name']);
       $file_name=str_replace(" ", "_", $file_array['name']);
       $file_name=stripslashes ($file_name);
       $file_name=trim($file_name);       
       $file_name=strtolower($file_name);    
                 
       echo "path: " .$file_array['tmp_name'] . "<br>\n";
       echo "name: " .$file_name . "<br>\n";    
       echo "type: " .$file_array['type'] ."<br>\n";
       echo "size: " .$file_array['size'] ."<br>\n";
       
       # gebruik de functie afbeeldingen (zie filter.php) om te
       # controleren of het om een afbeelding gaat.
       # de waarde van $test wordt 1 indien het een afbeelding betreft,
       # in alle andere gevallen is $test leeg.

       $test = afbeeldingen($file_name);
       if ($test !=""):
            echo $file_name . " dit is een afbeelding<br>";
            if (is_uploaded_file($file_array['tmp_name'])) {
                 move_uploaded_file($file_array['tmp_name'], "$file_dir/$file_name") or die ("Couldn't copy");
                 echo "Afbeelding staat op de server<br><br>";
                 // voeg de locatie van de afbeelding toe in de database
                 $afbeelding = "/loggedin/images/" . $file_name;
                 
		

		$query = "INSERT INTO afbeelding (nummer, afbeelding, naam, omschrijving, adres, telnr, website) VALUES ('','$afbeelding','$_POST[naam]','$_POST[omschrijving]','$_POST[adres]','$_POST[telnr]','$_POST[website]')";    
                    if(!mysql_db_query($dbname,$query,$db)) die(mysql_error());
                      
                        echo $afbeelding . " is toegevoegd aan de database met als omschrijving : <br>";                    
                        echo $_POST[naam]."<br>" ;
			echo $_POST[omschrijving]."<br>" ;
			echo $_POST[adres]."<br>" ;
			echo $_POST[telnr]."<br>" ;
			echo $_POST[website]."<br>" ;
            }
       endif;                     
       if ($test ==""):    
             echo $file_name . " dit is geen afbeelding en wordt daarom niet op de server geplaatst<br>\n";      
       endif;
  }
endif;

?>  

</form>
<div align="center"><A HREF="javascript:javascript:history.go(-1)">vorige pagina</A>
  
</div> 
Pieter schreef op 16.09.2009 12:39
het ziet er nu zo uit en heb het net getest:
<?php
if(!mysql_query($query,$db)) die(mysql_error());
?>
hij geeft nu weer de error van het begin: Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/a9533661/public_html/loggedin/add_bedrijf.php on line 148

Ik zou OR er nog even bij kunnen zetten maar dit moet volgens mij niet zo heel veel uit maken.


Probeer dit er eens van te maken?

<?php
if(!mysql_query($query)) or die(mysql_error());
?>

en je connectie kan je op een aantal manieren doen.
Hier dan 2 uitgelegd:

1:

Zoals ik zie wil jij het in een config bestand laden.
Als ik jouw was zou ik het zo doen. (Kheb gelijk fouten afhandeling erbij gedaan heel uitgebreid maar dan kan je het juist goed testen).


<?php
// gegevens

  $host	           = 'xxx';
  $gebruiker	   = 'xxx';
  $wachtwoord	   = 'xxx';
  $database	   = 'xxx';

// database openen function maken
 function safe_db_open($host, $gebruiker, $wachtwoord, $database){
  $db = '';
  if(empty($host) || empty($gebruiker) || empty($wachtwoord) || empty($database)){
    // er zijn geen geldige parameters meegegeven.
	return false;
	} 
	else {
	  if(DEBUG_MODE){
	   // uitgebreide debugging mode voor meldingen voor de programmeur
	   if(!$db = mysql_connect($host, $gebruiker, $wachtwoord, $database)){
	     die("OOPS: er is een fout opgetreden: <br />
		 Host: $host<br />
		 Gebruiker: $gebruiker<br />
		 Wachtwoord: $wachtwoord<br />
		 Database: $database<br />
		   MySQL-Foutnummer: ". mysql_error($db) . "<br /> MySQL-melding: " . mysql_error($db));
		   } 
		   else {
		   // alles OK, resource-handler teruggeven
		     return $db;
		  }
	   }
   	   else {
	   // geen debug-mode, eindegebruiker krijgt beperkte foutmelding te zien
	     if(!$db = mysql_connect($host, $gebruiker, $wachtwoord, $database)){
		   die("Er is een fout opgetreden met de database");
		 }
		 else {
		 // alles OK, 
		    return $db;
   		  }
	  }
  }
}	 // einde functie safe_db_open()
?>


Wat je nu in de pagina zet waar database moet worden aangeroepen is dit:


<?php
// database openen
$db = safe_db_open($host, $gebruiker, $wachtwoord, $database); // hier wordt dus de functie aangeroepen die je in het config bestand hebt gemaakt

// nu kan je de query maken

$query = "INSERT INTO blablablablabla";    
 if(!mysql_query($d, $query)) or die(mysql_error());
 // en dan de rest van het script
?>


Wat je ook kan doen is gelijk al een mysql_query maken als je het in de datbase schrijft.. Dan wordt de code zo


<?php
$query = mysql_query(INSERT INTO blablabablalbalb) or die (mysql_error());  // mysql_error kan je ook vervangen door een zelf geformuleerde fout.. 
?>


Wat ik altijd gebruik is een function maken die een veilige query aanmaakt.
Je gaat dan dus weer naar je config bestand en zet deze function erbij


<?php
function safe_query($db, $query){
  $result = '';
    if(empty($query) || empty($db)){
      // er zijn hier dus geen geldige parameters meegegeven 
      return false;
    } else {
      if(!$result = mysql_query($db, $query)){
        die ("OOPS: er is een fout opgetreden bij het werken met de datbase.. enz.. ");
    } else {
       return $result;
    }
  }  
}
?>


Let wel goed op met het maken van query's

Ik maak meestal zo mijn query's en results dan zou het moeten werken


<?php
$db = safe_db_open($host, $gebruiker, $wachtwoord, $database);
$query = "INSERT INTO enz..";
$result = safe_query($db, $query);
?>


Je kan natuurlijk ook nog een extra controle er in goeie maar goed daar moet je zelf maar ff mee expirimenteren

klein voorbeeldje:


<?php
if(!$db = safe_db_open($host, $gebruiker, $wachtwoord, $database)){
  echo "Het openen van de database is niet gelukt";
  echo "De foutmelding luid:" . mysql_connect_error();
?>



suc6;)
Ik werk nog niet heel lang met php om dit nu zo even simpel aan te kunnen passen maar ik ga me best doen.
Kan ik zoiets neerzetten in de config.php of juist in de andere waar het hele script staat?

$db=mysql_connect("xxx","xxx","xxx") or die
("Kan niet verbinden");
mysql_select_db("xxx",$db);

In de config.php kan handig zijn omdat je die overal include.
ik werk ook nog helemaal nog niet zolang met php hoor:P Maar goed:P

Umm die functions zet je in je config file en die require/include je in de normale bestand..

Dus even netjes alles geordend:

config file:


<?php
// gegevens

  $host               = 'xxx';
  $gebruiker       = 'xxx';
  $wachtwoord       = 'xxx';
  $database       = 'xxx';

// database openen function maken
 function safe_db_open($host, $gebruiker, $wachtwoord, $database){
  $db = '';
  if(empty($host) || empty($gebruiker) || empty($wachtwoord) || empty($database)){
    // er zijn geen geldige parameters meegegeven.
    return false;
    } 
    else {
      if(DEBUG_MODE){
       // uitgebreide debugging mode voor meldingen voor de programmeur
       if(!$db = mysql_connect($host, $gebruiker, $wachtwoord, $database)){
         die("OOPS: er is een fout opgetreden: <br />
         Host: $host<br />
         Gebruiker: $gebruiker<br />
         Wachtwoord: $wachtwoord<br />
         Database: $database<br />
           MySQL-Foutnummer: ". mysql_error($db) . "<br /> MySQL-melding: " . mysql_error($db));
           } 
           else {
           // alles OK, resource-handler teruggeven
             return $db;
          }
       }
          else {
       // geen debug-mode, eindegebruiker krijgt beperkte foutmelding te zien
         if(!$db = mysql_connect($host, $gebruiker, $wachtwoord, $database)){
           die("Er is een fout opgetreden met de database");
         }
         else {
         // alles OK, 
            return $db;
             }
      }
  }
}     // einde functie safe_db_open()

function safe_query($db, $query){
  $result = '';
    if(empty($query) || empty($db)){
      // er zijn hier dus geen geldige parameters meegegeven 
      return false;
    } else {
      if(!$result = mysql_query($db, $query)){
        die ("OOPS: er is een fout opgetreden bij het werken met de datbase.. enz.. ");
    } else {
       return $result;
    }
  }  
} // einde function safe query
?>


En dan zou je in het 'normale' bestand ongeveer dit neer moeten zetten


<?php
include_once('config.php'); // je kan ook include of require gebruiken. This wat je zelf het lekkerste vind

// hier komt dus de query

$db = safe_db_open($host, $gebruiker, $wachtwoord, $database);
$query = "INSERT INTO enz..";
$result = safe_query($db, $query);

?>


Test het eens;') als goed is zou die nu moeten werken als je het zo ongeveer doet. Trouwens ik heb het niet getest omdat ik nu even geen webserver bij de hand heb.. Dus er kunnen foutjes in zitten. Maar goed dat zien we zo wel dan xD

Suc6
Mensen,

Heel erg bedankt voor jullie moeite en hulp.
Santhe had gelijk, hij maakte geen verbinding met de database. hieronder de oplossing wat ik erbij gevoegd heb in de CONFIG.PHP

<?php

# configuratie bestand van mijn persoonlijke database
# waarin adres bestanden e.d. geplaatst kan worden.

// $user = je gebruikersnaam voor mysql
// $password = het wachtwoord
// $host = het adres van je mysql server, normaliter is dit localhost
// $dbname = de naam van je mysql database

$user= "xxx";
$password="xxx";
$host="xxx";
$dbname="xxx";

$db = mysql_connect ($host, $user, $password) or die ("Kan geen verbinding maken met de database ");
mysql_select_db ($dbname,$db);

?>


Jeps heel goed;-) Nu die functions nog erbij doen voor een extra beveiligde verbinding en query:)
@Niels: Nou geef je als return een false bij het mislukken. Maar je controleert daar helemaal niet op, dan heeft dat toch geen zin. Controleren dus. Verder is je methode met DEBUG_MODE leuk, maar waarom dan niet ook bij de query zelf?
ow:S hoe zou jij het dan doen? Bij de query heb ik ook gedaan hoor;)


<?php
function safe_query($db, $query){
  $result = '';
    if(empty($query) || empty($db)){
      // er zijn hier dus geen geldige parameters meegegeven 
      return false;
    } else {
      if(!$result = mysql_query($db, $query)){
        die ("OOPS: er is een fout opgetreden bij het werken met de datbase.. enz.. ");
    } else {
       return $result;
    }
  }  
}
?> 
Ik mis bij de query ook de if(DEBUG_MODE){
<?php
$db = safe_db_open($host, $gebruiker, $wachtwoord, $database);
if(!$db)
{
// error
}
?>
Jah klopt:P

Ik gebruik dan altijd dit

<?php
if(!$db = safe_db_open($host, $gebruiker, $wachtwoord, $database)){
echo "Het openen van de database is niet gelukt";
echo "De foutmelding luid:" . mysql_connect_error();
?>

Reageren