PHP Submit Self MySQL

Status
Niet open voor verdere reacties.

Bertsjuhn

Gebruiker
Lid geworden
15 jul 2008
Berichten
75
hey luitjes,

Ik heb een PHP script dat wat moet toevoegen aan mijn MySQL database.

Hij doet alles behalve het toevoegen :P duw je op submit dan krijg je de zelfde pagina leeg, maar er staat niets in de database.
Het moet zo zijn dat je de gegevens doet invullen en daarna op verzenden drukt. Daarna moet alles in de DB worden gestopt (met een plaatje enzo) en dan krijgt de persoon die heeft gesubmit een bedankje. :P


Hier is het script:
Code:
<?
require("config.php");

echo "<link rel=\"stylesheet\" content=\"text/css\" href=\"style.css\">";

if(!$submit){
?>
Velden met een * zijn verplicht...
<!--<form method="POST" action="<? echo $PHP_SELF ?>">
-->
<form method="post" action="toevoegen.php">
<input type="hidden" name="submit" value="1" >
  <table width="600" border="0">
    <tr>
      <td>
      Naam groeve:</td>
      <td><input type="text" name="naam" size="30" >
*</td>
    </tr>
    <tr>
      <td>Straat:</td>
      <td><input type="text" name="straat" size="30" ></td>
    </tr>
    <tr>
      <td>Plaats:</td>
      <td><input type="text" name="plaats" size="30" > 
      * </td>
    </tr>
    <tr>
      <td>Ingang:</td>
      <td><input type="text" name="ingang" size="30" ></td>
    </tr>
    <tr>
      <td>Grootte:</td>
      <td><input type="text" name="grootte" size="4" >
      meter</td>
    </tr>
    <tr>
      <td>Catogorie:</td>
      <td><select size="1" name="Catogorie">
        <option value="Open">Open</option>
        <option value="Gesloten">Gesloten</option>
        <option value="In Beheer">In beheer</option>
      </select></td>
    </tr>
    <tr>
      <td>Status:</td>
      <td><select size="1" name="status">
        <option value="1">Open</option>
        <option value="0">Gesloten</option>
      </select></td>
    </tr>
    <tr>
      <td>Coordinaten:</td>
      <td>Lengte:
        <input type="text" name="lengte"	size="12" >
Breedte:
<input type="text" name="breedte" size="12" ></td>
    </tr>
    <tr>
      <td>Beheer:</td>
      <td><input type="text" name="beheer" ></td>
    </tr>
    <tr>
      <td>Beheerder:</td>
      <td><input type="text" name="beheerder" ></td>
    </tr>
    <tr>
      <td align="left" valign="top">Contact beheerder:</td>
      <td><textarea name="contactbeheerder" rows="3"></textarea></td>
    </tr>
    <tr>
      <td align="left" valign="top">Omschrijving:</td>
      <td><textarea name="omschrijving" rows="3"></textarea></td>
    </tr>
    <tr>
      <td>Afbeelding:</td>
      <td><input name="file" type="file" ></td>
    </tr>
    <tr>
      <td>Plattegrond:</td>
      <td><input name="file2" type="file" ></td>
    </tr>
    <tr>
      <td>Route:</td>
      <td><input name="file3" type="file" ></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input name="submit" type="submit" value="Toevoegen" >
        <input name="reset" type="reset" value="Wis velden" >
      </td>
    </tr>
  </table>
</form>

<?
}
else{
$query = mysql_query("SELECT * FROM groeves WHERE naam = '$naam'");
$result = mysql_num_rows($query);

if($result){
?>

Deze groeve bestaat al. Check de naam of <a href="groevedetails.php" target="_blank">Check de groeves die ik al ken</a> <br><br>
<a href="javascript:history.go(-1)">Ga terug</a>

<?
}
else{

mysql_query("INSERT INTO groeves(naam,grootte,straat,plaats,ingang,status,catogorie,afbeelding,plattengrond,route,beheer,beheerder,contactbeheerder,lengte,breedte) VALUES ('$naam','$grootte','$straat','$plaats','$ingang','$status','$catogorie', '$afbeelding', '$plattengrond','$route','$beheer','$beheerder','$contactbeheerder','$lengte','$breedte')") or die(mysql_error());

}
}
?>
Bedankt voor het toevoegen van de groeve, deze is nu <a href="groevendetails.php" target="_self">hier</a> terug te vinden.
<?
// else{
?>

Je hebt niet alle verplichte velden ingevuld...<br><br>
<a href="javascript:history.go(-1)">Ga terug</a>

<?
// }
?>
 
INSERT INTO groeves(naam,grootte,straat,plaats,ingang,status,catogorie,afbeelding,plattengrond,route,beheer,beheerder,contactbeheerder,lengte,breedte) VALUES ('$naam','$grootte','$straat','$plaats','$ingang','$status','$catogorie', '$afbeelding', '$plattengrond','$route','$beheer','$beheerder','$contactbeheerder','$lengte','$breedte')

1) Verwijder de or die(mysql_error()); , als er wel degelijk een error gebeurd stopt het script hierdoor.
2) Werkt het insert command als je dat invoegt in de sql afdeling van phpmyadmin?
3) groeves moet `groeves` zijn.
4) Je mag (naam,grootte,straat,plaats,ingang,status,catogorie,afbeelding,plattengrond,route,beheer,beheerder,contactbeheerder,lengte,breedte) weglaten op voorwaarde dat dit alle velden zijn.
 
Hoe kan ik checken of hij dit accepteerd?
(ik gebruik versie: 5.0.32)

(heb de andere dingen aangepast)
 
Hoe kan ik checken of hij dit accepteerd?
(ik gebruik versie: 5.0.32)

(heb de andere dingen aangepast)

Ga naar phpmyadmin
Ga naar het tabblad SQL
voor daar het insert commando in met testwaarden (bv de naam van het veld)
 
Of het werkt niet of ik doe iets mis :P

Als je een fout hebt in je commando krijg je een kadertje

Fout
SQL-query:

-hier krijg je de query wat je had ingevoerd-

MySQL retourneerde:

-hier krijg je de error-

Post even de error, zodat we kunnen zien wat er fout is gelopen
 
MySQL retourneerde:

#1064 - 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 ''groeves' (naam,plaats) VALUES ('Test','Ikkel')' at line 1


(ik zal wel wat niet goed doen :P)
 
MySQL retourneerde:

#1064 - 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 ''groeves' (naam,plaats) VALUES ('Test','Ikkel')' at line 1


(ik zal wel wat niet goed doen :P)

Post de syntax eens even, volgens mij heb je een foutje met je aanhalingstekens
 
INSERT INTO groeves(naam,grootte,straat,plaats,ingang,status,catogorie,afbeelding,plattengrond,route,beheer,beheerder,contactbeheerder,lengte,breedte) VALUES ('$naam','$grootte','$straat','$plaats','$ingang','$status','$catogorie', '$afbeelding', '$plattengrond','$route','$beheer','$beheerder','$contactbeheerder','$lengte','$breedte')

1) Verwijder de or die(mysql_error()); , als er wel degelijk een error gebeurd stopt het script hierdoor.
2) Werkt het insert command als je dat invoegt in de sql afdeling van phpmyadmin?
3) groeves moet `groeves` zijn.
4) Je mag (naam,grootte,straat,plaats,ingang,status,catogorie,afbeelding,plattengrond,route,beheer,beheerder,contactbeheerder,lengte,breedte) weglaten op voorwaarde dat dit alle velden zijn.

Tip 3 en 4 zijn echt o-n-z-i-n. De een nog slechter dan de ander.



@Topicstarter:

Je script stamt uit de jaren 70 ofzo. Zoek eens wat informatie over 'superglobals', je dient dus $_POST['waarde'] te gebruiken voor formulierdingen (mits de action 'post' is). Verder controleren we niet op 'sumbit', maar op de REQUEST-method.


Verder kan de foutafhandeling beter, moet je HTML echoën met single quotes, dien je je input te beveiligen, etc. Even een voorbeeld:

PHP:
if($_SERVER['REQUEST_METHOD'] != 'POST'){

// Formulier nog niet gepost, geef form weer:

echo '<form method="post" action="pagina.php">';
// Gebruik nooit $_SERVER['PHP_SELF'], maar gewoon de echte pagina.

echo '<input type="text" name="test" />
         <input type="submit" name="submit" value="Go" />';

}else{

       $sQuery = "INSERT INTO table (test) VALUES ('". mysql_real_escape_string($_POST['test']) ."')";
       $rResult = mysql_query($sQuery);

       if(!$rResult){
 
          echo 'Fout gevonden in query <br />'. $sQuery .'<br />Met error: <br />'. mysql_error();

       }
}



EDIT:

Waarom controleer ik niet of de groeve al bestaat? Omdat je dat niet _kunt_ controleren. Je mag er _nooit_ vanuit gaan dat er tussen je SELECT en INSERT niets gebeurt. Je plaats een UNIQUE-constraint op de kolom 'naam', en vangt met mysql_errno af of het al bestaat. Dat doe je dus bij de INSERT, niet met een voorafgaande SELECT.
 
Laatst bewerkt:
Dit is de test syntax als je die bedoelt:

INSERT INTO 'groeves' (naam,plaats) VALUES ('Test','Ikkel')



Dit is de echte mocht je die willen:
mysql_query("INSERT INTO 'groeves'(naam,grootte,straat,plaats,ingang,status,catogorie,afbeelding,plattengrond,route,beheer,beheerder,contactbeheerder,lengte,breedte) VALUES ('$naam','$grootte','$straat','$plaats','$ingang','$status','$catogorie', '$afbeelding', '$plattengrond','$route','$beheer','$beheerder','$contactbeheerder','$lengte','$breedte')");
 
Dit is de test syntax als je die bedoelt:

INSERT INTO 'groeves' (naam,plaats) VALUES ('Test','Ikkel')



Dit is de echte mocht je die willen:
mysql_query("INSERT INTO 'groeves'(naam,grootte,straat,plaats,ingang,status,catogorie,afbeelding,plattengrond,route,beheer,beheerder,contactbeheerder,lengte,breedte) VALUES ('$naam','$grootte','$straat','$plaats','$ingang','$status','$catogorie', '$afbeelding', '$plattengrond','$route','$beheer','$beheerder','$contactbeheerder','$lengte','$breedte')");

Nee, dit lijkt me niet zo verstandig. :shocked:
 
Dit is de test syntax als je die bedoelt:

INSERT INTO 'groeves' (naam,plaats) VALUES ('Test','Ikkel')



Dit is de echte mocht je die willen:
mysql_query("INSERT INTO 'groeves'(naam,grootte,straat,plaats,ingang,status,catogorie,afbeelding,plattengrond,route,beheer,beheerder,contactbeheerder,lengte,breedte) VALUES ('$naam','$grootte','$straat','$plaats','$ingang','$status','$catogorie', '$afbeelding', '$plattengrond','$route','$beheer','$beheerder','$contactbeheerder','$lengte','$breedte')");

De 'groeves' moet `groeves` zijn (schuine tekens)
 
De 'groeves' moet `groeves` zijn (schuine tekens)

NEEN. Backticks zijn _smerig_ en nóóit nodig. Het is verboden in praktisch elke database, heeft _geen_ toegevoegde waarde en dien je _niet_ en _nooit_ te gebruiken.

Punt, period, end of story. Stop met die onzin.
 
NEEN. Backticks zijn _smerig_ en nóóit nodig. Het is verboden in praktisch elke database, heeft _geen_ toegevoegde waarde en dien je _niet_ en _nooit_ te gebruiken.

Punt, period, end of story. Stop met die onzin.

Als deze onnodig zijn, waarom zet phpmyadmin ze dan zelf als je via het tabblad invoegen gegevens invoert in je database?!?
 
Als deze onnodig zijn, waarom zet phpmyadmin ze dan zelf als je via het tabblad invoegen gegevens invoert in je database?!?

Omdat PHPMyAdmin net zo buggy is als de SQL die MySQL accepteert zijnde correct.
 
Ik heb dit script vroeger al eens gebruikt. En toen werkte alles zoals het hoort... denk dat het komt door de nieuwe versies van PHP en MySQL
 
Ik heb dit script vroeger al eens gebruikt. En toen werkte alles zoals het hoort... denk dat het komt door de nieuwe versies van PHP en MySQL

Ja, heel vroeger bestonden superglobals nog niet, maar nu wel. En die dien je al zo'n 5 jaar te gebruiken.
 
Heb je je script nu aangepast op de manier die ik voorstelde? Variabelen buiten quotes, mysql_real_escape_string gebruiken, geen backticks, foutafhandeling, superglobals, echo met enkele quotes...etc.?
 
Bij jouw post manier krijg ik de volgende error:

Parse error: syntax error, unexpected T_ECHO, expecting ',' or ';' in /customers/compyouserv.nl/compyouserv.nl/httpd.www/groeven/toevoegen.php on line 10


(Ik kan de file als bijlage gooien als dat makkelijker is?)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan