MongoDB - php - delete()

10 views
Skip to first unread message

pogopocomapogo

unread,
Aug 29, 2015, 1:01:35 PM8/29/15
to mongodb-it
Cao ragazzi,
sono un nuovo partecipante al gruppo!
Parteciperò subito con un piccolo problemino che mi sà tanto di cavolata(e mi sta facendo perdere tempo), ma non ne vengo fuori!!
allora, ho inizito a lavorare su MongoDB tramite php:
quindi:
- mi son connesso ad un hosting per MongoDB (MongoLab)
- ho creato le varie connessioni a db, collezione, documenti
- tramite un foreach mi son fatto scorrerre l'array in tabella
- ho creato degli input per poter inserire nuovi documenti.
....e fin qui tutto OK!
il problema sorge con il delete!
passo l'action alla pagina delete.php e mi passo anche la variabile "id" e faccio un cast trasformandola in stringa
ma come risultato ottengo il solito errore:
Fatal error: Uncaught exception 'MongoException' with message 'Invalid object ID' in /Library/WebServer/Documents/deleteMongo.php:14 Stack trace: #0 /Library/WebServer/Documents/deleteMongo.php(14): MongoId->__construct('55e1dfc156c39fa...') #1 {main} thrown in /Library/WebServer/Documents/deleteMongo.php on line 14
comunque...posto il codice così da esser più chiaro:
in mongo1.php
<?php
echo
"sono nella pagina mongo_connect_mongoLab.php"."</br>";
$connessione
= new MongoClient("mongodb://mio_user:mia_pssw@ds012345.mongolab.com:12345/prova");
if($connessione){
    echo
"connessione avvenuta con successo"."</br>";
}else{
    echo
"impossibile connettersi al db Mongo"."</br>";
}
$database
= $connessione->prova;
if($database){
    echo
"db creato con successo"."</br>";
}else{
    echo
"è stato impossibile creare il db"."</br>";
}

$collezione
= $database->collezione;
if($collezione){
    echo
"collezione creata con successo"."</br>";
}else{
    echo
"è stato impossibile creare la collezione"."</br>";
}

echo
"<hr/>";
error_reporting
(E_ALL | E_STRICT);
ini_set
("display_errors", 2);


 $cursore_find
= $connessione->$database->$collezione->find();
echo
"<table border='1' align='center'>";

echo
"<th>ID</th>";
echo
"<th>SQUADRA</th>";
echo
"<th>GIOCATORE</th>";
echo
"<th>ANNO</th>";
echo
"<th>ELIMINA</th>";
foreach ($cursore_find as $key) {
    echo
"<tr>";
    echo
"<td>".$key['_id']."</td>";
    echo
"<td>".$key['squadra']."</td>";
    echo
"<td>".$key['giocatore']."</td>";
    echo
"<td>".$key['anno']."</td>";
   
?>
   
<td>
   
<form id="delete" method="POST" action="deleteMongo.php" onsubmit="return confirm('Sicuro di voler eliminare questo evento?');">
        <input type="text" name="delete_id" value="
<?php echo $key['_id']; ?> "/>
       
<input type="submit" name="delete" value="Elimina"/>
       
</form>
     
</td>
     
<?php
    echo
"</tr>";
   
}
echo
"</table>";
?>
 
<form action="mongo1invio.php" method="post">
     squadra
<input type="text" id="squadra" name="squadra" />
     giocatore
<input type="text" id="giocatore" name="giocatore" />
     anno
<input type="text" id="anno" name="anno" />
     
<input name="submitForm" id="submitForm" type="submit" value="Invia" />
 
 
in deleteMongo.php
<?php

$connessione
= new MongoClient("mongodb://mio_user:mia_...@ds012345.mongolab.com:12345/prova");
$database
= $connessione->prova;
$collezione
=$connessione->$database->collezione;
echo
"<hr/>";
error_reporting
(E_ALL | E_STRICT);
ini_set
("display_errors", 2);

$id
=$_REQUEST['delete_id'];
$idd
=(string)$id;

if(isset($_POST['delete']))    {
    $rem_cursore
=$connessione->$database->$collezione->remove(array('_id'=> new MongoId($idd)));
   
}
   
?>
cosa sbaglio? cosa mi sfugge?
potreste indirizzarmi sulla retta via? Grazie!



Samuele Veneruso

unread,
Aug 30, 2015, 11:14:49 AM8/30/15
to mongodb-it
Ciao,
    probabilmente il tuo problema é che se stai usando con id quello di default di mongo DB che non é stringa, ma di tipo objectID.
Non conosco bene il driver PHP prova a vedere se hai una object di tipo objectId che quello che usa mongo per salvare i documenti.

Spero di esserti stato utile.

Samuele

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "mongodb-it" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a mongodb-it+...@googlegroups.com.
Per postare in questo gruppo, invia un'email a mongo...@googlegroups.com.
Visita questo gruppo all'indirizzo http://groups.google.com/group/mongodb-it.
Per altre opzioni visita https://groups.google.com/d/optout.

pogopocomapogo

unread,
Aug 30, 2015, 1:08:03 PM8/30/15
to mongodb-it
In primis grazie mille per aver risposto! :)
per quanto riguarda l'id nel file deleteMongo.php ho fatto un cast portando l'id di Mongo a stringa.
Comunque sto prendendo una nuova via...
in tabella ho tolto il form delete e ho messo un semplice href
<a href="deleteMongo.php?id=<?php echo urlencode($key['_id']) ?>" onClick="return confirm('Sicuro di voler eliminare?');">Elimina</a></td>

in deleteMongo.php
$id = $_GET["id"];
    $rem_cursore
=array("_id"=>new MongoId($id));
   
//vedo se l'id corrisponde
    echo $id
;
    $rem
=$collezione->remove(array("_id" => new MongoId($id)));
   
    header
("Refresh: 0;url=mongo1.php");

facendo così non ho più l'errore ma comunque non elimina il documento.
Reply all
Reply to author
Forward
0 new messages