Beste PHP'ers,

Het volgende is mijn probleem: hoe kan ik zorgen dat ik de informatie van mijn formulier in mijn database gestuurd wordt, het lukt me alleen om de heletijd een nieuw ID aan te maken..


<?
echo '<form method="post" action="verstuur.php">';
echo 'Keeper: <input type="text" name="$kp" maxlength="100" /><br />';
echo 'Linksachter: <input type="text" name="$lb" /><br>';
echo 'Voorstopper: <input type="text" name="$vs" /><br>';
echo 'Laatste man:&nbsp; <input type="text" name="$lm" /><br>';
echo 'Rechtsachter:&nbsp; <input type="text" name="$ra" /><br>';
echo 'Linksmidden: <input type="text" name="$lm" /><br>';
echo 'Linker centrale middenvelder:<input type="text" name="$lcm" /><br>';
echo 'Rechter centrale middenvelder:<input type="text" name="$rcm" /><br>';
echo 'Rechtsmidden: <input type="text" name="$rm" /><br>';
echo 'Linkerspits: <input type="text" name="$ls" /><br>';
echo 'Rechterspits: <input type="text" name="$rs" /><br>';
echo '<br />';
echo '<input type="submit" value="Opstelling toevoegen" />';
echo '</form>';
?>


<?php 
          mysql_connect("localhost", "**", "***") or die("Failure to communicate with database");
            mysql_select_db("***");
                                
            $query = "INSERT INTO opstelling 
 			(id, kp, la, vs, lma, ra, lm, lcm, rcm, rm, ls, rs) 
        VALUES('Null', '$kp', '$la', '$vs', '$lma', '$ra', '$lm', '$lcm', '$rcm', '$rm', '$ls', '$rs')"; 
    $result = mysql_query($query) or 
        die (mysql_error); 
 
                 
print ("Gegevens ingevoerd"); 
            
?>

Is dit het complete script of enkel 2 gedeeltes ervan ?

Maar wat zie is:

1. Binnen je form gewoon namen neer zetten ipv $naam...
2. Je controlleerd de input niet bv: mysql_escape_string($waarde)...
3. Geen controlle of de waarde ingevuld is en of er wel gepost is....
4. Kijk je insert query nog eens na de values staan niet goed erin..

<?PHP
mysql_query('insert into opstelling (veld, veld, veld) values (
\''.mysql_escape_string($waarde).'\',
\''.mysql_escape_string($waarde).'\',
\''.mysql_escape_string($waarde).'\'
') or die ('er ging iets fout ==> ' . mysql_error());
?>

5. Hoe ziet je database tabel er uit ?
Inderdaad. De namen moeten geen $ bevatten. Je zou trouwens naar mijn idee ook alle quotes in je form moeten escapen.

Ik zou doen:
(let op de mysql_real_escape ipv. mysql_escape_string)


<?php
if (isset($_POST[nieuw])) {

$query = "insert into opstelling (keeper, mannetje1, mannetje2) VALUES ('mysql_real_escape_string($_POST[keeper])','mysql_real_escape_string($_POST[mannetje1])','mysql_real_escape_string($_POST[mannetje2])');";
$query = mysql_query($query) or die (mysql_error());
} else {
echo "Je hebt geen opstelling ingevuld";
}
?> 


je nieuwe formulier wordt:


<?php
echo '<form method=\"post\" action=\"verstuur.php\">';
echo 'Keeper: <input type=\"text\" name=\"kp\" maxlength=\"100\" /><br />';
echo 'Linksachter: <input type=\"text\" name=\"lb\" /><br>';
echo 'Voorstopper: <input type=\"text\" name=\"vs\" /><br>';
echo 'Laatste man:&nbsp; <input type=\"text\" name=\"lm\" /><br>';
echo 'Rechtsachter:&nbsp; <input type=\"text\" name=\"ra\" /><br>';
echo 'Linksmidden: <input type=\"text\" name=\"lm\" /><br>';
echo 'Linker centrale middenvelder:<input type=\"text\" name=\"lcm\" /><br>';
echo 'Rechter centrale middenvelder:<input type=\"text\" name=\"rcm\" /><br>';
echo 'Rechtsmidden: <input type=\"text\" name=\"rm\" /><br>';
echo 'Linkerspits: <input type=\"text\" name=\"ls\"/><br>';
echo 'Rechterspits: <input type=\"text\" name=\"rs\" /><br>';
echo '<br />';
echo "<input type=\"hidden\" value=\"nieuw\" name=\"nieuw\">";
echo '<input type=\"submit\" value=\"Opstelling toevoegen\" />';
echo '</form>';
?> 
Als je dit boven je code zet kan je wel doen wat je net had :P
Maar wel een hele vieze oplossing.

<?
foreach($_POST as $key => $data){
$$key = mysql_real_escape_string($data);
}
?>

Verder Sije:
Gebruik alleen kleine letters in je SQL voor je eigen invoer.

Voorbeeldje
<?
$sql = "INSERT INTO opstelling WHERE bla = 1 AND blabla = 2 ORDER BY bla_id DESC LIMIT.";

?>

@ Lapidi

Beide opmerkingen snap ik. De kleine letters had ik even niet gezien, doe zelf normaal ook wel INSERT INTO

en heb zelf een standaard functie voor mysql_real_escape_string, maar vond dat hier niet helemaal nodig.

<?php
if ($_SERVER['REQUEST_METHOD']=="POST") {

$query = "INSERT INTO opstelling (
keeper, 
mannetje1, 
mannetje2) 
VALUES (
'".mysql_real_escape_string($_POST['keeper'])."',
'".mysql_real_escape_string($_POST['mannetje1'])."',
'".mysql_real_escape_string($_POST['mannetje2'])."')";
$query = mysql_query($query) 
  if ($query) {
  // gelukt
  } else {
  echo "Het is niet gelukt. De error is:" . mysql_error();

} else {
// hier je formulier
}
?> 

Dit is nog beter Sije Harksma, dit omdat:
- Beter leesbaar
- variabelen buiten quotes
- singlequotes in de indexes POST-globals, aangezien het geen constanten zijn.
- Beter controle of er een formulier verstuurd is.
Ach ach, het was ook beetje haastig gemaakt hoor. Wilde na vele malen geholpen te zijn nou eindelijk keer een poging doen met de weinige kennis die ik heb iemand te helpen, dus zaten er nog wat kleine foutjes in.

Bij de laatst gepostte code moet wel opgemerkt dat het formulier bovenaan moet bevatten:

echo "<form method=\"post\" action =\"$PHP_SELF\">\n";
En waar haal jij $PHP_SELF vandaan? Da's is al jaaren oud, en tegenwoordig gebruiken we al: $_SERVER['PHP_SELF']

Wel leuk dat je iemand helpt Sije, maar probeer wel een beetje met de tijd mee te gaan ;-).
Je wilt iemand geen verouderde dingen aanleren namelijk.

<?php
          mysql_connect("localhost", "***", "***") or die("Failure to communicate with database");
            mysql_select_db("***");

if ($_SERVER['REQUEST_METHOD']=="POST") {

$query = "INSERT INTO opstellingen (
kp, 
la, 
vs,
lma,
ra,
lm,
lcm,
rcm,
rm,
ls,
rs) 
VALUES (
'".mysql_real_escape_string($_POST['kp'])."',
'".mysql_real_escape_string($_POST['la'])."',
'".mysql_real_escape_string($_POST['vs'])."',
'".mysql_real_escape_string($_POST['lma'])."',
'".mysql_real_escape_string($_POST['ra'])."',
'".mysql_real_escape_string($_POST['lm'])."',
'".mysql_real_escape_string($_POST['lcm'])."',
'".mysql_real_escape_string($_POST['rcm'])."',
'".mysql_real_escape_string($_POST['rm'])."',
'".mysql_real_escape_string($_POST['ls'])."',
'".mysql_real_escape_string($_POST['rs'])."')";
$query = mysql_query($query) 
  if ($query) {
  // gelukt
 
  } else {
  echo "Het is niet gelukt. De error is:" . mysql_error();

} else {

echo "<form method=\"post\" action =\"$_SERVER['PHP_SELF']\">\n";
echo 'Keeper: <input type=\"text\" name=\"kp\" maxlength=\"100\" /><br />';
echo 'Linksachter: <input type=\"text\" name=\"lb\" /><br>';
echo 'Voorstopper: <input type=\"text\" name=\"vs\" /><br>';
echo 'Laatste man:&nbsp; <input type=\"text\" name=\"lm\" /><br>';
echo 'Rechtsachter:&nbsp; <input type=\"text\" name=\"ra\" /><br>';
echo 'Linksmidden: <input type=\"text\" name=\"lm\" /><br>';
echo 'Linker centrale middenvelder:<input type=\"text\" name=\"lcm\" /><br>';
echo 'Rechter centrale middenvelder:<input type=\"text\" name=\"rcm\" /><br>';
echo 'Rechtsmidden: <input type=\"text\" name=\"rm\" /><br>';
echo 'Linkerspits: <input type=\"text\" name=\"ls\"/><br>';
echo 'Rechterspits: <input type=\"text\" name=\"rs\" /><br>';
echo '<br />';
echo "<input type=\"hidden\" value=\"nieuw\" name=\"nieuw\">";
echo '<input type=\"submit\" value=\"Opstelling toevoegen\" />';
echo '</form>';
}
?> 



hij geeft een fout aan bij dit: if ($query) {

wat is er nog verkeerd dan? bvd Rob!
$query = mysql_query($query);

Zou dat lukken denk je?
Zoals Jezpur al zecht bij $query = mysql_query($query);

Maar mag ik vragen waarom je bij je form voor elke regel een nieuwe echo gebruikt ?

Want deze kan je ook net zo goed gewoon in HTML maken....

EN hoe ziet je database tabel eruit van ik zag aan het begin een ID staan die er niet thuis hoord...

Reageren