meerdere variabelen in sql

Status
Niet open voor verdere reacties.

vacla

Gebruiker
Lid geworden
27 feb 2013
Berichten
43
Hoe zet je meerdere variabelen in een delete query van mysql?
 
ik zou het niet weten hoor.
dit is een php vraagje veronder stel ik?
groetjes, pcexpert
 
Laatst bewerkt:
Hoe zet je meerdere variabelen in een delete query van mysql?

Dat kan op meerdere manieren en welke voor jou van belang is hangt helemaal af van wat je aan het doen bent.
 
Dit is de code van mijn hele script en de regel van de sql staat op regel 81:

PHP:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
<!DOCTYPE html>
<html lang="nl">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta name="author" content="ABO">
		<meta name="viewport" content="width = 1280">
		<meta name="format-detection" content="telephone=no">
		<meta name="keywords" content="windows en mac helpforum">
		<meta name="description" content="windows en mac helpforum">
		<title>WinMacHelp voorpagina!</title>
		<link rel="shortcut icon" type="image/x-icon" href="../gfx/Naamloze afbeelding.png">
		<link href="css/sander.css" rel="stylesheet" type="text/css">
	</head>
    <body>
<?php
//function logged_in() {
	//return (isset($_SESSION['password'])) ? true : false;
//}
//function protect_page() {
	//if (logged_in() === false) {
		//header('Location: protected.php');
		//exit();
	//}
//}
//protect_page();
//we zetten error report aan voor als er een foutje in de code zou zitten, deze kan als alles optimaal werkt uitgezet worden. Dit doe je door de 1 te veranderen in een 0.
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
 
//we includen het bestand config.php zodat we verbinding hebben met de database
include ("config.php");
 
//We hoeven eigenlijk maar gewoon 1 select query te doen en een while loop en we zijn al klaar. We d dit als volgt:
 
//de select query
$ophalen = mysql_query("SELECT * FROM offerte") or die(mysql_error());
//while loop
while ($gegevens = mysql_fetch_array($ophalen)) {
	echo $gegevens['id']; //id uilezen
	echo '<br />';
	echo $gegevens['naam']; // naam uitlezen
	echo '<br />';
	echo $gegevens['voornaam']; //voornaam uitlezen
	echo '<br />';
	echo $gegevens['adres']; //adres uitlezen
	echo '<br />';
	echo $gegevens['telefoon']; //gsm-nummer uitlezen
	echo '<br />';
	echo $gegevens['bericht']; //bericht uitlezen
	echo '<br />';
	echo '<hr />';
}
?>

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') { //kijken of het formulier gepost is 
	$veld1 = mysql_real_escape_string($_POST['veld1']);
	$veld2 = mysql_real_escape_string($_POST['veld2']);
	$veld3 = mysql_real_escape_string($_POST['veld3']);
	
	//velden controleren
	$errors = array();
	if(strlen($veld1) < 0) {
		array_push($errors, "Je hebt geen id ingevuld");
	}
	if(strlen($veld1) > 2) {
		array_push($errors, "Je hebt te groot cijfer voor id ingevuld");
	}
	//kijken of  er een bericht is ingevuld, zo nee onderbreek het proces, anders ga verder
	if(count($errors) > 0) {
		foreach($errors as $error) {
			echo $error;
		}
	} else {
		//alles mooi in de database zetten
		mysql_query ("DELETE FROM offerte WHERE id='$veld1, $veld2, $veld3'") or die (mysql_error());  
		echo 'De gegevens zijn verwijderd van de database';
	}
}
?>
<form method="post">
deleten: <br />
id: <input type="text" name="veld1" size="60"> <br />
&nbsp&nbsp&nbsp&nbsp	<input type="text" name="veld2" size="60"> <br />
&nbsp&nbsp&nbsp&nbsp    <input type="text" name="veld3" size="60"> <br />
&nbsp&nbsp&nbsp&nbsp	<input type="submit" value="verzenden" />
</form>
</body>
 
Laatst bewerkt:
WHERE id IN($veld1, $veld2, $veld3)

maar pas op: je moet pas escapen direct voordat je de waarde in de query gaat stoppen. Escapen past de waarde aan zodat hij veilig is voor gebruik in de query en daarvoor kan er vanalles worden aangepast aan de waarde. De ge-escapte waarde is dus nietmeer te vergelijken met iets wat jij verwacht want het is wat de database verwacht.
 
Ik heb toch nog een probleem, als ik 1 variabel invul werkt het niet, wat nu?
 
Dan moet je zorgen dat je die variabele niet in de query gebruikt. Lees de PHP handleiding over arrays.
 
Ik wil als ik 1 ding invul nog steeds werkt of met twee ook.
Dit is nu de code:
PHP:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
<!DOCTYPE html>
<html lang="nl">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="author" content="ABO">
        <meta name="viewport" content="width = 1280">
        <meta name="format-detection" content="telephone=no">
        <meta name="keywords" content="windows en mac helpforum">
        <meta name="description" content="windows en mac helpforum">
        <title>WinMacHelp voorpagina!</title>
        <link rel="shortcut icon" type="image/x-icon" href="../gfx/Naamloze afbeelding.png">
        <link href="css/sander.css" rel="stylesheet" type="text/css">
    </head>
    <body>
<?php
//function logged_in() {
    //return (isset($_SESSION['password'])) ? true : false;
//}
//function protect_page() {
    //if (logged_in() === false) {
        //header('Location: protected.php');
        //exit();
    //}
//}
//protect_page();
//we zetten error report aan voor als er een foutje in de code zou zitten, deze kan als alles optimaal werkt uitgezet worden. Dit doe je door de 1 te veranderen in een 0.
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);
 
//we includen het bestand config.php zodat we verbinding hebben met de database
include ("config.php");
 
//We hoeven eigenlijk maar gewoon 1 select query te doen en een while loop en we zijn al klaar. We d dit als volgt:
 
//de select query
$ophalen = mysql_query("SELECT * FROM offerte") or die(mysql_error());
//while loop
while ($gegevens = mysql_fetch_array($ophalen)) {
    echo $gegevens['id']; //id uilezen
    echo '<br />';
    echo $gegevens['naam']; // naam uitlezen
    echo '<br />';
    echo $gegevens['voornaam']; //voornaam uitlezen
    echo '<br />';
    echo $gegevens['adres']; //adres uitlezen
    echo '<br />';
    echo $gegevens['telefoon']; //gsm-nummer uitlezen
    echo '<br />';
    echo $gegevens['bericht']; //bericht uitlezen
    echo '<br />';
    echo '<hr />';
}
?>
 <center>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') { //kijken of het formulier gepost is 
    $veld1 = mysql_real_escape_string($_POST['veld1']);
    $veld2 = mysql_real_escape_string($_POST['veld2']);
    $veld3 = mysql_real_escape_string($_POST['veld3']);
    
    //velden controleren
    $errors = array();
    if(strlen($veld1) < 0) {
        array_push($errors, "Je hebt geen id ingevuld");
    }
    if(strlen($veld1) > 2) {
        array_push($errors, "Je hebt te groot cijfer voor id ingevuld");
    }
    //kijken of  er een bericht is ingevuld, zo nee onderbreek het proces, anders ga verder
    if(count($errors) > 0) {
        foreach($errors as $error) {
            echo $error;
        }
    } else {
        //alles mooi in de database zetten
		//$query = "DELETE FROM offerte WHERE id IN isset($veld1) isset($veld2) isset($veld3)";
		//print $query;
        mysql_query ("DELETE FROM offerte WHERE id IN ISSET($veld1) ISSET($veld2) ISSET($veld3)") or die (mysql_error());  
        echo 'De gegevens zijn verwijderd van de database';
    }
}
?>
<form method="post">
deleten: <br />
id: <input type="text" name="veld1" size="3"> &nbsp; <input type="text" name="veld2" size="3"> &nbsp <input type="text" name="veld3" size="3"> <br />
<input type="submit" value="verzenden" />
</form>
</center>
</body>
En ik krijg deze foutcode: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ISSET(20) ISSET() ISSET()' at line 1
 
opzich is het uidee van isset niet zo vreemd, maar je moet natuurlijk wel even kijken of isset wel een SQL functie is, en dat is het niet.
isset op $veld1 etc gaat sowieso niet werken want je maakrt $veld1 zelf; hij zal altijd bestaan.

Maar zoals ik al zei: lees over arrays. veld1, veld2 en veld3 kun je samen in een array zetten en dan ben je vrij om daar 1, 2, of dertien elementen in te zetten, afhankelijk van wat er uit je formulier komt. via implode() kun je die waarden weer aan elkaar plakken tot iets wat in IN() past.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan