array-gegevens opslaan in database

Status
Niet open voor verdere reacties.

weswillem

Gebruiker
Lid geworden
8 nov 2011
Berichten
310
Er gaat iets fout, maar ik zie het even niet.
Alle bestanden worden gelezen en zijn ook zichtbaar
alsmede de array.
Probleem is dat hij niet opslaat.
PHP:
<?php
error_reporting(E_ALL);
$db  = array(	'host'		=> 'localhost',
		'user'		=> 'root',
		'pw'		=> '' ,
		'db'	=> 'xxxxxx');
$conn = mysqli_connect( $db['host'], $db['user'], $db['pw'], $db['db'] );
if(mysqli_connect_errno($conn)) 
{ 
    trigger_error('Fout bij verbinden met database: '.mysqli_connect_error()); 
} else {
    echo "Verbinding gemaakt";
    }
    
$dir = 'foto';
$handle = opendir($dir);

$bestanden = array();
while (false !== ($file = readdir($handle))) {
       // Verwijderen van de extensie met punt
       //$file1= $file;
       $file1= substr($file,0,strlen($file)-4);
       //Laat bestandsnamen even zien
       echo $file1."\n";
      
       $bestanden[] = $file1;
       echo '<br>';
}
         
        /* Foreach loopje om de gegevens voor in de query uit te voeren */
        foreach($bestanden as $Value)
        {            
            
            $sql_insert = 'INSERT INTO fotos (fotonaam) VALUES ('.$Value.')';      
        
        /* Resultaat van de query */
            $Result = mysqli_query($conn,$sql_insert);
           
        /* Kijken of de query is gelukt */
            if(!$Result)
            {
            /* Fout in de query */
                echo 'Er is een fout opgetreden in de query, Volgende fout is ontdekt: '.mysqli_error();
            }
            else
            {
            /* Query succesvol uitgevoerd */
                echo 'De query is succesvol uitgevoerd.';
            }
        }

?>
 
Laatst bewerkt:
Volgens mij mis je een (
$sql_insert = 'INSERT INTO fotos (fotonaam) VALUES ('.$Value.')';
 
Welke error zie je?
 
Wil eigenlijk zo'n 650 bestandnamen in de database zetten.

betreft foto's met ext. maar die haal ik er af.

maar krijg tig stuks deze foutmeldingen
PHP:
Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp\www\fotosinvoegen\index.php on line 63
 
Je mist je connectie in je mysqli_error(). De melding zegt al dat er '1 parameter wordt verwacht, en dat er 0 gegeven zijn'

Zoals php.net/mysqli_error aangeeft:
Procedural style
mysqli_error ( mysqli $link ) : string

Returns the last error message for the most recent MySQLi function call that can succeed or fail.

Parameters

link
Procedural style only: A link identifier returned by mysqli_connect() or mysqli_init()
 
Laatst bewerkt:
Bij print_r($bestanden);
Array ( [0] => [1] => [2] => 000 [3] => 001 [4] => 001c [5] => 001d [6] => 001e [7] => 001f [8] => 001g [9] => 002 [10] => 003
dit gaat door tot 657.
Krijg vervolgens de navolgende foutmelding.
Er is een fout opgetreden in de query, Volgende fout is ontdekt: Column count doesn't match value count at row 1
Er is een fout opgetreden in de query, Volgende fout is ontdekt: Unknown column '001c' in 'field list'
 
1e error komt omdat je het aantal velden niet gelijk is aan het aantal VALUES
2e error komt omdat je je veld niet bestaat. Een veld wat 001c heet, klinkt sowieso al niet zuiver qua databaseopzet.
 
na enige tijd stoeien de volgende oplossing
PHP:
foreach($bestanden as $key => $Value)
        {            
        $sql_insert = "INSERT INTO fotos";
    	$sql_insert .= " ( id ,fotonaam)";
    	$sql_insert .= " VALUES";
    	$sql_insert .= "  ('".$key."', '".$Value."')"; 
            
               /* Resultaat van de query */
            $Result = mysqli_query($conn,$sql_insert);
 
Laatst bewerkt:
Dan moet je wel $sql_insert in je query gebruiken.
 
Ik heb PHP zelf al jaren niet meer aangeraakt, en heb er ook nooit echt veel mee gedaan. Hoewel het in dit geval niet zoveel kwaad kan, gezien je enkel een lijst met bestanden uit een directory ophaalt en deze wegschrijft. Wil ik toch even opmerken dat waardes rechtstreeks in je INSERT INTO query stoppen vaak niet de beste aanpak is. Als de waardes die je rechtstreeks in je query stopt gebruikersinvoer is zou dit zomaar SQL injection mogelijk kunnen maken. Beter gebruik je iets als prepared statements.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan